Einzelnen Beitrag anzeigen

Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#1

Array of TPanel sortieren

  Alt 23. Mai 2019, 13:56
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 = 'TPanelthen
    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\
/ \

Geändert von erich.wanker (23. Mai 2019 um 14:12 Uhr)
  Mit Zitat antworten Zitat