AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zur Laufzeit erstellte Komponenten im Array verwalten

Zur Laufzeit erstellte Komponenten im Array verwalten

Ein Thema von Rued · begonnen am 21. Aug 2014 · letzter Beitrag vom 22. Aug 2014
Antwort Antwort
Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
92 Beiträge
 
Delphi 12 Athens
 
#1

Zur Laufzeit erstellte Komponenten im Array verwalten

  Alt 21. Aug 2014, 13:34
Hallo!

Ich weise 13 zur Laufzeit erstellte RadioGroups einem Array[1..13] zu, um mir Findcomponent zu sparen. Ebenso verfahre ich mit 13 Checkboxen, die einem Array[1..13] zugewiesen werden. Bei den Checkboxen gibt es kein Problem, ich kann auf alle zugreifen. Bei den RadioGroups wird mit der 13. Zuweisung das erste Feld des Array eliminiert, so dass Array[1] nil ist. Anders formuliert, würde die Schleife bei 12 enden, würde der Zugriff auf alle dem Array zugewiesenen Komponenten funktionieren, mit Nummer 13 wird aber Komponente Nummer 1 "rausgekegelt". Nachtrag: Letzter Satz stimmt so nicht. Habe die Schleife jetzt `mal bis 12 gezogen, auch da wurde Array[1] mit der letzten Zuweisung "rausgekegelt".

Ich habe so etwas noch nicht erlebt. Dasselbe passiert übrigens auch, wenn ich das Array auf 14 dimensioniere. Bis zur Klärung habe ich mir so geholfen, dass ich Array[1] puffer und nach dem Durchlauf der Schleife dem Array[1] den Puffer zuweise.

Hat da jemand einen Tipp?

Gruß

Rüd
Rüdiger Droste

Geändert von Rued (21. Aug 2014 um 13:52 Uhr) Grund: Siehe Nachtrag.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zur Laufzeit erstellte Komponenten im Array verwalten

  Alt 21. Aug 2014, 13:45
Das Wichtigste: Wie sieht dein Code aus und wie soll dir jemand ohne das helfen können?

Hast du mal die Bereichsprüfung in den Projektoptionen aktiviert?

Und was sagt der Debugger, wenn du mal nach dem Wert schaust, während sich das Array langsam füllt?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: Zur Laufzeit erstellte Komponenten im Array verwalten

  Alt 21. Aug 2014, 14:15
<Glaskugel mode="on">
Die beiden Arrays liegen in der Deklaration hintereinander, Du vertust dich bei deinem Arrayindex um +1 und anstatt auf das letzte Element des ersten Arrays zuzugreifen, greifst Du auf das erste Element des zweiten Arrays zu:
Delphi-Quellcode:
var
  Array1 : Array [0..12] Of TFoo;
  Array2 : Array [0..12] Of TFoo;

begin
  Array1[13] := Bar; // Hier wird Array2[0] beschrieben!
</Glaskugel>

PS: Hör auf himitsu.

Geändert von Dejan Vu (21. Aug 2014 um 14:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
92 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zur Laufzeit erstellte Komponenten im Array verwalten

  Alt 21. Aug 2014, 15:36
Das ist der betreffende Code, der mit der Krücke klappt. TFrfrTippFeld ist ein Frame, deren Komponenten über Findcomponent angesprochen werden.

Delphi-Quellcode:
var
  FMain: TFMain;
  PSpiele:array[1..11] of TPanel;
  Edits:array[1..11,0..3] of TEdit;
  RGTipps:array[1..11] of TRadioGroup;
  cbTipps:array[1..11] of TCheckBox;
implementation
...........
...........
procedure TFMain.FormCreate(Sender: TObject);
var
    FRA:TFrame;
    a,b:integer;
    RGPuf:TRadioGroup;
begin
 for a := 1 to 11 do begin

 FRA := TFrfrTippFeld.Create(FMain);

   with FRA do begin
   left := 0;
   top := 10+ (a-1)*51;
   name := 'frSpiel'+inttostr(a);
   height := 45;
   width := 900;
   end;
   FRA.parent := PFeld;
   PSpiele[a] := TPanel(Fra.findcomponent('PSpiel'));
   PSpiele[a].Color := MitFarben[1];
   TLabel(Fra.findcomponent('LNr')).Caption := 'Spiel '+inttostr(a);
   for b := 0 to 4 do Edits[a,b] := TEdit(Fra.findcomponent('Edit'+inttostr(b)));
   RGTipps[a] := TRadioGroup(Fra.findcomponent('RGTipp'));
   cbTipps[a] := TCheckBox(Fra.findcomponent('cbTippen'));
   if a = 1 then RGPuf := RGTipps[a]; //Krücke Teil 1
end;
   RGTipps[1] := RGPuf; ////Krücke Teil 2

...........
...........
Zitat:
Und was sagt der Debugger, wenn du mal nach dem Wert schaust, während sich das Array langsam füllt?
Wie ich schrieb, klappt alles bis zur letzten Zuweisung. Heißt, das Array füllt sich korrekt - dann kommt die letzte Zuweisung, auch die klappt, aber dann ist RGTipps[1] = nil.

Gruß

Rüd
Rüdiger Droste
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zur Laufzeit erstellte Komponenten im Array verwalten

  Alt 21. Aug 2014, 15:40
Zitat:
Edits:array[1..11,0..3] of TEdit;
Zitat:
for b := 0 to 4 do Edits[a,b] := TEdit(Fra.findcomponent('Edit'+inttostr(b)));
Ich würde an Deiner Stelle immer mit High() und Low() arbeiten, dann kann Dir so etwas nicht passieren. Außerdem ist es kein Fehler, die Bereichsprüfung zu aktivieren, aber das wurde IIRC bereits erwähnt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Zur Laufzeit erstellte Komponenten im Array verwalten

  Alt 21. Aug 2014, 15:44
Auf den ersten Blick :

Delphi-Quellcode:
var
  Edits:array[1..11,0..3] of TEdit; // <- 0..3

...........
...........
   // aber 0..4 -> PENG
   for b := 0 to 4 do Edits[a,b] := TEdit(Fra.findcomponent('Edit'+inttostr(b)));
...........
...........
EDIT : Hach, immer isser schneller *wein
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:25 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 by Thomas Breitkreuz