Einzelnen Beitrag anzeigen

Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#13

AW: Komponenten auf der Panel durchlaufen???

  Alt 12. Sep 2010, 21:13
@romber : langsam. Lese das hier mal noch durch.

@haentschman :
Ach so meinst Du das. Na klar, habe ich letztens auch so ähnlich gemacht. Muss wohl doch noch im Quelltext wühlen. Noch ein paar Denkanstösse aus der Praxis :

Zuerst mal die "Haentschman-Methode" :
Delphi-Quellcode:
for i := 1 to 15 do
  TEdit (FindComponent ('lblIntEdit'+IntToStr(i))).Text := '';
...
for i := 1 to 15 do begin
  lblKomp := TEdit (FindComponent ('lblIntEdit'+IntToStr(i))).Text;
  gesamt := gesamt + StrToInt (lblKomp) * GeldTyp [i];
Zum Verständnis : das stammt jetzt aus einem Geldzähl-Programmteil. Die Leute verzählen sich immer und sollen deshalb lediglich die Anzahl an Münzen/Scheinen eingeben. Das wird dann alles zusammengerechnet. Es gibt eben genau 15 Sorten. Deshalb passt da for-Schleife und FindComponent gut. Wie Haaentschman vorschlägt, sind die Edits da durchnummeriert. Das ist aber nicht mal so wichtig. Wichtiger ist der Prefix "lblIntEdit". Ich könnte da ruhig noch mehr Edits haben, die mit der Geldzählung gar nichts zu tun haben. Solange ich darauf achte, dass die nicht auch mit lblIntEdit anfangen, dann läuft alles wie gewünscht. Ich will damit sagen, dass der Name an sich wichtiger ist, als die Nummerierung. Durch geschickte Namenswahl kann man leicht alles so eingrenzen, wie gewünscht. Das wäre jetzt eine Sache ohne IS / AS.

Hier soll nur gewissen Panelen ein OnClick zugewiesen werden :

Delphi-Quellcode:
case Key of
  13 : begin
         c := FindComponent (pnlName);
         if (c is TMenuPanel) then
           (c as MenuPanel).OnClick (self); // Bei Return Click simulieren
       end;
Geht in dem Fall einfacher, weil TMenuPanel eigene Komponente ist. Die "normalen" Panele bleiben von dem Verhalten unberührt, weil das IS die ausschliesst. Weiterer Vorteil : mit den paar Zeilen ist sichergestellt, dass alle TMenuPanele gleich behandelt werden.

Dann noch das :

Delphi-Quellcode:
for i := 0 to ComponentCount - 1 do begin
  c := Components [i];
  if c is TMenuPanel then
    CompNames.AddObject((c as TMenuPanel).Caption, c);
end;
CompNames.Sort;
Das ist ungefähr das, was ich anfangs meinte. Da gehe ich jetzt wirklich alle Controls der Form durch. Was ist da jetzt der Sinn ? Es gibt da Menüpunkte als Panele. Die kann man direkt anklicken. Es geht um eine Touchscreen-Application. Nun gibts aber Leute, die wollen lieber die Maus benutzen zusammen mit Pulldown-Menu. Auf der Form steht nun in den Panelen : 1 Menüpunkt 1 2 Menüpunkt 2 so in der Richtung. Da hängt noch eine Stringliste hintendran. Und diese wird sortiert. Mit Hilfe der sortierten Liste baue ich dann per Programm das Menu auf. Und genau in der Reihenfolge der Panele auf dem Screen stehen sie auch als Menüpunkt zur Verfügung. Was wäre das eine Arbeit gewesen, ca. 100-300 solcher Panele auch als Menüpunkt auf diversen Forms zu haben (per Menüdesigner). Ausserdem gilt so ja automatisch : Panel weg, Menüeintrag weg, immer alles schön synchron.

Mir fällt gerade ein : auch für einfachere Fälle eignet sich das mit der Stringliste. Muss ja nicht sortiert sein, aber wenn etwas nur mit einer Gruppe an Edits, Panelen, Labels etc. gemacht werden muss, dann einfach die entsprechenden Namen in die Stringliste packen. Dann käme wieder FindComponent im Spiel und damit eben die Stringliste durchgehen.
Gruß
Hansa

Geändert von Hansa (12. Sep 2010 um 21:17 Uhr)
  Mit Zitat antworten Zitat