Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TGraphicControl aud MDI-Client Fenster (https://www.delphipraxis.net/79404-tgraphiccontrol-aud-mdi-client-fenster.html)

GreyGoo 21. Okt 2006 20:42


TGraphicControl aud MDI-Client Fenster
 
Hi Leute,

Ich arbeite mit einer TMS THotspotImage-Komponente (eine Bitmap mit Maus-sensitiven Bereichen, die angeklickt werden können, von TGraphicControl abgeleitet) und möchte diese als Background in einer MDI-Application verwenden.

Problem:
wenn ich ein TGraphicControl, zb TSpeedButton, auf ein MDI-Client Fenster (FormState=fsMDIForm) setze, so werden keine Maus-Events mehr an die TGraphiControl-Komponente weitergeleitet; ein TSpeedButton zB ist tot, er kann nicht mehr angeklickt werden.

Wie kann ich das verhindern, bzw gibt es da einen Workaround ?

Sunlight7 21. Okt 2006 20:48

Re: TGraphicControl aud MDI-Client Fenster
 
Hallo,
willkommen in der DP!

So ähnlich hatten wir hier das schon mal: MDI-Anwendung und Panel.
Welche Delphi Version hast Du?

Versuche die GraphicControl auf ein Panel zu setzen.

GreyGoo 22. Okt 2006 01:38

Re: TGraphicControl aud MDI-Client Fenster
 
Ich arbeite mit D7.
Auf ein Panel kann ich das TGraphicControl nicht legen, da dann das Panel immer im Vodergrund ist und die Child-Fenster verdeckt. Eine Graphic im Client-Bereich anzuzeigen ist mit D7 problemlos möglich, aber damit ist mir nicht geholfen; eine Graphic, zb TImage, ist 'passiv' und braucht nicht auf Maus-Events zu reagieren.
Ich brauche aber ein 'aktives', auf Maus-Events reagierendes Control. Ich weiss nicht warum die Maus-Events grundsätzlich nicht zum TGraphicControl durchkommen. Eine TButton funktioniert im MDI-Client Bereich tadellos, ist leider aber immer im Vodergrund.
Es muss da doch 'ne Lösung geben. :gruebel:

Sunlight7 22. Okt 2006 02:13

Re: TGraphicControl aud MDI-Client Fenster
 
Ein TGraphicControl ist Quasi ein Pseudofenster, welches auf dem Parent eingehakt ist.
Was meinst Du jetzt mit passiv und aktiv?

Wenn Du meinst, das es den Fokus, so wie zB TButton erhalten soll, dann kannst Du nicht TGraphicControl als Ausgangsklasse verwenden.
Da wäre dann ein CustomControl oder ähnliches angebracht.

Ansonsten können auch GraphicControls auf MouseMove, MouseUp & MouseDown reagieren.

Möglicherweise sind in D7 die Fehler bei den MDI Styles noch nicht ganz ausgebügelt.

Edit: Gerade probiert: Die MouseEvents bei GraphicControls funktionieren bei D5, obwohl sie nicht sichtbar sind :!:

GreyGoo 22. Okt 2006 04:02

Re: TGraphicControl aud MDI-Client Fenster
 
Ja, TGraphicControls reagieren auf Maus-Events, siehe TSpeedButon, aber leider nicht wenn sie auf einer Form mit FormStyle=fsMDIForm (MDI-Client) sind. Setze ich auf die MDI-Form ein Panel und darauf zb einen TSpeedbutton, dann sollte wohl alles richtig sein, aber dann ist das Panel immer im Vordergrund und überdeckt alle MDI-Child-Fenster.
TPanel und TButton sind von TWinControl abgeleitet und haben ein eigenes FensterHandle, während TGraphicControl von TControl abgeleitet ist und somit über kein eigenes FensterHandle verfügt. Eigentlich macht ein TGraphicControl nichts weiter als auf dem Canvas seines Parent was zu zeichnen. Damit ein TGraphicControl überhaupt auf Maus-Events reagieren kann, werden von der VCL die Maus-Events vom Parent des TGraphicControls an das TGraphicControl weitergeleitet und dort ausgewertet, siehe TSpeedButton. Sitzt das TGraphicControl aber auf einer Form mit FormStyle=fsMDIForm (die MDI-Form ist in diesem Fall das Parent des TGraphicControls), so scheint dieser Mechanismus zu versagen. :wall:

GreyGoo 22. Okt 2006 04:13

Re: TGraphicControl aud MDI-Client Fenster
 
PS:
habe gerade gesehen, dass bei TSpeedButton zumindest ein OnClick-Event durchkommt, aber der Button erscheint nicht gedrückt. Auch das Verhalten bei TSpeedButton.Flat=true funkioniert nicht.

Sunlight7 22. Okt 2006 16:32

Re: TGraphicControl aud MDI-Client Fenster
 
Zitat:

Zitat von GreyGoo
Sitzt das TGraphicControl aber auf einer Form mit FormStyle=fsMDIForm (die MDI-Form ist in diesem Fall das Parent des TGraphicControls), so scheint dieser Mechanismus zu versagen.

Also bei mir funkt das bei D2 und D5 :gruebel:

Wenn Du einem Panel den Wert Align zB auf alTop setzt, dann liegen die anderen Fenster nicht darunter.
Eine andere Lösung fällt mir (zumindest im Moment) nicht ein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz