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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...