Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   parent minimieren (https://www.delphipraxis.net/124978-parent-minimieren.html)

khh 28. Nov 2008 07:35


parent minimieren
 
hallo zusammen,
ich habe eine von tbutton abgeleitete klasse die zur Laufzeit auf einem form erstellt wird.
das Click-event habe ich überschrieben um damit eine aktion auszulösen.

Gibts ne möglichkeit das parentform aus der mybutton-Klasse zu minimieren?

so in der art: parent.minimize ;-)


ich danke euch

gruss Kh

mkinzler 28. Nov 2008 07:49

Re: parent minimieren
 
Versuch mal
Delphi-Quellcode:
Parent.Hide;

khh 28. Nov 2008 08:05

Re: parent minimieren
 
Zitat:

Zitat von mkinzler
Versuch mal
Delphi-Quellcode:
Parent.Hide;

ja , parent.hide funktioniert.
aber so ist das Form ja "versteckt".
ich brauche das Form aber minimiert, damit es auf der taskleiste liegt.


Gruss KH

Dust Signs 28. Nov 2008 08:08

Re: parent minimieren
 
.Minimize vielleicht?

Dust Signs

mkinzler 28. Nov 2008 08:13

Re: parent minimieren
 
Kennt Lazarus WindowState?

Sunlight7 28. Nov 2008 08:16

Re: parent minimieren
 
Eine WM_SYSCOMMAND Nachricht mit SC_MINIMIZE an das Parenthandle schicken?

mkinzler 28. Nov 2008 08:20

Re: parent minimieren
 
Zitat:

Zitat von Sunlight7
Eine WM_SYSCOMMAND Nachricht mit SC_MINIMIZE an das Parenthandle schicken?

Das würde dann aber nur auf Windows funktionieren.

DeddyH 28. Nov 2008 08:24

Re: parent minimieren
 
Wäre es nicht besser, mit GetParentForm das Elternformular zu ermitteln? Parent kann ja auch z.B. ein Panel sein.

khh 28. Nov 2008 08:26

Re: parent minimieren
 
Zitat:

Zitat von mkinzler
Zitat:

Zitat von Sunlight7
Eine WM_SYSCOMMAND Nachricht mit SC_MINIMIZE an das Parenthandle schicken?

Das würde dann aber nur auf Windows funktionieren.


minimize funktioniert nicht, hatte ich schon probiert

ich denke das mit dem systemkommando sollte gehen, ich weiss da nur nicht die genaue syntax, wie ist die?
( es reicht aus,wenn unter windows funktioniert)

Gruss KH

DeddyH 28. Nov 2008 08:27

Re: parent minimieren
 
Delphi-Quellcode:
SendMessage(<ParentHandle>, WM_SYSCOMMAND, SC_MINIMIZE, 0);

khh 28. Nov 2008 08:30

Re: parent minimieren
 
Zitat:

Zitat von DeddyH
Wäre es nicht besser, mit GetParentForm das Elternformular zu ermitteln? Parent kann ja auch z.B. ein Panel sein.

ich denke du hast recht,
und dann in abhängigkeit des ergebnises minimieren.

khh 28. Nov 2008 09:07

Re: parent minimieren - erweitert
 
Zitat:

Zitat von khh
Zitat:

Zitat von DeddyH
Wäre es nicht besser, mit GetParentForm das Elternformular zu ermitteln? Parent kann ja auch z.B. ein Panel sein.

ich denke du hast recht,
und dann in abhängigkeit des ergebnises minimieren.


ich danke euch, so funktionierts richtig:


