Hallo ..
irgendwie schaff ich es nicht ein "array of TPanel" zu erstellen - dieses mit bestehenden TPanels vom Fenster zu verbinden - und das Array nach "top" (also die position des panels) mit aufsteigendem Wert zu sortieren.
Die "procedure TMainForm.erstelle_panel_array;" füllt mein Array 200 mal immer mit ein und demselben TPanel ..
ich hab auf einer Form zur Designtime sagen wir mal 200 TPanels.
in der private declaration habe ich nun ein "temp_panels-array" zum einlesen und das "meine_panel-Array" als Endziel:
Delphi-Quellcode:
private
meine_panels: Array [0 .. 200] of TPanels;
temp_panels: Array [0 .. 200] of TPanels;
meine_panels_anzahl: Integer;
temp_panels_anzahl: Integer;
in "form on create" habe ich
Delphi-Quellcode:
for i := 0 to 200 do
begin
meine_panels[i] := TPanels.Create(self);
temp_panels[i] := TPanels.Create(self);
end;
und nun die ..
Zuweisung ins Array ( die händisch erstellten Tpanels auf dem Fenster ins "temp_panels-array"):
Mein Procedure "procedure TMainForm.erstelle_panel_array;"
Delphi-Quellcode:
meine_panels_anzahl := 0;
temp_panels_anzahl := 0;
for i := 0 to ComponentCount - 1 do
begin
If Components[i].ClassName = 'TPanel' then
begin
if TPanel(Components[i]).Tag <> 0 then // nur TPanels verwenden wo Tag-Wert gesetzt ist
begin
temp_panels[temp_panels_anzahl] := (Components[i] as TPanel);
temp_panels_anzahl := temp_panels_anzahl + 1;
end;
end;
end;
// Dann die Anzahl setzen
meine_panels_anzahl := temp_panels_anzahl - 1; // oder Pred(temp_panels_anzahl )
niedrigster_wert := 10000;
grenzwert := 0;
// Dann eine Schleife so oft durchgehen wie es Panels gibt
for x := 0 to meine_panels_anzahl do // Anzahl der Panels durchlaufen
begin
Memo1.Lines.Append('Schleife x hat:'+inttostr(x));
// In der Schleife die ganzen Panels durchlaufen und den Niedrigsten Wert finden.
for i := 0 to meine_panels_anzahl do // Alle Temp-Panels checken und niedrigsten wert finden
begin
aktuell_gelesen := temp_panels[i].Top;
// memo1.Lines.Append('Analysiere '+temp_panels[i].Name); WENN ICH DAS AUSKOMMENTIERE GIBT EINEN FEHLER!!
if (aktuell_gelesen < niedrigster_wert) AND (aktuell_gelesen > grenzwert) then
begin
niedrigster_wert := aktuell_gelesen;
end;
end; // i
grenzwert := niedrigster_wert;
for i := 0 to meine_panels_anzahl do // Alle Temp-Panels checken und niedrigsten wert finden
begin
if temp_panels[i].Top = niedrigster_wert then
begin
meine_panels[x] := temp_panels[i];
end;
end; // i
end; // x
.. ich finde eigentlich die Ursache nicht, wieso das nicht funktionieren sollte
Danke für Hinweise
Erich
Erich Wanker - for life:=1971 to lebensende do begin ..
O
/H\
/ \