Caixa de Mensagens!!!

Delphi

19/03/2004

Caros colegas..

Existe alguma caixa de mensagem que seja MODAL somente para o sistema, mas para aplicativos externos, não seja do tipo MODAL???
Se existe como usar?

agradeço antecipadamente..

Cabelo


Cabelo

Cabelo

Curtidas 0

Respostas

Sremulador

Sremulador

19/03/2004

acho que o messagedlg (´menssagem´, tipo, [botao], help)


GOSTEI 0
Cabelo

Cabelo

19/03/2004

Caro Colega

O messagedlg tb é modal..

obrigado pela atenção..

Cabelo


GOSTEI 0
Beppe

Beppe

19/03/2004

Eu não entendi bem o q vc quer...seria bloquear o acesso ao resto do teu programa, e deixar acessar os outros programas? Se for isso, ShowMessage, MessageDlg, e Application.MessageBox fazem isso...


GOSTEI 0
Cabelo

Cabelo

19/03/2004

Caro colega Beppe..

Meu problema é o seguinte, eu chamo um aplicativo externo, via programa, como o bloco de notas, assim que eu crio ele preciso enviar uma mensagem, perguntando se deseja salvar ou não as alterações no arquivo..

O problema é que se eu usar o mesagedlg, por ser uma caixa de mensagem do tipo MODAL, ele sobrepõe o bloco de notas e fica ´no meio´ do Aplicativo impossibilitando assim a visualização completa do aplicativo..

O quê preciso é que essa mensagem fique ´por baixo´ do aplicativo externo..

Sem mais

Agradeço a atenção

Cabelo


GOSTEI 0
Adilsond

Adilsond

19/03/2004

Então utilize a função ExecAndWait para executar o seu aplicativo externo e aguardar a sua finalização, e então, depois você mostra a mensagem. Ex:

ExecAndWait(´c:\windows\notepad.exe´, ´´, SW_SHOW);
if MessageDlg(.....

A função, se voce ainda não a possuir esta abaixo:
function ExecAndWait(const FileName, Params: string;
  const WindowState: Word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Coloca o nome do arquivo entre aspas. Isto é necessário devido aos espaços contidos em nomes longos }
  CmdLine := ´"´ + Filename + ´"´ + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do begin
  cb := SizeOf(SUInfo);
  dwFlags := STARTF_USESHOWWINDOW;
  wShowWindow := WindowState;
  end;
  Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false,
  CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
  PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
  { Aguarda até ser finalizado }
  if Result then begin
  WaitForSingleObject(ProcInfo.hProcess, INFINITE);
  { Libera os Handles }
  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);
  end;
end;



GOSTEI 0
Cabelo

Cabelo

19/03/2004

Caro colega Adilson..

Esta função funcionaria perfeitamente se estivesse compilando .VCL, que não é o caso..

Meu problema é que compilo .CLX, e esta função utiliza API´s do Windows, e algumas classes que não acompanham o Nativo .CLX..

Obrigado pela atenção..

Cabelo


GOSTEI 0
POSTAR