parentForm:= GetParentForm(self);
if (Parent.ClassType.InheritsFrom(TForm)) then
begin
SendMessage(parentForm.handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;


gruss Kh

khh 28. Nov 2008 09:22

Re: parent minimieren
 
um das ganze noch zu erweitern, würde ich gerne diese message im parent abfragen und unterschiedlich darauf reagieren.

wenn ich mir die msg im parent anzeigen lasse hab ich den integerwert, der jedesmal anders ist, wie weiter ?


Es soll quasi das parent dann entscheiden ob es das minimize kommando ausführt.
Geht das, und wenn ja wie ?

danke euch

DeddyH 28. Nov 2008 09:28

Re: parent minimieren
 
Wie fängst Du die Message denn ab?

khh 28. Nov 2008 09:43

Re: parent minimieren
 
Zitat:

Zitat von DeddyH
Wie fängst Du die Message denn ab?

so:

ShowMessage(IntToStr(self.Handle));

aber ich denke mal das passt so nicht :-(

gruss Kh

DeddyH 28. Nov 2008 09:55

Re: parent minimieren
 
Delphi-Quellcode:
type
  TDeinForm = class(TForm)
  ...
  private
    { Private-Deklarationen }
    procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
  ...
  end;

...

implementation

...

procedure TDeinForm.WMSysCommand(var Msg: TWMSysCommand);
begin
  if Msg.CmdType = SC_MINIMIZE then
    ShowMessage('Minimieren')
  else
    inherited;
end;

khh 28. Nov 2008 10:14

Re: parent minimieren
 
ich danke dir.

und wie reagiert das form jetzt darauf?
ich muss die private Proc doch irgendwo aufrufen?

über nen timer? oder wie?

Gruss Kh

DeddyH 28. Nov 2008 10:22

Re: parent minimieren
 
Schreib das doch einfach mal in Deinen Code und minimiere das Formular.

khh 28. Nov 2008 10:58

Re: parent minimieren
 
Zitat:

Zitat von DeddyH
Schreib das doch einfach mal in Deinen Code und minimiere das Formular.

hab ich ja gemacht, aber da tut sich so nix,
keine msgbox :-(


Gruss Kh

DeddyH 28. Nov 2008 11:13

Re: parent minimieren
 
Hmm... unter Delphi funktioniert das so. Setz doch mal einen Breakpoint auf die Zeile
Zitat:

Delphi-Quellcode:
  if Msg.CmdType = SC_MINIMIZE then

Kommst Du da überhaupt an?

khh 28. Nov 2008 11:19

Re: parent minimieren
 
Zitat:

Zitat von DeddyH
Hmm... unter Delphi funktioniert das so. Setz doch mal einen Breakpoint auf die Zeile
Zitat:

Delphi-Quellcode:
  if Msg.CmdType = SC_MINIMIZE then

Kommst Du da überhaupt an?

nee da komme ich nicht an

:-(

gruss Kh

DeddyH 28. Nov 2008 11:30

Re: parent minimieren
 
Zeig doch mal den interface-Teil Deiner Unit.

khh 28. Nov 2008 11:38

Re: parent minimieren
 
Zitat:

Zitat von DeddyH
Zeig doch mal den interface-Teil Deiner Unit.

hier:
type

{ Tmenueauswahlform }

Tmenueauswahlform = class(TForm)
beendenButton: TButton;
Label1: TLabel;
dbnameLabel: TLabel;
Label2: TLabel;
Panel1: TPanel;

procedure beendenButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);

private
{ Private-Deklarationen }
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;


public
{ public declarations }
end;

var
menueauswahlform: Tmenueauswahlform;
newbox: TmyButton;

implementation

DeddyH 28. Nov 2008 11:51

Re: parent minimieren
 
Das sieht OK aus. Muss ich mir wohl doch Lazarus unter Windows installieren, sonst finde ich das eh nicht.

khh 28. Nov 2008 11:53

Re: parent minimieren
 
Zitat:

Zitat von DeddyH
Das sieht OK aus. Muss ich mir wohl doch Lazarus unter Windows installieren, sonst finde ich das eh nicht.

das wäre ja super ;-)

ich denke es macht ja auch sinn, das form entscheiden zu lassen.


Gruss Kh

DeddyH 28. Nov 2008 12:05

Re: parent minimieren
 
Den Effekt kann ich bestätigen, die Methode wird nicht durchlaufen. Es gibt zwar das Ereignis OnWindowStateChange, aber das wird erst nach der Änderung ausgelöst. Somit muss ich leider passen, Lazarus-Experten an die Front.

khh 28. Nov 2008 12:09

Re: parent minimieren
 
Zitat:

Zitat von DeddyH
Den Effekt kann ich bestätigen, die Methode wird nicht durchlaufen. Es gibt zwar das Ereignis OnWindowStateChange, aber das wird erst nach der Änderung ausgelöst. Somit muss ich leider passen, Lazarus-Experten an die Front.

na jetzt bin ich aber gespannt auf die Lösung des Problems.

Gruss Kh

Sunlight7 28. Nov 2008 14:05

Re: parent minimieren
 
Funktionierts auch nicht, wenn Du die Hier im Forum suchenWndProc überschreibst?

khh 28. Nov 2008 15:08

Re: parent minimieren
 
Zitat:

Zitat von Sunlight7
Funktionierts auch nicht, wenn Du die Hier im Forum suchenWndProc überschreibst?

hallo deltlef,
kannst du das mal bitte probieren, du kennst dich da besser aus und bist sicher schneller als ich.

Gruss Kh

DeddyH 28. Nov 2008 15:24

Re: parent minimieren
 
Wenn man die Minimieren-Schaltfläche in der Titelleiste klickt, wird kein WM_SYSCOMMAND gesendet.

DeddyH 29. Nov 2008 13:56

Re: parent minimieren
 
Stattdessen kommt WM_SHOWWINDOW. Wie man da noch Veto einlegen will, weiß ich allerdings nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 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