Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler beim dynamischen Erstellen von Tabs (https://www.delphipraxis.net/91839-fehler-beim-dynamischen-erstellen-von-tabs.html)

.chicken 10. Mai 2007 16:40


Fehler beim dynamischen Erstellen von Tabs
 
Ich krich hier immer n Fehler aber weiss nicht wo er liegt...habe es ziemlich genauso in einer alten Prozedur gemacht, wo alles funktioniert hat!
Delphi-Quellcode:
procedure TMessageForm.CreateTab(Name, Caption: String);
var
  i: Integer;
  ATab: TTabSheet;
  AFrame: TMsgFrame;
begin
  if not Assigned(PControl.FindComponent(Name)) then
  begin
    ATab := TTabSheet.Create(MessageForm);
    ATab.Caption := Caption;
    AFrame := TMsgFrame.Create(MessageForm);
    AFrame.Name := Name;              //von hier
    ATab.InsertControl(AFrame);       //nach hier kommt der Fehler ;-)
    ATab.PageControl := PControl; //PControl ist mein PageControl
  end
  else
    (PControl.FindComponent(Name) as TTabSheet).Highlighted := True;
end;
Wisst ihr wo da der Fehler liegt? Bin ich einfach wieder blind? :D

xaromz 10. Mai 2007 16:43

Re: Fehler beim dynamischen Erstellen von Tabs
 
Hallo,

Du bist doch inzwischen lange genug hier, um zu wissen, dass man auch die Fehlermeldung angeben sollte.

Gruß
xaromz

.chicken 10. Mai 2007 16:46

Re: Fehler beim dynamischen Erstellen von Tabs
 
Argh sorry ^^
Also es kommt ne schöne AV :D

"Access violation at address 00408D97 in module Client.exe. Read of address 00A0C000"

Hoffe das hilft weiter ;-)

Udontknow 10. Mai 2007 16:49

Re: Fehler beim dynamischen Erstellen von Tabs
 
Wo genau, bei welcher Zeile? Der Debugger ist dein Freund! :)

Edit: Ist PControl evtl. nicht initialisiert?

Cu,
Udontknow

mkinzler 10. Mai 2007 16:51

Re: Fehler beim dynamischen Erstellen von Tabs
 
Vielleicht nicht der Grund, aber gefährlich:

Delphi-Quellcode:
ATab := TTabSheet.Create(self);
...
AFrame := TMsgFrame.Create(self);

.chicken 10. Mai 2007 16:53

Re: Fehler beim dynamischen Erstellen von Tabs
 
Also, aeh hab oben editiert wo der Fehler auftritt.
PControl habe ich so aufs Form gezogen also muesste es autmomatisch initialisiert sein..!?

Was vll noch zu erwähnen wäre, ich rufe die Prozedur aus ner anderen Unit auf!

Oeh was is an dem Code gefährlich mkinzler? Meinst du ich soll nich MessageForm, sondern self benutzen oder wie?

Udontknow 10. Mai 2007 16:59

Re: Fehler beim dynamischen Erstellen von Tabs
 
Wo kommt denn jetzt das MessageForm her? Instantiierst du TMessageForm mehrere Male?
Weise dem Frame mal den Parent Tab zu, anstelle InsertControl zu nutzen...

CU,
Udontknow

.chicken 10. Mai 2007 17:01

Re: Fehler beim dynamischen Erstellen von Tabs
 
Nein, also ich habe zwei Forms, die eine enthält ne Stringlist, wenn ich auf die klicke dann wird in der anderen diese Prozedur ausgeführt (also in der MessageForm). Die soll dann da ein Tab erstellen in dem schon auf der Form liegenden PageControl!

Habs ma geändert und Parent benutzt: Fehler kommt immernoch!

mkinzler 10. Mai 2007 17:26

Re: Fehler beim dynamischen Erstellen von Tabs
 
Zitat:

Oeh was is an dem Code gefährlich mkinzler? Meinst du ich soll nich MessageForm, sondern self benutzen oder wie?
Ja, dann bekommst du immer die richtige Instanz und nicht eine bestimmte, welche u.U. nicht intantiiert sein könnte.

.chicken 10. Mai 2007 17:40

Re: Fehler beim dynamischen Erstellen von Tabs
 
Stimmt, klingt logisch, danke für den Hinweis ;-)

Edit: Problem hats aber immernoch nicht geloest ^^

.chicken 10. Mai 2007 20:04

Re: Fehler beim dynamischen Erstellen von Tabs
 
Verdammt ich kann den Fehler einfach nicht finden!

PControl ist initialisiert.
Tab und Frame auch....

Weiß keiner wo das Problem liegen koennte?

Gremlin 10. Mai 2007 21:36

Re: Fehler beim dynamischen Erstellen von Tabs
 
Hi,


dein Code scheint auf den 1. und 2. Blick zu stimmen.
Tritt dein Fehler beim ersten Aufruf auf oder erst ein wenig später?
Wird denn überhaupt eine Komponente mit dem Namen gefunden? Hmmm ich
hab hier gerade D2007 zum testen und da wird bei ComponentCount immer 0
für WinControls zurückgegeben, ControlCount stimmt aber. Das war doch
in D5/D7 nicht so gewesen?

Welche Version verwendet du denn?

Muetze1 10. Mai 2007 21:44

Re: Fehler beim dynamischen Erstellen von Tabs
 
1. Frame Owner sollte der Parent sein. Von daher bitte dort den Tab angeben.
2. Frame.Parent sollte mindestens der Tab sein
3. InsertControl bei 1. & 2. komplett streichen, da witzlos.

Gremlin 11. Mai 2007 10:24

Re: Fehler beim dynamischen Erstellen von Tabs
 
Es müsste so funktionieren:

Delphi-Quellcode:
procedure TMessageForm.CreateTab(Name, Caption: String);
var
  i: Integer;
  ATab: TTabSheet;
  AFrame: TMsgFrame;
begin
  if not Assigned(FindComponent(Name)) then begin
    ATab := TTabSheet.Create(MessageForm);
    ATab.Caption := Caption;
    ATab.PageControl := PControl; //PControl ist mein PageControl

    AFrame := TMsgFrame.Create(MessageForm);
    AFrame.Name := Name;              //von hier
    AFrame.Parent := ATab;
  end else
    ((FindComponent(Name) as TMsgFrame).Parent as TTabSheet).Highlighted := True;
end;

.chicken 12. Mai 2007 08:37

Re: Fehler beim dynamischen Erstellen von Tabs
 
Höh, jetzt klappts, super danke ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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