![]() |
Warum ActiveObject=nil?
Ich möchte eine Anwendung relativ modular aufbauen. Dazu habe ich in dem Hauptformular eine PageControl. Die Einzelenen Tabs in der Pagecontrol möchte ich durch Formulare füllen, die in einer separaten PAS Datei gespeichert sind.
Um das Formular im Tab zu erstellen habe ich mir folgenden Code überlegt:
Delphi-Quellcode:
Ich kann nun ein Formular in einem Tab anzeigen lassen indem ich beim Formcreate meine Prozedure wie folgt aufrufe:procedure TForm1.CreateTab(InstanceClass: TComponentClass; var Reference; aPageControl:tsPageControl); var Instance: TComponent; TabSheet:TTabSheet; begin TabSheet:=TTabSheet.Create(aPageControl); TabSheet.Parent:=aPageControl; Instance := TComponent(InstanceClass.NewInstance); TComponent(Reference) := Instance; Instance.Create(TabSheet); with TForm(Instance) do begin Parent:=TabSheet; Align:=alclient; Color:=self.Color; Show; end; with TabSheet do begin PageControl := aPageControl; Caption := TForm(Instance).caption; end; end;
Delphi-Quellcode:
CreateTab(TPersonendaten,foPersonendaten,sPageControl1); //foPersonendaten ist eine globale, private Variable vom Typ TPersonendaten
Das klappt auch alles wunderbar, alldings habe ich ein sehr großes Problem Ich möchte durch die Objekte auf dem Formular mit dem ENTER Button springen. Dafür verwende ich normalerweise folgenden COde:
Delphi-Quellcode:
Ist der Fokus auf einem Objekt, und drücke ich dann Enter, springt der Fokus nun immer auf das erste Objekt in der Taborder. Scheinbar ist das ActiveControl=nil.procedure TPersonendaten.SelektiereNaechstesControl(Sender: TObject; var Key: Char); begin if key = char(vk_return) then begin key:=#0; //if activeControl=nil then showmessage('Ä'); <-- Messagebox wird angezeigt.... SelectNext(ActiveControl, true, true); end; end; Kann mir jemand sagen, woran dies liegt? Herzlichen Dank und viele Grüße an alle, Michael |
Re: Warum ActiveObject=nil?
ActiveControl gibt das jeweils aktive Control im Form an. Da du in den TabSheets aber selbst wieder Forms unterbringst, hält jedes dieser Forms ein eigenes ActiveControl.
Übrigens läßt sich dein Code
Delphi-Quellcode:
auch übersichtlicher so schreiben:
Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance; Instance.Create(TabSheet);
Delphi-Quellcode:
Instance := InstanceClass.Create(TabSheet); TComponent(Reference) := Instance; |
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