![]() |
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:
...schreibe, wäre es natürlich praktischer, wenn ich dies in der Form
if (Sender = Shape01) or (Sender = Shape02) or (Sender = Shape03) or ...
Delphi-Quellcode:
umsetzen könnte. Nur leider bekomme ich das nicht hin.
if (Sender = Shape01 ... 10) then
Hat jemand eine Idee, wie das ginge? Danke Opa |
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 |
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:
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.
i := StrToInt(Copy((Sender as TShape).Name, 6, 2));
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:
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:
i := (Sender as TShape).Tag;
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:
Ich hoffe das hilft dir weiter. :)
if (i >= 1) and (i <= 10) then // if (Sender = Shape01 ... 10) then
|
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