Thema: Delphi Warum ActiveObject=nil?

Einzelnen Beitrag anzeigen

Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

Warum ActiveObject=nil?

  Alt 17. Feb 2010, 21:36
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
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat