Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ventana de mensaje por un tiempo determinado (https://www.clubdelphi.com/foros/showthread.php?t=24209)

reina 11-08-2005 18:39:39

ventana de mensaje por un tiempo determinado
 
Hola bueno yo de nuevo..Necesito hacer una funcion que cree una ventana, una ventana de mensaje para mostrar un texto recibido por parametro,tambien recibe un tiempo, es decir recibe como parametro el mensaje y un tiempo, la ventana tiene que estar abierta por esos segundo indicados, si el tiempo es cero la ventana se cerrara cuando se presione cualquier tecla...bueno a ver quien me da una mano..creo que tiene que ver con un temporizador del sistema operativo..pero la verdad no me sale

dec 11-08-2005 18:46:22

Hola,

Tal vez no te parezca mal usar un componente de nombre TimeForm que puedes encontrar en el paquete DecComp, el cual puedes encontrar a su vez en la sección de componentes de esta misma página Web. Queda que limarle algunas cosillas (digo a TimeForm), pero, puede que te dé ciertas ideas o te sirva, directamente, para lo que pretendes.

Por otro lado revisa este Hilo, que tal vez también te pueda resultar útil.

reina 11-08-2005 20:52:12

tks por la ref al hilo
 
si ..esos componentes no sé si me sirven...porque estoy trabajando con delphi 2005...de todas maneras uso solo lo de delphi comun..tks por la data..el hilo ese que me indicaste por ahi si..pero ahora estoy peleando con otra cosa(regvariante), despues me ocupare de la ventanita..byee

dec 12-08-2005 13:05:48

Hola,

Cita:

Empezado por reina
(...) esos componentes no sé si me sirven...porque estoy trabajando con delphi 2005... (...)

Sí; puedes instalarlos en Delphi 2005, aunque no cuentes con un paquete específico para esa versión de Delphi, puedes usar el único que hay para Delphi 7. No creo que tuvieras demasiados problemas.

delphi.com.ar 12-08-2005 17:05:05

1 Archivos Adjunto(s)
A ver si te sirve....

delphi.com.ar 16-08-2005 15:44:07

100% Api, como hablamos fuera de los foros:
Código Delphi [-]
procedure WaitDialog(const AText: PChar; ATimeOut: Cardinal = 5000);
var
  wcClass: Windows.TWndClass;
  hHandle: HWND;
  Msg: TMsg;
  hCanvas: HDC;
  hFnt, hOldFont: HFONT;
  hTimer: UINT;
  R: TRect;
  L: Cardinal;
begin
  L := StrLen(AText);
  ZeroMemory(@wcClass, SizeOf(TWndClass));
  with wcClass do
  begin
    Style := CS_CLASSDC;
    hInstance := SysInit.HInstance;
    lpszClassName := 'WaitDlg';
    lpfnWndProc := @DefWindowProc;
    hbrBackGround := CTLCOLOR_MSGBOX+1;
  end;
  Windows.RegisterClass(wcClass);

  { Crea la ventana }
  hHandle := Windows.CreateWindowEx(WS_EX_TOOLWINDOW, wcClass.lpszClassName,
               nil, WS_POPUP or WS_BORDER, 0, 0, 100, 100, 0, 0,
               wcClass.hInstance, nil);

  if hHandle = 0 then
    RaiseLastOSError
  else
    try
      hCanvas := GetWindowDc(hHandle);
      { Crea la fuente }
      hFnt := CreateFont(-1, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET,
                     OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
                     DEFAULT_PITCH + FF_DONTCARE, 'MS Sans Serif');
      hOldFont := SelectObject(hCanvas, hFnt);
      try
        { Calcula el tamaño del texto }
        SetRectEmpty(R);
        R.Right := GetSystemMetrics(SM_CXSCREEN);
        DrawText(hCanvas, AText, L, R, DT_CALCRECT + DT_CENTER + DT_WORDBREAK);

        { Para que no escriba sobre el Borde }
        InflateRect(R, 2, 2);

        SetBkMode(hCanvas, TRANSPARENT);

        SetWindowPos(hHandle, 0,
                     (GetSystemMetrics(SM_CXSCREEN) - R.Right) div 2,
                     (GetSystemMetrics(SM_CYSCREEN) - R.Bottom) div 2,
                     R.Right, R.Bottom, 0);

        { Crea el timer que disparará el evento WM_TIMER cada ATimeOut milisegundos }
        hTimer := SetTimer(hHandle, 1, ATimeOut, nil);
        try
          ShowWindow(hHandle, SW_SHOW);
          while GetMessage(Msg, hHandle, 0, 0) do
          begin
            TranslateMessage(Msg);
            case Msg.message of
              WM_PAINT:
              begin
                GetClientRect(Msg.hwnd, R);
                OffsetRect(R, 1, 1);
                DrawText(hCanvas, PChar(AText), Length(AText), R, DT_WORDBREAK + DT_CENTER + DT_NOCLIP);
                DispatchMessage(Msg);
              end;
              WM_CLOSE, WM_DESTROY, WM_KEYDOWN, WM_TIMER, WM_RBUTTONDOWN:
              begin
                KillTimer(hHandle, hTimer);
                hTimer := 0;
                Break; {WM_QUIT}
              end;
              else
                DispatchMessage(Msg);
              end;
          end;
        finally
          if hTimer <> 0 then
            KillTimer(hHandle, hTimer);
        end;
      finally
        SelectObject(hCanvas, hOldFont);
        DeleteObject(hFnt);
      end;
    finally
      DestroyWindow(hHandle);
    end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  WaitDialog(PChar(Memo1.Lines.Text));
end;

Antuan 16-08-2005 17:05:16

Antuan
 
He probado la funcion y es muy chula, como sabeis sigo novato y se podria hacer que ese mensaje que depende del texto que pongamos en el memo.
Sea un mensaje que este incluido en el codigo de la funcion y que aparezca cada ciero tiempo.
Supongo que sera pedir mucho.
Gracias

delphi.com.ar 16-08-2005 17:07:48

No te entiendo... ¿Quieres "hardcodear" el parámetro de la función?.. si puedes hacerlo, remplaza el parámetro por una constante!

Saludos!

Antuan 16-08-2005 19:01:56

Reemplazado y funciona
 
Bueno es que lo quiero hacer a lo mejor es muy complicado
No es mas que la misma funcion se ejecutara cada cierto tiempo.
Yo ya tengo hecho algo en un formulario y el mensaje de ejecuta cada cierto tiempo. Pero esto no me sirve para una DLL que estoy haciendo
Pero como he visto que la funcion WaitDialog tiene incluido el timer y presenta el mensaje y luego lo borra.
Pues esa funcion me vendria bien siempre que se ejecute cada cierto tiempo para incluirla en la DLL.
Muchas gracias por tu informacion.


La franja horaria es GMT +2. Ahora son las 00:31:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi