Autor Beitrag
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 13.04.13 18:37 
Guten Tag, ich wollte mal ne schöne Uhr auf mein Desktop setzen :D
alles sieht wunderbar aus, jedoch kenn ich nur 2 Möglichkeiten die Uhr nicht mimierbar zu machen...
Sie soll nicht minimiert werden wenn ich auf "Desktop anzeigen" klicke..
FsStayonTop soll vermieden werden, da sie nur auf dem Desktop sein soll (wie ein sich änderner Bildschirmhintergrund mit einer Uhr (die stimmt))
BorderStyle auf bsSizeToolWin da habe ich leider den Rand (Border) :(
Gibt es noch eine andere Möglichkeit? (ohne unbedingt auf Windows_messages zu reagieren)


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 15.04.2013 um 16:29

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!


Zuletzt bearbeitet von IhopeonlyReader am Di 23.04.13 13:28, insgesamt 1-mal bearbeitet
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Sa 13.04.13 20:27 
Soweit ich es getestet habe, reagiert das Ereignis OnMinimize nicht auf das Windowsereignis "Desktop anzeigen". Daher ist es nicht möglich, dies durch das Ereignis OnMinimize zu realisieren. Wahrscheinlich kommt man um eine Message-Behandlungsroutine (Application.OnMessage) nicht drum rum. Aber leider habe ich da wenig Erfahrungen.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 13.04.13 20:35 
ok dann von mir aus mit Messages.. aber so, dass es Nicht über anderen Anwendungen/fenstern liegt..

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Sa 13.04.13 20:44 
Aber ich habe eines getestet, und das scheint zu funktioneren.

Du benötigst doch für die Uhr einen Timer. In der Timer-Routine schreibst Du den Befehl:

ausblenden Delphi-Quelltext
1:
  Application.Restore;					


Dann wird wenigstens bei jedem Timer-Aufruf (nach x ms gemäß Timer.Interval) die Uhr wieder angezeigt. Das habe ich getestet und es funktioniert.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 13.04.13 21:19 
Also mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if (WindowState=wsMinimized) then
  begin
  sleep(10);
  WindowState := wsNormal;
  end;

funktioniert es immer BIS auf wenn ich "Desktop anzeigen" geklickt habe (Win+M funktioniert es, Win+D funktioniert es nicht)
ausblenden Delphi-Quelltext
1:
Application.Restore;					

wenn ich nun irgendein Fenster in den Vordergrund rufe, (nach Win+D/Desktop anzeige) ist die Uhr auf dem Desktop wieder sichtbar.
wenn ich kein Fenster öffne, bleibt die Uhr unsichtbar

Edit: Application.Restore ändert gar nichts, wenn ich den erstgeschriebenen Quelltext verwende..

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Sa 13.04.13 21:33 
Also, bei mir funktioniert das auch bei keinem offenen Fenster:

Die Timerroutine sieht bei mir so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.tmr1Timer(Sender: TObject);
begin
  lbl1.Caption := FormatDateTime('hh:nn:ss',Now);
  Tmr1.Enabled := FALSE;
  Tmr1.Enabled := TRUE;
  Application.Restore;
end;


Ich habe der Einfachkeit halber die Zeitausgabe auf einen Label gesetzt. Der Timer wird auch aufgerufen, wenn das Fenster minimiert ist.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 13.04.13 21:45 
ich habe herausgefunden, da ich mein Programm mit:
ausblenden Delphi-Quelltext
1:
2:
hwndOwner := GetWindow(Handle, GW_OWNER);   
ShowWindowAsync(hwndOwner, SW_HIDE);

in der Taskleiste verstecke, funktioniert Application.Restore; nicht!
wenn ich mein Programm in der Taskleiste anzeige, so funktioniert es mit Application.Restore;

gibt es eine Möglichkeit, die beides beinhaltet?

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Sa 13.04.13 22:23 
Das gilt bei mir genauso. Sobald das Programm nicht mehr in der Taskleiste auftaucht, ist die Möglichkeit, es dauerhaft anzuzeigen, nicht mehr gegeben. Möglicherweise liegt das an der unterschiedlichen Behandlung des Programms durch Windows, vielleicht wird der Timer abgeschaltet.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Sa 13.04.13 22:31 
user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
vielleicht wird der Timer abgeschaltet.

Nein! Denn die Uhrzeit ist ja weiterhin "upToDate" oder besser uptoTime :D

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Sa 13.04.13 22:47 
Ich habe es mal getestet.

Wenn ich eine OnHide-Prozedur wie folgt schreibe, dann funktioniert es auch mit dem Darstellen, wenn Du das Symbol in der Taskleiste deaktivierst:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormHide(Sender: TObject);
begin
  tmr1.Enabled := TRUE; // Timer aktivieren
end;

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: So 14.04.13 13:39 
bei mir klappt es leider nicht...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure TForm1.FormCreate(Sender: TObject);
var hwndOwner: HWnd;
begin
Autosize := True;
Left := 650;
Top := 250;
Label1.Caption := TimetoStr(Now);
hwndOwner := GetWindow(Handle, GW_OWNER);   
ShowWindowAsync(hwndOwner, SW_Hide);    
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if GetASyncKeyState( Ord('C'))<0 then application.terminate;

Label1.Caption := TimetoStr(Now)+' ';   // Uhrzeit anzeigen
Application.Restore;

if (WindowState=wsMinimized) then
  begin
  sleep(10);
  WindowState := wsNormal;
  end;
end;

procedure TForm1.FormHide(Sender: TObject);
begin
Timer1.Enabled := True;
end;

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: So 14.04.13 17:24 
Mein Test ergab, es geht nicht, wenn meine Timer-Prozedur wie folgt aussieht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  if GetASyncKeyState( Ord('C'))<0 then application.terminate;
  lbl1.Caption := FormatDateTime('hh:nn:ss',Now);
  Tmr1.Enabled := FALSE;
  Tmr1.Enabled := true;
  //Application.BringToFront;
  Application.Restore;


allerdings funktioniert es mit nicht ausgeblendetem Application.BringToFront. Die Uhr wird selbst dann NICHT ganz nach vorne gebracht, aber ohne das Bringtofront geht es nicht.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  if GetASyncKeyState( Ord('C'))<0 then application.terminate;
  lbl1.Caption := FormatDateTime('hh:nn:ss',Now);
  Tmr1.Enabled := FALSE;
  Tmr1.Enabled := true;
  Application.BringToFront;
  Application.Restore;


P.S.: Die Abfrage nach Windowstate = wsMinimized brauche ich nicht.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: So 14.04.13 21:17 
bei mir klappt es immer noch nicht (win+M klappt, aber Win+D nicht)
dein
ausblenden Delphi-Quelltext
1:
2:
Tmr1.Enabled := FALSE;  
Tmr1.Enabled := true;

lasse ich draußen..
aber meine TimerProcedure sieht dann so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if GetASyncKeyState( Ord('C'))<0 then application.terminate;   
Label1.Caption := TimetoStr(Now)+' ';   // Uhrzeit anzeigen
Application.BringToFront;
Application.Restore;

zusätzlich habe ich noch
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormHide(Sender: TObject);
begin
Timer1.Enabled := True;
end;


dennoch klappt Nur Win+M nicht aber Win+D .. hast du deins auch mit Win+D ("Desktop anzeigen") ausprobiert?

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Mo 15.04.13 04:35 
Also bei mir funktionieete es bei beiden, jedoch habe ich heute komischerweise gegenüber Gestern (Neustart?) den Effekt, dass nun das Programm nun wirklich im Vordergund ist und damit alle Kontrolle hat. Das ist sehr störend. Daher kann ich jetzt wenig weiter helfen.

Vielleicht weiß ja jemand Bescheid, der sich mit den Abläufen bei den Windows-Befehlen besser auskennt.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Mo 15.04.13 16:06 
Mhh dein Code fängt nur Win+M ab / setztz sich danach wieder richtig :(
Bei Win+R und über Taskmanager minimieren wird sie nicht wieder Sichtbar..
falls es durch den taskmanager minimiert wurde, kann ich es mit WindowState := wsNormal; wiederholen

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 16.04.13 14:57 
Ich verwende fsStayOnTop und verstecken des TaskButtons und bin damit sehr zufrieden. Es geht so wie ich es haben will. Bei Vollbildanwendungen ist das Programmfenster schön unsichtbar. Und ich habe keine Probleme mit dem Focus in anderen Anwendungen. Mit aktivem Alphablending könnte ich sogar noch lesen was drunter steht, aber das nimmt irgendwie ganz schön viel CPU.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Di 16.04.13 16:12 
naja StayonTop will ich vermeiden, da ich es ja nur auf dem Desktop sehen will.. es soll sozusagen IMMER das unterste der sichtbarem Fenster sein, gibt es kein anderes sichtbares fenster, ich es halt vorne^^.

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Di 16.04.13 17:00 
user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
naja StayonTop will ich vermeiden, da ich es ja nur auf dem Desktop sehen will.. es soll sozusagen IMMER das unterste der sichtbarem Fenster sein, gibt es kein anderes sichtbares fenster, ich es halt vorne^^.


Edit: Aber es wäre doch möglich, wenn KEIN fenster den Focus hat, fsstayontop "anzumachen"... dann wäre es sofort sichtbar oder? und wenn ein anderes fenster sichtbar wird, das fsstayontop wieder rausnehmen.. sichtbar ist es dann ja eigentlich noch, aber wird von dem anderen fenster überdeckt.. richtig?

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: So 21.04.13 15:15 
- push-

Kann man eine Anwendung als "Gadget" behandeln?

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Di 23.04.13 16:18 
- push -

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!