Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Elemente in Abfrage zusammenfassen (https://www.delphipraxis.net/50302-elemente-abfrage-zusammenfassen.html)

Opa Knack 23. Jul 2005 02:00


Elemente in Abfrage zusammenfassen
 
Hallo,

auf einer Form sind 21 Shapes verteilt. Diese können teilweise interagieren, jeweils abhängig von der Quelle. Dies sieht dann zum Beispiel so aus, dass die Shapes01 bis 10 auf Shape21 gezogen werden können (DnD), die Shapes 11-20 jedoch nicht.

Ich müßte also eine Abfrage in die Drop-Prozedur einbinden, mit der die Quelle selektiert wird. Bevor ich nun ...

Delphi-Quellcode:
if (Sender = Shape01) or (Sender = Shape02) or (Sender = Shape03) or ...
...schreibe, wäre es natürlich praktischer, wenn ich dies in der Form

Delphi-Quellcode:
if (Sender = Shape01 ... 10) then
umsetzen könnte. Nur leider bekomme ich das nicht hin.

Hat jemand eine Idee, wie das ginge?

Danke
Opa

Pr0g 23. Jul 2005 02:12

Re: Elemente in Abfrage zusammenfassen
 
Ich denke nicht, dass das geht. Du kannst zwar Wertebereiche erstellen, aber bei Komponentennamen dürfte das was anderes sein. Du könntest nen Array (wiederumr mit Schleife und FindComponent()) anlegen und dass dann in einer Schleife durchgehen und schauen, ob der Sender da drin ist...

MfG Pr0g

SMO 23. Jul 2005 12:03

Re: Elemente in Abfrage zusammenfassen
 
Mir fallen dazu folgende Möglichkeiten ein:

1) Wenn deine Drop-Prozedur nur von Shapes benutzt wird, deren Name die Form 'ShapeXX' hat, dann kannst du XX als Integer folgendermaßen erhalten (wobei i eine Integer-Variable ist):
Delphi-Quellcode:
i := StrToInt(Copy((Sender as TShape).Name, 6, 2));
Dieser Code nimmt an, dass der Sender ein TShape (oder Nachkomme davon) ist und wandelt die Zeichen 6 und 7 des Namens in einen Integer um.


2) Stattdessen könntest du auch gleich das "Tag"-Feld benutzen, das jede Komponenteninstanz zur freien Verfügung bereitstellt. Mit dem Objektinspektor kannst du für jede deiner Shapes den Tag setzen, auf 1 für Shape01, auf 2 für Shape02 usw.
Deine Drop-Prozedur kann die Werte dann so ganz einfach auslesen:
Delphi-Quellcode:
i := (Sender as TShape).Tag;
Wenn es dir zu mühselig ist, alle Tags mit dem Objektinspektor zu setzen (bei >20 Shapes durchaus verständlich), kannst du die Tags auch durch folgenden Code setzen lassen, der beispielsweise in FormCreate platziert wird:
Delphi-Quellcode:
var
  i: Integer;
  c: TComponent;
//...
  i := 1;
  repeat
    c := FindComponent(Format('Shape%.2d', [i]));
    if c is TShape then
      TShape(c).Tag := i;
    Inc(i);
  until c = nil;

Egal ob du Methode 1) oder 2) benutzt, wenn du erst mal deine Shapes "zu Integer konvertiert" hast, dann lassen sich deine if-Abfragen einfach gestalten:
Delphi-Quellcode:
if (i >= 1) and (i <= 10) then   // if (Sender = Shape01 ... 10) then
Ich hoffe das hilft dir weiter. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 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-2025 by Thomas Breitkreuz