![]() |
AW: Erkennen ob ein Fenster verdeckt wird
Ich versuche es noch einmal.
Du hast keine Möglichkeit auf die Form hin zu prüfen ob diese Sichtbar\Verdeckt ist oder nicht. Denn Sichtbar ist sie immer auch im verdeckten zustand. Außer wie @Delphi.Narium schon sagte über den Visible Status des entsprechenden Panels oder direkt über Tab\Seite. Was hält dich davon ab einfach eine Variable BOOL mit welchen Namen auch immer einzusetzen und den Stand daraufhin zu prüfen welche Seite gerade aktiv ist. Mein Rat! Lasse dir diesbezüglich etwas anderes einfallen. Bsp. EDIT:
Delphi-Quellcode:
oder du erstellst dein eigenes Event.
const
F_VISIBLE = WM_USER + 100; var bVisibleState: BOOL; ... // Bei jedem Klick auf ein Panel ob über Tasten oder Maus sendest du eine Message an deine Winproc // Auf bVisibleState hin prüfen und welche Tab Seite aktiv ist SendMessage(Self.Handle, F_VISIBLE, bVisibleState, LParam); // In der Winproc wertest du jetzt aus. case (Msg) of F_VISIBLE: //tu was Bin raus.. |
AW: Erkennen ob ein Fenster verdeckt wird
Mir ist (vermutlich) die Fragestellung noch nicht klar geworden:
Möchtest Du im Formular nachfragen, ob das Formular für den Anwender sichtbar ist, sich also auf der aktiven Seite des PageControl befindet? Oder möchtest Du beim Wechsel der aktiven Seite des PageControls im Formular quasi eine Reaktion der Art "Ups, ich bin gerade sichtbar geworden" bzw. "och nö, man kann mich ja garnichtmehr sehen" auslösen? Das Erste sollte mit meinem Vorschlag funktionieren. Das zweite könntest Du eventuell durch das Schicken einer eigenen Message beim Seitenwechsel auslösen. Kommt diese Message, prüfen die empfangenden Formulare jeweils analog zu meinem Vorschlag. Als "Versandort" für diese Message fiele mir da nur das OnChange-Ereignis des PageContols ein. |
AW: Erkennen ob ein Fenster verdeckt wird
Zitat:
Sorry, dass das nicht verständlich rüber kam. Ich hatte die Hoffnung, dass ich mir die Zuweisung des OnActivePageChanged bei jedem PageControl ersparen kann. Vielen Dank an alle Beteiligten! Frank |
AW: Erkennen ob ein Fenster verdeckt wird
Zitat:
Ein abgeleitetes PageControl machen, das schon das entsprechende Ereignis (mit allem Drum und Dran) enthält? Ok, das hieße dann auch einmal durch den gesamten Quelltext durch und entsprechend anpassen. Oder das Ereignis zur Laufzeit zuweisen, im FormCreate (o. ä.). |
AW: Erkennen ob ein Fenster verdeckt wird
Zitat:
Ich hab halt gern Zusammengehörendes an einer Stelle, wenn dies möglich ist. Das erleichtert die Fehlersuche. Ich hatte schon ab und zu die Situation, wo ich Fehlerursachen nicht gefunden habe, weil der verursachende Code dort war, wo ich ihn nie vermutet hätte. Also, Danke noch mal. Ich benutze das Event des PageControls. Frank |
AW: Erkennen ob ein Fenster verdeckt wird
Leite deine Unterformulare von einer gemeinsamen Klasse ab, die das entsprechende Ereignis einführt:
Delphi-Quellcode:
Ich gehe davon aus, jede Seite des PageControls hat nur ein Formular.
type
TMyPageForm = class(TForm) public procedure FormChanging(AForm: TForm; var AllowChange: Boolean); virtual; end; procedure TMyPageForm.FormChanging(AForm: TForm; var AllowChange: Boolean); begin {macht in der Basisklasse erst mal nichts, kann überschieben werden} end; Im Ereignis des PageControls dann die einzelnen Formulare benachrichtigen:
Delphi-Quellcode:
ungetestet
procedure TForm1.cxPageControl1PageChanging(Sender: TObject; NewPage: TcxTabSheet; var AllowChange:
Boolean); function FindMyPageForm(AWinControl: TWinControl): TMyPageForm; var i: Integer; c: TControl; begin if Assigned(AWinControl) then begin for i := 0 to AWinControl.ControlCount - 1 do begin c := NewPage.Controls[i]; if c is TMyPageForm then Exit(TMyPageForm(c)); {Rekursion} if c is TWinControl then begin Result := FindMyPageForm(TWinControl(c)); if Result <> nil then Exit; end; end; end; Result := nil; end; var F, NewForm: TMyPageForm; Page: TcxTabSheet; i: Integer; begin NewForm := FindMyPageForm(NewPage); for i := 0 to TcxPageControl(Sender).PageCount - 1 do begin Page := TcxPageControl(Sender).Pages[i]; F := FindMyPageForm(Page); if Assigned(F) then F.FormChanging(NewForm, AllowChange); end; end; |
AW: Erkennen ob ein Fenster verdeckt wird
Zitat:
Die kümmert sich um alle Benachrichtigungen gemeinsam mit einem Pagemanager der das PageControl betreibt. Verhaltensänderungen sind dann gleichzeitig an allen Forms wirksam. Ich habe über 200 Formulare die sich darüber verwalten lassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 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-2025 by Thomas Breitkreuz