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:
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;
Ich kann nun ein Formular in einem Tab anzeigen lassen indem ich beim Formcreate meine Prozedure wie folgt aufrufe:
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:
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;
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.
Kann mir jemand sagen, woran dies liegt?
Herzlichen Dank und viele Grüße an alle,
Michael