PDA

Ver la Versión Completa : ShowModal Unigui


Neeruu
06-02-2013, 17:23:32
Hola a todos...

Necesito encontrar la forma de emular el ShowModal en las Unigui...
Se que hay un ejemplo que muestra como abrir mensajes y recuperar un respuesta... pero lo que yo necesito es mostrar un formulario y recuperar la respuesta de ese form cuando se cierra.

Al ejemplo no lo entiendo mucho, capaz si alguien con mas experiencia puede explicarme le encuentre la vuelta para lo que necesito.

Saludos. :)

cecam
06-02-2013, 18:39:35
Hoooola!!

Se trata de pasar un evento al form, de forma que, al cerrarse lo ejecute. Por ejemplo un form que no de a escoger "Sí" o "No"

type
TModalCallBack = procedure(ModalResult: TModalResult) of object;

TfrmUGSiNo = class(TUniForm)
btnSi: TUniBitBtn;
btnNo: TUniBitBtn;
procedure si(Sender: TObject);
procedure no(Sender: TObject);
procedure UniFormClose(Sender: TObject; var Action: TCloseAction);
private
public
ModalCallBack:TModalCallBack;
end;

procedure TfrmUGSiNo.UniFormClose(Sender: TObject; var Action: TCloseAction);
begin
if Assigned(ModalCallBack)
then ModalCallBack(ModalResult);
end;

procedure TfrmUGSiNo.si(Sender: TObject);
begin
ModalResult:=mrYes;
end;

procedure TfrmUGSiNo.no(Sender: TObject);
begin
ModalResult:=mrNo;
end;


Podrías tener una función similar a esta

procedure ugSiNo(const texte:string; callBack:TModalCallBack);
var
f:TfrmUGSiNo;
begin
f:=TfrmUGSiNo(MainModule.GetFormInstance(TfrmUGSiNo));
f.ModalCallBack:=callBack;
f.ShowModal;
end;
Y en tu formulario principal, la llamada sería algo así:

procedure TMainForm.UniSpeedButton5Click(Sender: TObject);
begin
ugSiNo('Que escoges?',_sino);
end;

procedure TMainForm._sino(mr:TModalResult);
begin
if mr=mrYes
then MessageDlg('Si', mtInformation, [])
else
if mr=mrNo
then MessageDlg('No', mtInformation, [])
else MessageDlg('Cancela', mtInformation, []);
end;
Saludos!