Ver Mensaje Individual
  #7  
Antiguo 21-12-2006
Avatar de rcarrillom
[rcarrillom] rcarrillom is offline
Miembro Premium
 
Registrado: dic 2004
Ubicación: UK / North Sea / Norway / Golfo de México / Frente a mi Laptop
Posts: 219
Reputación: 20
rcarrillom Va por buen camino
Cita:
Empezado por neosyoshiran
rcarrillom
La idea del TActionList nunca lo utilize, ando algo perdido pero los botones que utilizo como Nuevo, MOdificar , Borrar, llaman a otras Forms, donde ahi pongo los datos y recien los guardo con SQL.

Me pueden orientar mas por favor.

Saludos
Por supuesto, es más fácil incluso (en mi opinión personal) usar los TDataSetXXXX que asignar código en el OnStateChange u OnDataChange del DataSet, lo menciono porque yo uso esta metodología y no escribo ni una sola línea de código para habilitar/deshabilitar los botones, opciones de menú, speedbuttons, etc. Lo que comentas de mandar llamar otras Forms para la captura de los datos, ya mencioné en mi anterior post que lo debes de hacer en el evento OnExecute del TDataSetXXXX.
A más detalle uso esta técnica (tiene patente y es mía, y de licencia jamonware):

* Definir los TDataSetXXX, que en mi caso lo hago en el form principal. En mi anterior post aparece la forma de hacerlo.
* Los TDataSetXXX que se usan son TDataSetInsert, TDataSetEdit y opcionalmente TDataSetDelete y TDataSetRefresh.
* Mis aplicaciones de BD son casi siempre MDI (pero mi método puede aplicar a forms no MDI).
* Casi siempre una form MDIChild tiene un DBGrid.
* El susodicho MDIChild tiene como características:

* Dos métodos del tipo TNotifyEvent para llamar al Form de captura de datos (uno para editar y otro para modificar). Opcionalmente se puede poner un tercero para el caso Eliminar y un cuarto para actualizar la vista o consulta en caso de ser SQL.

Código Delphi [-]
procedure TfrmCuentas.actInsertarExecute(Sender: TObject);
begin
  dlgCuenta := TdlgCuenta.Create(Self);
  with dlgCuenta do begin
    if ShowModal = mrOk then begin
      {Tu código para insertar el nuevo registro}
    end;
    Free
  end
end;

procedure TfrmCuentas.actEditarExecute(Sender: TObject);
begin
  dlgCuenta := TdlgCuenta.Create(Self);
  {Tu código para leer elos datos y pasarlos al Formulario}
  with dlgCuenta do begin
    if ShowModal = mrOk then begin
      {Tu código para insertar el nuevo registro}
    end;
    Free
  end
end;

procedure TfrmCuentas.actBorrarExecute(Sender: TObject);
begin
  {Tu código para manejar la eliminación del registro}
end;

* Código en el evento OnActivate para asignar los métodos anteriores a los TDataSetXXX

Código Delphi [-]
procedure TfrmCuentas.FormActivate(Sender: TObject);
begin
  frmMain.actBDInsertar.OnExecute := actInsertarExecute;
  frmMain.actBDEditar.OnExecute := actEditarExecute;
  frmMain.actBDBorrar.OnExecute := actBorrarExecute
end;

* Código en el evento OnDeactivate para cuando se seleccione otro form,

Código Delphi [-]
procedure TfrmCuentas.FormDeactivate(Sender: TObject);
begin
  frmMain.actBDInsertar.OnExecute := nil;
  frmMain.actBDEditar.OnExecute := nil;
  frmMain.actBDBorrar.OnExecute := nil
end;

* Código en el evento OnClose del MDI para autodestruirse (me sonó a M:I )

Código Delphi [-]
procedure TfrmCuentas.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree
end;

* Código en el evento OnDestroy para asegurarme que se desactive correctamente el evento personalizado de los TDataSetXXX

Código Delphi [-]
procedure TfrmCuentas.FormDestroy(Sender: TObject);
begin
  FormDeactivate(Self);
  {Tu código para manejar otras destrucciones}
end;

Y eso es todo. Recuerda enlazar los botones, opciones de menú, botones de barras de herramientas al TDataSetXXX a través de la propiedad Action.
Una nota, si los TDataSetXXX no tienen asociado código en su evento OnExecute, realizan la accion predeterminada por ejemplo el TDataSetEdit pone en modo edición a un DBGrid (dependiendo si la consulta es o no editable), en cambio si tiene código asociado ejecuta éste en vez de la acción predeterminada, ésta es la magia y es lo que permite llamar las forms personalizadas de captura como mencionas.
Yo hago abuso extensivo de los menús, botones, popups y barras de herramientas, por eso uso el TActionList, código en un solo lugar, asociado a muchos componentes.
Creo que más claro y explicado no puedo ser, esperando no sonar vanidoso y gurú, que aún no lo soy .
__________________
eLcHiCoTeMiDo - Rompecorazones profesional
Yo no soy presumido; ¿Pero de qué sirve mi humilde opinión contra la de los espejos?
Salva a un nylon, usa prendas de piel de foca
Responder Con Cita