AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Erkennen ob ein Fenster verdeckt wird

Ein Thema von dataspider · begonnen am 16. Nov 2021 · letzter Beitrag vom 17. Nov 2021
Antwort Antwort
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.361 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Erkennen ob ein Fenster verdeckt wird

  Alt 16. Nov 2021, 16:36
Zitat:
Ich hatte die Hoffnung, dass ich mir die Zuweisung des OnActivePageChanged bei jedem PageControl ersparen kann.
Wieviele hast Du denn davon?

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. ä.).
Ist überschaubar - vielleicht 20.
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
Frank Reim
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.493 Beiträge
 
Delphi 12 Athens
 
#2

AW: Erkennen ob ein Fenster verdeckt wird

  Alt 17. Nov 2021, 08:45
Leite deine Unterformulare von einer gemeinsamen Klasse ab, die das entsprechende Ereignis einführt:
Delphi-Quellcode:
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;
Ich gehe davon aus, jede Seite des PageControls hat nur ein Formular.
Im Ereignis des PageControls dann die einzelnen Formulare benachrichtigen:
Delphi-Quellcode:
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;
ungetestet
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
749 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Erkennen ob ein Fenster verdeckt wird

  Alt 17. Nov 2021, 11:41
Leite deine Unterformulare von einer gemeinsamen Klasse ab, die das entsprechende Ereignis einführt
So mache ich das auch. Alle meine Dialoge haben eine gemeinsame Basisklasse.
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.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:40 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