AGB  ·  Datenschutz  ·  Impressum  







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

Warum ActiveObject=nil?

Ein Thema von alleinherrscher · begonnen am 17. Feb 2010 · letzter Beitrag vom 18. Feb 2010
Antwort Antwort
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
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#2

Re: Warum ActiveObject=nil?

  Alt 18. Feb 2010, 07:21
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:
Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance;
Instance.Create(TabSheet);
auch übersichtlicher so schreiben:

Delphi-Quellcode:
    
Instance := InstanceClass.Create(TabSheet);
TComponent(Reference) := Instance;
Uwe Raabe
  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 14:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz