Scrollbox ControlCount zählt falsch?

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
GU_Meyer
Beiträge: 66
Registriert: Mo 21. Apr 2014, 10:22

Scrollbox ControlCount zählt falsch?

Beitrag von GU_Meyer »

Hallo,

mein Kartenprojekt (siehe hier http://www.lazarusforum.de/viewtopic.php?f=25&t=8971) kommt langsam voran. Aber jetzt hänge ich bei folgendem: Ich kann "Punkte" auf meine Karte (ein TImage in einer TScrollbox) setzen. Nun möchte ich über ein Kontextmenü alle gesetzten Punkte durchgehen und die jeweiligen Punkt-Koordinaten erhalten (später müssen an diesen Koordinaten noch weitere Shapes gesetzt werden, aber das kommt erst noch).
Die Punkte sind inkl. Koordinaten in einer Datenbank gespeichert, ich käme also auch über diesen Weg an die Daten. Aber eigentlich müsste eine TScrollbox doch ihren Inhalt selbst "verwalten" und mir daher auch die jeweiligen Shapes zurückgeben können.
Inzwischen bin ich soweit, dass ich prinzipiell alle Punkte abfragen kann, allerdings stimmt in diesem Codefragment

Code: Alles auswählen

procedure TgcisMainForm.TmpPkt_ZeigeAbstandClick(Sender: TObject);
// Im Moment erstmal nur reine Anzeige, die eigentliche Funktion kommt später...
var KreisNameStr : string;
    ErgStrL : TStrings;
    index : integer;
    MaxPunkte : integer;
begin
  ErgStrL:=TStringList.Create;
  MaxPunkte:=gcisMainScrollBox.ControlCount-1;
  for index:=0 to MaxPunkte  do  // ein "Child" ist immer das TImage
  begin
    case index of
      0..9     : KreisNameStr:='Punkt00'+IntToStr(index);
      10..99   : KreisNameStr:='Punkt0'+IntToStr(index);
      100..999 : KreisNameStr:='Punkt'+IntToStr(index);
    end;
    ErgStrL.Add(IntToStr((gcisMainScrollBox.FindChildControl(KreisNameStr) as TShape).Left)+' '+IntToStr((gcisMainScrollBox.FindChildControl(KreisNameStr) as TShape).Top));
  end;
  ShowMessage(ErgStrL.Text);
  ErgStrL.Free;
end;     


der Wert für "MaxPunkte" immer noch nicht - wenn ich 5 Punkte anlege, müsste doch MaxPunkte bzw. gcisMainScrollBox.ControlCount allerhöchstens 6 und nicht 9 sein ? 5 Shapes, 1 Image, aber mehr auch nicht.
Lässt sich mein Vorhaben prinzipiell über diesen Weg realisieren? (und vor allem, wie kriege ich den passenden Endwert für die For-schleife?). Oder muss ich doch über die Datenbank gehen und damit den umständlichen Weg

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Scrollbox ControlCount zählt falsch?

Beitrag von wp_xyz »

Ich habe gerade in eine Scrollbox 2 TShapes geklickt und erhalte als ControlCount den Wert 2. Prinzipiell scheint das zu funktionieren. Ich würde dir aber trotzdem davon abraten, weil das viel zu instabil ist. Irgendwann, wenn du vergessen hast, wie alles im Detail funktioniert, wirst du vielleicht noch ein Label als Überschrift in die Scrollbox setzen, und schon bist du stundenlang auf der Fehlersuche. Grunddaten musst du immer an der "Quelle" abholen, also aus der Datenbank, oder einem eindeutigen Buffer. Dein Vorgehen verstößt gegen die Regel, Daten und Benutzeroberfläche nicht zu vermischen.

GU_Meyer
Beiträge: 66
Registriert: Mo 21. Apr 2014, 10:22

Re: Scrollbox ControlCount zählt falsch?

Beitrag von GU_Meyer »

wp_xyz hat geschrieben:Ich habe gerade in eine Scrollbox 2 TShapes geklickt und erhalte als ControlCount den Wert 2. Prinzipiell scheint das zu funktionieren.

Das habe ich eben gerade auch ausprobiert (gestern abend war es wahrscheinlich für mich schon zu spät, um daran zu denken) und es funktioniert wirklich. :oops:

wp_xyz hat geschrieben:Ich würde dir aber trotzdem davon abraten, weil das viel zu instabil ist. Irgendwann, wenn du vergessen hast, wie alles im Detail funktioniert, wirst du vielleicht noch ein Label als Überschrift in die Scrollbox setzen, und schon bist du stundenlang auf der Fehlersuche. Grunddaten musst du immer an der "Quelle" abholen, also aus der Datenbank, oder einem eindeutigen Buffer. Dein Vorgehen verstößt gegen die Regel, Daten und Benutzeroberfläche nicht zu vermischen.

Das ist ein Argument. Dann muss ich zwar an meiner Datenbank was ändern oder doch einen passenden Puffer einrichten, aber das geht wahrscheinlich wirklich einfacher als in ein paar Monaten verzweifelt stundenlang nach einem Fehler zu suchen.

Aber jetzt, wo ich nochmal drüber nachdenke, hab ich meinen Denkfehler gefunden *schäm*. Die Anzahl stimmt, da ich nicht nur meine "eingeklickten" Shapes hab, sondern auch noch die, die aus der Datenbank heraus erzeugt wurden. :oops: :oops:
Vielleicht hätte ich gestern abend einfach aufhören sollen....es ist schließlich Hobby.
Trotzdem danke, auch für's Zeitnehmen und ausprobieren.
Gruss
GU_Meyer

Antworten