Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   TObjectList Problem (https://www.delphipraxis.net/164893-tobjectlist-problem.html)

Dennis07 5. Dez 2011 12:48

AW: TObjectList Problem
 
Bingo.... das erschien mir die einfachste möglichkeit zu prüfen, warum der auf jegliche kommandos, die ich der OL zugewiesen habe (wie beispielsweise das Löschen von Objekten oder das freigeben der Liste) nicht reagiert hat.
Ich habe also (mithilfe meines besten freundes Showmessage()) mir anzeigen lassen, dass ich zum zeitpunkt, wo sich (beispielsweise) 5 Panels auf dem Formular befinden, sich jedoch 0 in meiner OL befinden. Darum hier die Frage: Was mache ich falsch?

PS: Wenn ich bei meinen Profileinstellungen D5 angebe dann lässt sich daraus schließen dass ich auch D5 benutze.

Dankeschön;

Sir Rufo 5. Dez 2011 12:58

AW: TObjectList Problem
 
Da ShowMessage dein Freund ist:
Delphi-Quellcode:
procedure SpawnPanel(PanelX,PanelY: Integer);
begin
  NewPanel := TPanel.Create(Application);
  ShowMessage( IntToStr( PanelsList.Count ) );
  PanelsList.Add(NewPanel);
  ShowMessage( IntToStr( PanelsList.Count ) );
  with NewPanel do
  begin
    Name := 'Panel' + IntToStr(PanelID);
    PanelID := PanelID + 1;
    Left := PanelX;
    Top := PanelY;
    Caption := ObjectCaption;
    Parent := fmPool;
    Enabled := False;
    { ... }
    OnClick := fmPool.SelectObject;
  end;
end;
Was zeigt bekommst du mit ShowMessage denn da angezeigt?
Oder wird dieses ShowMessage evtl. gar nicht aufgerufen?

DeddyH 5. Dez 2011 13:04

AW: TObjectList Problem
 
Ich hab das jetzt mal unter Delphi 2007 so versucht:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FPanels: TObjectList;
    FPanelID: integer;
    procedure SpawnPanel(PanelX, PanelY: integer);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  SpawnPanel(10, 10);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FPanels.Clear;
  FPanelID := 1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FPanels := TObjectList.Create;
  FPanelID := 1;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FPanels.Free;
end;

procedure TForm1.SpawnPanel(PanelX, PanelY: integer);
var
  NewPanel: TPanel;
begin
  NewPanel := TPanel.Create(nil);
  NewPanel.Left := PanelX;
  NewPanel.Top := PanelY;
  NewPanel.Parent := self;
  NewPanel.Name := 'Panel' + IntToStr(FPanelID);
  FPanels.Add(NewPanel);
  ShowMessage(IntToStr(FPanels.Count));
  inc(FPanelID);
end;
Klappt einwandfrei, soweit ich feststellen konnte.

Dennis07 5. Dez 2011 13:10

AW: TObjectList Problem
 
Zitat:

Zitat von Sir Rufo (Beitrag 1139460)
Da ShowMessage dein Freund ist:
Was zeigt bekommst du mit ShowMessage denn da angezeigt?
Oder wird dieses ShowMessage evtl. gar nicht aufgerufen?

Selbstverständlich qwird showmmesage aufgerufen. Beim ersten kommt (wieso auch anders) 0. Was mich allerdings völlig unerwartet trifft:
Beim zweiten kommt 1!

Hallo leute... habe gerade bemerkt dass ich den Showmessage unten falsch platziert habe, wewegen immer 0 rauskam. Das war zwar ein fehler meiner prüfung, aber den Fehler des Programms habe ich noch nicht gefungen.
Zum ersten: Ich brauche sehr wohl ein Parent, sonst wird der Panel nicht angezeigt.
Und wieso wird der Panel nicht gelöscht, wenn er doch in der liuste ist und diese freigegeben wird?
Danke

DeddyH 5. Dez 2011 13:20

AW: TObjectList Problem
 
Natürlich brauchst Du einen Parent, aber keinen Owner (richtig lesen!).

Dennis07 5. Dez 2011 13:30

AW: TObjectList Problem
 
Jaja is ja gut habe ich auch im nachhinein gemerkt. Wollte es nur bei einer Bearbeitung meiner Post lassen....

mfg

EDIT: Wie soll das gehen.. ich erhalte immer eine Fehlermeldung (nicht genügend parameter).... egal ich google man danach trotzdem bis hierhin danke.... jetzt muss ich nur noch das wesentliche problem lösen

DeddyH 5. Dez 2011 13:31

AW: TObjectList Problem
 
Hast Du mein Beispiel von oben einmal ausprobiert? Verhält es sich dort genauso?

Dennis07 5. Dez 2011 13:45

AW: TObjectList Problem
 
Nein noch nicht... mache ich morgen .... man schreibt sich.... danke aber schonmal für die Hilfe ;)

bd

himitsu 5. Dez 2011 15:28

AW: TObjectList Problem
 
Zitat:

Zitat von DeddyH (Beitrag 1139425)
Wieso denn das? Es ist zwar nicht schön so wie im Moment, aber darf und muss ist IMHO die falsche Wortwahl.

Ruft doch einmal die Funktion(en) gleichzeitig auf, welche die selbenglobale Variable nutzen.
Muß nicht gleich multithread sein ... rekursive Aufrufe reichen schon aus.

Variablen muß man also immer so nah wie möglich an deren Verwendungsort, bzw. an deren Gültigkeitsbereich deklarieren.

DeddyH 5. Dez 2011 15:32

AW: TObjectList Problem
 
Wo siehst Du in dem geposteten Code eine Rekursion? Dass die globalen Variablen alles andere als schön sind, wurde ja bereits gesagt und eine Alternative von mir gezeigt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr.
Seite 2 von 3     12 3      

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