Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Taskleiste - Buttonblinken (https://www.delphipraxis.net/12000-taskleiste-buttonblinken.html)

sonic 18. Nov 2003 16:28


Taskleiste - Buttonblinken
 
Hallo alle zusammen!

Hätte eine Frage, hab schon gesucht, aber nicht gefunden...
Ich möchte gerne den Button in der Taskleiste blinken lassen,
so wies manche Programme ja tun, um auf sich aufmerksam zu machen.

Blos wie?

mfg Sonic :?:

MathiasSimmack 18. Nov 2003 17:26

Re: Taskleiste - Buttonblinken
 
Code:
BOOL FlashWindow(
  HWND hWnd,
  BOOL bInvert
);
1. Parameter = Handle der Anwendung (bei VCL, IMHO "Application.Handle")
2. Parameter = true, dann blinkt´s

sonic 18. Nov 2003 19:25

Re: Taskleiste - Buttonblinken
 
Danke erstmal,

Habe schon mal ausprobiert.
Verhält sich aber ein bisschen komisch - Blinkt zwar, aber...
Ich habe Windows XP, weiß nicht ob das eine Rolle spielt?
Wenn ich folgenden Code verwende, dann leuchtet der Taskleisten-Button am Schluss nach dem das Fenster wieder maximiert ist immer!?
zu Beginn:

Timer1 = TTimer;
Timerintervall = 500
Enabled = FALSE

Code:


procedure TForm1.Button1Click(Sender: TObject);
begin
   Application.Minimize;
   Timer1.Enabled := TRUE;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   FlashWindow(Application.Handle, TRUE);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnRestore := DoOnRestoreApplication;
end;

procedure TForm1.DoOnRestoreApplication(Sender : TObject);
begin
  Timer1.Enabled := FALSE;
end;

Mfg Sonic
:gruebel:

Stanlay Hanks 18. Nov 2003 19:38

Re: Taskleiste - Buttonblinken
 
Ich kenn mich da ja nicht aus, aber vielleicht brauchst du dazu gar keinen Timer, sondern musst, wenn es aufhören soll zu blinken einfach

Delphi-Quellcode:
   FlashWindow(Application.Handle, FALSE);
schreiben.
Ich gehe davon aus, dass das einfach nur dem System sagt, dass der Button jetzt blinken soll, bis man ihm sagt, es soll damit aufhören.

Man liest sich, Stanlay :hi:

MathiasSimmack 18. Nov 2003 19:41

Re: Taskleiste - Buttonblinken
 
Eben nicht.
Zitat:

Zitat von PSDK
The FlashWindow function flashes the window only once; for repeated flashing, the application should create a system timer.

For an example, see Notifying the User of Errors:
Code:
FlashWindow(hwnd, TRUE); // invert the title bar
Sleep(500);             // wait a bit
FlashWindow(hwnd, TRUE); // invert again
 
// Play the system exclamation sound.
 
MessageBeep(MB_ICONEXCLAMATION);


Stanlay Hanks 18. Nov 2003 19:43

Re: Taskleiste - Buttonblinken
 
Zitat:

Zitat von MathiasSimmack
Eben nicht.

Ich hab ja nur gemeint :oops:

MathiasSimmack 18. Nov 2003 19:45

Re: Taskleiste - Buttonblinken
 
Ja, war ja auch nicht böse gemeint. Habe eben bloß fix im PSDK nachgeschaut ... ich geb´s ja zu ... :cheers:

sonic 18. Nov 2003 19:48

Re: Taskleiste - Buttonblinken
 
In der Hilfe steht das man einen Timer dafür braucht...

Ich bin draufgekommen, das es manchmal schon funktioniert.
Ich hab auch schon, folgendes versucht...

Delphi-Quellcode:
procedure TForm1.DoOnRestoreApplication(Sender : TObject);
begin
* Timer1.Enabled := FALSE;
  FlashWindow(Application.Handle, FALSE);
end;
Also am Schlss nochmal FALSE schalten. Machts aber noch schlimmer.
Hab die Funktion auch schon einzeln nur in ein Button Click getan,
um zu sehen was sie macht. Mir unklar :gruebel:

Mfg Mike

MathiasSimmack 18. Nov 2003 20:06

Re: Taskleiste - Buttonblinken
 
Die Funktion invertiert die Titelleiste des Fensters (bzw. den Button in der Startleiste) genau einmal. Aus einer aktiven Titelzeile wird so
Delphi-Quellcode:
FlashWindow(self.Handle,true);
eine inaktive. Um den Vorgang umzukehren und die Titelzeile wieder als aktiv darzustellen, musst du die Funktion noch einmal aufrufen - und genau so wie zuvor:
Delphi-Quellcode:
FlashWindow(self.Handle,true);
"false" als zweiter Parameter bedeutet nur, dass die Titelzeile in ihren ursprünglichen Zustand versetzt wird. War sie also inaktiv, wird sie das auch wieder. War sie aktiv, dann wird sie durch "false" eben wieder aktiv.

Ein typisches Geblinke der Fenstertitelzeile via Button-Klick und ohne Timer:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
begin
  for i := 1 to 4 do begin
    FlashWindow(self.Handle,true);
    if(i < 4) then sleep(60);
  end;
end;

Luckie 18. Nov 2003 20:08

Re: Taskleiste - Buttonblinken
 
Ich werfe noch mal ganz mutig ein FlashWindowEx in die Runde. *werf*
Da kann man alles einstellen, wie oft, wie lange, wo, warum, weshalb, ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz