Autor Beitrag
pesi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 67
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Mi 16.07.08 13:57 
so kann man minimieren verhindern:
ausblenden 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
     // abfangen der Anweisung, das Fenster zu minimieren
     If Msg.SizeType = Integer(wsMinimized) Then
       Begin
          // veranlassen, dass das Fenster wiederhergestellt wird
          PostMessage(Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
       End;
   End;


---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Und so immer im Hintergrund:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 67
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden volle Höhe 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:
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
    { Private-Deklarationen }
  Procedure WMSIZE(Var Msg: TWMSIZE); Message WM_SIZE;
  public
    { Public-Deklarationen }
  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
     // abfangen der Anweisung, das Fenster zu minimieren
     If Msg.SizeType = Integer(wsMinimized) Then
       Begin
          // veranlassen, dass das Fenster wiederhergestellt wird
          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 user profile iconNarses: Delphi-Tags hinzugefügt
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Do 17.07.08 09:44 
Normal sollte es so funktionieren. Vermutlich habe ich irgendwo einen Fehler, ich werde mal danach gucken
pesi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 67
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 24.02.09 18:41 
So ist es eigentlich auch falsch...
ausblenden 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.
ausblenden 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):
ausblenden 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
  // abfangen der Anweisung, das Fenster zu minimieren
  if Msg.SizeType = Integer(wsMinimized) then
    // veranlassen, dass das Fenster wiederhergestellt wird
    PostMessage(Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
end;
Es müssten nur noch die Einträge in der Taskleiste ggf. entfernt werden.
pesi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 67
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: 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