AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WM_SIZE + SIZE_MINIMIZED geht nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

WM_SIZE + SIZE_MINIMIZED geht nicht?

Ein Thema von MathiasSimmack · begonnen am 29. Jul 2003 · letzter Beitrag vom 30. Jul 2003
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#11

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 15:36
Bei Delphi3 funktioniert es übrigens auch nicht......


mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#12

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 16:18
@Chakotay1308
Ohne VCL scheint es funktionieren:
Zitat von Mathias:
Nach ein bisschen Rätselraten bei einem nonVCL-Programm habe ich das Problem nun mit WM_SIZE/SIZE_MINIMIZED lösen können. So wird auch auf den o.g. Sys-Hotkey reagiert, und das Programm verschwindet korrekt in der TNA.

Tja, und beim Versuch, das für die VCL umzusetzen, bin ich dann auf das obige Problem gestoßen. Vielleicht ist´s auch keins, sondern ich mache bloß irgendwo einen Fehler. Darum habe ich mal die beiden Beispiele (VCL und nonVCL) rangehangen.
Alexander
  Mit Zitat antworten Zitat
Snoopy240871

Registriert seit: 16. Apr 2003
Ort: Karlsruhe
9 Beiträge
 
Delphi 5 Professional
 
#13

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 16:20
Hallo Mathias,


vielleicht hilft dir das weiter. Das funktioniert in meinem Programm einwandfrei:

private
procedure ApplicationMinimize(Sender: TObject);

beispielsweise im TForm1.FormCreate...

with Application do

OnMinimize:=ApplicationMinimize;

und anschließend kannst du die procedure im implementations Teil beliebig verwenden...

procedure TForm1.ApplicationMinimize(Sender: TObject);
begin
// hier Code was beim minimieren der Anwendung passieren soll
end;

entsprechendes geht auch für
procedure ApplicationRestore(Sender: TObject); (wiederherstellen)
procedure ApplicationActivate(Sender:TObject); (Aktivierung)

Gruß Martin....
Don't worry, be happy !
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#14

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 17:18
Zitat von oki:
Das heißt, dass wmSize beim minimieren nicht aufgerufen wird.
Doch, eigentlich schon (s. nonVCL-Demo).

Zitat von Chakotay1308:
Unter Delphi (nonVCL) geht es nur sporadisch. D.h. beim normalen Minimieren funzt es und beim Win+M wieder nicht...
Das kann ich nicht bestätigen. Ich habe natürlich mein nonVCL-Beispiel (OnMinimize.dpr) mehrmals ausprobiert, und es verschwand immer in der TNA - egal, ob ich´s nun via Maus oder Systemmenü oder WIN+M minimiert habe.

Zitat von Snoopy240871:
vielleicht hilft dir das weiter. [...]
Ich hatte mal so etwas ähnliches bei AUQ.de gepostet. Aber das entspricht der Idee mit WM_SYSCOMMAND/SC_MINIMIZE. Wenn ich das Programm mit der Maus oder dem Systemmenü minimiere, dann verschwindet es natürlich in der TNA. Aber wenn ich den Hotkey WIN+M benutze, dann wird es nur normal in die Startleiste minimiert.
Darum bin ich ja auf die Sache mit WM_SIZE/SIZE_MINIMIZED gekommen. Aber dennoch Danke für den Vorschlag.


@Motzi: Ich werde mir deine Komponente wohl mal ansehen müssen. Ich hab´s gerade mal so versucht:
Delphi-Quellcode:
var
  oldproc : pointer;

function FormProc(wnd: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): LRESULT;
  stdcall;
begin
  case uMsg of
    WM_SIZE:
      if(wp = SIZE_MINIMIZED) and
        (Shell_NotifyIcon(NIM_ADD,@NID)) then
      begin
        ShowWindow(Application.Handle,SW_HIDE);
        Result := 0;
        exit;
      end;
  end;

  Result := CallWindowProc(oldproc,wnd,uMsg,wp,lp);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  NID.wnd := self.Handle;
  NID.hIcon := LoadIcon(hInstance,'DIABLO');

  oldproc := pointer(SetWindowLong(self.Handle,GWL_WNDPROC,
    integer(@FormProc)));
end;
Ist zwar IMHO rein technisch mit dem Überschreiben der "WndProc" identisch (s. Code oben), nur halt auf dem Weg, den man normalerweise für API-Programme benutzt. Ergebnis: keine Wirkung ... es sei denn, ich benutze SIZE_MAXIMIZED ...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 Uhr.
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