Ver Mensaje Individual
  #3  
Antiguo 30-05-2024
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 937
Reputación: 24
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Estimado Eduar23, creo entender que lo que requiere, le propongo este código...
Este contiene 1 Checkbox, 2 TEdit, 2 TButtons y 1 TMemo.

Principalmente lo que se hace es manipular el valor de ModalResult del botton btnSave, cambiando su valor a mrOk o mrNone. El botton btnCancel está asignado como mrCancel.

Al desplegar el formulario con ShowModal, este espera un valor de retorno (mrOk, mrCancel,...) si el valor de retorno es mrNone, el formulario no se cierra.

Para ello se hace uso del control chkDigitMode que al ser verdadero, asigna mrNone al botón btnSave, quedando en un ciclo hasta presionar el botón btnCancel o la tecla ESC.

Código Delphi [-]
unit Unit2;

interface

uses
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Variants,
  System.Classes,
  Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    btnSave: TButton;
    btnCancel: TButton;
    chkDigitMode: TCheckBox;
    mmData: TMemo;
    procedure btnCancelClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure InsertData(v1,v2:String);
    procedure ClearEdits();
    class procedure Execute();
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.btnSaveClick(Sender: TObject);
begin
     InsertData(Edit1.Text,Edit2.Text);

     ClearEdits();

     Edit1.SetFocus;

     if chkDigitMode.Checked then
        ModalResult:=mrNone
     else
        ModalResult:=mrOk;
end;

procedure TForm2.btnCancelClick(Sender: TObject);
begin
     Close;
end;

procedure TForm2.InsertData(v1,v2:String);
begin
     mmData.Lines.Add(format('Value 1:%s, Value 2:%s',[v1,v2]));
end;

procedure TForm2.ClearEdits;
begin
    Edit1.Text:=Emptystr;
    Edit2.Text:=Emptystr;
end;

class procedure TForm2.Execute;
begin
     with TForm2.Create(nil) do
     begin
          btnSave.ModalResult  :=mrOk;
          btnCancel.ModalResult:=mrCancel;

          ClearEdits();

          ShowModal;

          free;
     end;
end;

end.

Código Delphi [-]
unit Unit1;

interface
...

uses Unit2;
begin
     //Llamada a formulario de digitación...
     TForm1.Execute();
end
Bueno espero le ayuda o de ideas para solucionar su problema...Saludos cordiales
Responder Con Cita