| Autor |
Beitrag |
pesi
      
Beiträge: 67
Erhaltene Danke: 1
|
Verfasst: Di 15.07.08 15:38
Hallo,
ich würde gerne eine Tool programmieren, dass immer auf dem Desktop liegen bleibt, sich also auch nicht minimiert wenn "Desktop anzeigen" gedrückt wird und natürlich auch nicht im Vordergrund ist wenn eine andere Anwendung davor läuft.
Hab leider im Internet irgendwie noch nicht den richtigen Hinweis ausfindig machen können. Bestimmt eine Kleinigkeit, aber ich weiss es nicht.
(Ich verwende Turbo Delphi und D5)
Vielen Dank & Gruß
Peter
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Mi 16.07.08 13:57
so kann man minimieren verhindern:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| tform1 = class (tform) private Procedure WMSIZE(Var Msg: TWMSIZE); Message WM_SIZE; end;
implementation
Procedure TForm1.WMSIZE(Var Msg: TWMSIZE); Begin If Msg.SizeType = Integer(wsMinimized) Then Begin PostMessage(Handle, WM_SYSCOMMAND, SC_RESTORE, 0); End; End; |
--- Moderiert von Narses: Beiträge zusammengefasst---
Und so immer im Hintergrund:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| type tform1 = class (tform) protected procedure CreateParams(var Params: TCreateParams); override; end;
implementation
procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); if Assigned(Application.MainForm) then begin Params.WndParent := GetDesktopWindow; Params.Style := WS_CHILD; end; end; |
|
|
pesi 
      
Beiträge: 67
Erhaltene Danke: 1
|
Verfasst: Do 17.07.08 09:37
Hi Boldar,
also bei mir funktioniert nichts von beiden. Aber vermutlich bin ich einfach zu blöd diese beiden Routinen zu implementieren.
Das sieht bei mir wie folgt aus:
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: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| unit Unit4;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type TForm4 = class(TForm) protected procedure CreateParams(var Params: TCreateParams); override;
private Procedure WMSIZE(Var Msg: TWMSIZE); Message WM_SIZE; public end;
var Form4: TForm4;
implementation
{$R *.dfm}
procedure TForm4.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); if Assigned(Application.MainForm) then begin Params.WndParent := GetDesktopWindow; Params.Style := WS_CHILD; end; end;
Procedure TForm4.WMSIZE(Var Msg: TWMSIZE); Begin If Msg.SizeType = Integer(wsMinimized) Then Begin PostMessage(Handle, WM_SYSCOMMAND, SC_RESTORE, 0); End; End; end. |
Das heißt, dass ich einfach die Proceduren und ihre Deklarationen reinkopiert habe. Hätte ich was anders machen müssen???
Danke & Gruß
Peter
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Do 17.07.08 09:44
Normal sollte es so funktionieren. Vermutlich habe ich irgendwo einen Fehler, ich werde mal danach gucken
|
|
pesi 
      
Beiträge: 67
Erhaltene Danke: 1
|
Verfasst: Di 24.02.09 11:55
Hallo,
da ich hierfür noch immer keine Lösung finden konnte möchte ich das Thema nochmal nach vorne holen.
Vielleicht gibt´s ja mittlerweile jemanden der eine zündende Idee für mich hat.
Danke & Gruß
Peter
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Di 24.02.09 12:06
mmh also bei mir funktioniert das definitiv so...
Ich weiss auch nicht wo da der Fehler liegen könnte...
Das muss sich dann mal einer der Profis ansehen...
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 24.02.09 18:41
So ist es eigentlich auch falsch... Delphi-Quelltext 1:
| if Assigned(Application.MainForm) then | ist eigentlich an der Stelle noch false, da das kommende Hauptfenster gerade erst erzeugt wird. Außerdem: Was hat das für einen Sinn, außer um nur weitere Fenster und gerade nicht das Hauptfenster zu treffen. Delphi-Quelltext 1:
| Params.Style := WS_CHILD; | Das löscht sämtliche anderen Styles.
Funktioniert hat das deshalb bei mir nicht. Funktionieren tut das (Vista): Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm148.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.WndParent := GetDesktopWindow; Params.Style := Params.Style or WS_CHILD; end;
procedure TForm148.WMSize(var Msg: TWMSIZE); begin if Msg.SizeType = Integer(wsMinimized) then PostMessage(Handle, WM_SYSCOMMAND, SC_RESTORE, 0); end; | Es müssten nur noch die Einträge in der Taskleiste ggf. entfernt werden.
|
|
pesi 
      
Beiträge: 67
Erhaltene Danke: 1
|
Verfasst: Di 24.02.09 20:01
Hi und vielen Dank,
aber auch mit diesen Änderungen klappt es nicht.
Die Form wird noch immer minimiert wenn ich auf "Desktop anzeigen" gehe.
Mag sein das es an meinem XP liegt aber hier klappt´s auf jeden Fall nicht!
LG Peter
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 24.02.09 21:12
Hmm, vielleicht könnte es helfen WM_SYSCOMMAND bei dem Parameter SC_MINIMIZE abzufangen. Sonst fällt mir dazu auch nichts ein.
Was mir aufgefallen ist: Wenn ich FormStyle auf StayOnTop setze, dann ist das Fenster natürlich im Vordergrund vor anderen Fenstern, wird durch das Desktop anzeigen aber gleichzeitig aber auch nicht minimiert, wenn der obige Quelltext drin ist.
Ich überlege, ob man das vielleicht irgendwie nutzen kann, mal schauen was bei FormStyle so alles gesetzt wird.
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: Di 24.02.09 22:42
Da www.delphi-forum.de/viewtopic.php?t=83997 wurde ein ähnliches/gleiches Thema diskutiert.
_________________ Salus populi suprema lex esto
|
|