PDA

Ver la Versión Completa : optimizar el codigo en menos lineas


darkbits
18-07-2013, 05:15:59
este codigo me funciona perfectamente
lo utilizo para actualizar el valor utilizo, el mismo codigo utilizo en mas de 10 formularios. y tengo que copiarlos 1x1 para que funcione.

mi consulta es como puedo tener este codigo una sola vez, y que cada vez que lo necesite lo llame como una funcion o mejor como precedure
sin estar copiando 1x1 en cada form q necesito

es para optimizar el codigo en menos lineas nada mas.
ojo el sql y el codigo me funciona de pelo. lo unico quiero optimizar para que no sea pepetitivo mas de 10 veces en el proyecto.



procedure T_Sisterna.FormClose(Sender: TObject; var Action: TCloseAction);
begin
_DM.consulta1.SQL.Text:='select * From sisterna Where op_sis='''+operador+'''';
_DM.consulta1.Open;
SpeedButton1.caption:= _DM.consulta1.FieldByName('e10').text +' TARJETAS 10BS';
SpeedButton2.caption:= _DM.consulta1.FieldByName('e20').text +' TARJETAS 20BS';
SpeedButton3.caption:= _DM.consulta1.FieldByName('e30').text +' TARJETAS 30BS';
SpeedButton4.caption:= _DM.consulta1.FieldByName('e50').text +' TARJETAS 50BS';
SpeedButton5.caption:= _DM.consulta1.FieldByName('e100').text +' TARJETAS 100BS';
SpeedButton6.caption:= _DM.consulta1.FieldByName('e100c').text +' CABINAS 100BS';

end;

ElKurgan
18-07-2013, 07:56:39
Hombre, si todos los formularios tienen los mismmos botones y los mismos nombres no es difícil. Te creas una unit que contenga la función a compartir de este modo:


procedure ActualizarBotones(Formulario: TForm; operador: string );
begin
_DM.consulta1.SQL.Text:='select * From sisterna Where op_sis='''+operador+'''';
_DM.consulta1.Open;
Formulario.SpeedButton1.caption:= _DM.consulta1.FieldByName('e10').text +' TARJETAS 10BS';
Formulario.SpeedButton2.caption:= _DM.consulta1.FieldByName('e20').text +' TARJETAS 20BS';
Formulario.SpeedButton3.caption:= _DM.consulta1.FieldByName('e30').text +' TARJETAS 30BS';
Formulario.SpeedButton4.caption:= _DM.consulta1.FieldByName('e50').text +' TARJETAS 50BS';
Formulario.SpeedButton5.caption:= _DM.consulta1.FieldByName('e100').text +' TARJETAS 100BS';
Formulario.SpeedButton6.caption:= _DM.consulta1.FieldByName('e100c').text +' CABINAS 100BS';
end;


Y la llamarías, por ejemplo, así:


procedure T_Sisterna.FormClose(Sender: TObject; var Action: TCloseAction);
var
Formulario: TForm;
begin
Formulario := TForm(Sender);
ActualizarBotones(Formulario, operador); // Supongo que "operador" es alguna variable de todos los formularios
end;


Lo escribo de cabeza, no lo he probado, pero debería funcionar (más o menos)

saludos

gatosoft
19-07-2013, 03:41:52
Otra posibilidad, si los botones hacen lo mismo en cada formulario, podría ser utilizar un TFrame para definir allí los botones una sola vez e "incrsutar" el TFrame donde corresponda. De ésta manera, el mantenimeinto lo tendrías que ahecr en un solo sitio.

ElKurgan
19-07-2013, 07:45:21
Muy cierto, no había caído en los Frames. Alguna vez los he usado y la verdad, son muy potentes.

Gracias por la aclaración

ozsWizzard
19-07-2013, 13:12:12
Casi mejor crear un formulario padre con esa parte y que el resto de formularios hereden de ahí. No sé si lo habrán arreglado ya, pero hay un bug en la programación de los Frames (yo he trabajado con Delphi 7 y XE2 y en ambos pasa) y a veces los componentes pierden los eventos programados.

Saludos

Casimiro Notevi
19-07-2013, 13:32:40
Casi mejor crear un formulario padre con esa parte y que el resto de formularios hereden de ahí. No sé si lo habrán arreglado ya, pero hay un bug en la programación de los Frames (yo he trabajado con Delphi 7 y XE2 y en ambos pasa) y a veces los componentes pierden los eventos programados. Saludos

Pues nunca me ha pasado y los uso habitualmente en todos los proyectos, desde delphi 4 :)