Jump to content

ORLANDO

Recommended Posts

preciso fazer uma opcao com messagedlg 

 

tipo 

voce e casado: se sim executa uma procedure se nao for executa outra procedure, mas ai ele nao executa corretamente,

fiz assim

no botaoonclick

var

  vbcasado:booelan;

begin

 vbcasado:=false;

  MessageDlg('Vc é Casado?', mtConfirmation, mbYesNo,
    procedure(Sender: TComponent; Res: Integer)
    begin
      case Res of
        mrYes : vbcasado :=true ;
        mrNo :  vbcasado:=false;
      end;
    end
  );

if vbcasado then

  casado

else

solteiro;

end;

O problema e que ele executa como false, depois que ele pergunta, ou seja, ele nao para para esperar a resposta e depois dar continuidade.

Alguem sabe como resolver isso.

 

 

Link to comment
Share on other sites

  • 1 year later...

Olá, também estou tendo o mesmo problema. 

Estou criando uma Unit "Library" que será acessada por diversos formulários distintos. Seu objetivo é fazer com que a MessageDlg seja chamada e seu retorno seja um Boolean, muito semelhante ao exemplo do nosso amigo. 

Por exemplo (função na Unit Library):

function Conf(Message):Boolean;
begin
  Result := False;

  if MessageDlg(Message, mtConfirmation, mbYesNo) = mrYes then Result := True 
  else Result := False;

end;

Fiz alguns testes e observei que a Function MessageDlg retorna sempre um Integer = 0, independente do botão (sim ou não) pressionado. 

(OBS: Quando a função é chamada de diretamente do formulário, desde que a procedure CallBack esteja criada, seu funcionamento ocorre normalmente - Assim como nos exemplos/Demos).

Minha versão do UniGUI é Complete_Professional_1.90.0.1519 e estou usando Delphi XE8.

 

 

Link to comment
Share on other sites

Olá! 

Resolvi o meu problema. 

Como a minha função que usava o MessageDlg estava em outra Unit, pude observar que as instruções do comando eram executadas somente após o retorno da minha função,  que no caso retornando sempre "False". Isso se deve, acredito eu, por conta dos controles de Threads e etc. 

Existe uma propriedade no MainModule - EnableSyncronousOperations, que ao habilitar (true), passou a funcionar seguindo a ordem das instruções em minha função de fato.

A chamada do MessageDlg, assim como mencionei acima, é sem passagem do CallBack

Quote

  if MessageDlg('Dialog3', mtConfirmation, mbYesNo) = mrYes then
    Result := True
  else
    Result := False;


Att.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...