![]() |
FindComponentes "TShape faerben"
Hallo zusammen,
ich habe folgendes Problem beim "faerben" meiner Shapes: Auf der Form liegen 10 Shapes, die mit dem Namen 'shpHeader' anfangen und danach nummeriert sind. Also simple "shpHeader1", "shpHeader2", ... Nun wollte ich mir nicht arbeit erleichetern und hab folgenden Code in die FormCreate gepackt:
Delphi-Quellcode:
Das Problem? Es geht nicht.
procedure TfrmMain1.FormCreate(Sender: TObject);
var i : integer; ShapeName : String; begin for i :=0 to ComponentCount -1 do begin ShapeName := 'shpHeader'+IntToStr(i); if (Components[i] is TShape) and (Components[i].Name = ShapeName) then begin TShape(Components[i]).Brush.Color := rgb(100,100,100); end; end; end; Setze ich anstelle des Strings 'ShapeName' innerhalb der for-schleife einen festen Wert (Bspw. 'shpHeader2'), so wird dieser Shape gefaerbt. Wenn ich nach der zuweisung des 'ShapeName' ein MessageDLG als "Debug" setze, wird mir auch immer der korrekte Name des Shapes zurueck geliefert. Kann mir evtl einer einen Tip geben, wo mein Denkfehler sitzt? Besten Dank schonmal :) Gr. aayb |
Re: FindComponentes "TShape faerben"
Das funktioniert nur, wenn die erste gefundene Komponente shpHeader1 heißt, die zweite shpHeader2 usw. Vielleicht solltest Du nur abfragen, ob es ein Shape ist und der Name mit shpHeader beginnt ;)
|
Re: FindComponentes "TShape faerben"
Hi DeddyH,
danke fuer dein Loesungs- Hinweis. Ich habs jetzt mit copy() geloest und es funktioniert, dank dir! :-) Wobei ich trotz allem nicht verstehe, warum es in meiner Version nicht funktioniert. Schliesslich wird bei jedem Durchlauf der Schleife die Variable ShapeName neu gesetzt. Ist es kein Tshape, wird die IF-Abfrage uebersprungen und er geht zum naechsten Durchlauf. Nunja, evtl. hat ja einer eine kurze Erlaeuterung fuer mich zum Verstaendnis. Besten Dank! Gr. aayb |
Re: FindComponentes "TShape faerben"
Lass Dir einfach die Komponentennamen ausgeben: Schmeiss ein Memo auf die Form und dann
Delphi-Quellcode:
Dann wirst du es verstehen.
For i:=0 to ComponentCount-1 do
Memo1.lines.add(Format('%3d: %s',[i,Components[i].Name])); Alternativ geht es so:
Delphi-Quellcode:
Die Methode 'FindComponent' sucht die Komponente mit dem angegeben Namen.
Var
ShapeComponent : TComponent; For i:=1 to YourShapeCount do Begin ShapeComponent := FindComponent(Format('shpHeader%d',[i])); If Assigned (ShapeComponent) And (ShapeComponent is TShape) Then TShape (ShapeComponent).Color := YourColor; |
Re: FindComponentes "TShape faerben"
Ahhh ;-)
Okay - ich glaub ich habs. Danke dir! Leider gibts jetzt ein neues "kleines" Problem (Ich schmeiss die Frage einfach mal noch unterhalb meines Threads - gehoert schliesslich auch dazu) Die Namen bekomme ich ja nun raus, allerdings sollen die Farben aus einem Array rausgeholt werden. (Ueber ein Integer-"Flag" soll die Applikation nachher verschieden aussehen) Ich weise also die Farbe nachfolgend zu: TShape(Components[i]).Brush.Color := ColorTitleLine[YourID]; ColorID steht auf "2" ColorTitleLine ist ein "array[1..3] of Cardinal" und der Array-eintrag hierzu: ColorTitleLine[2] := rgb(123,123,123); Bei anderen Zuweisungen bspw EditX.Text := MeinText[YourID]; funktioniert das ganze. (MeinText ist ein array of strings) Der Fehler scheint also beim array of Cardinal zu liegen. Nur wo? Besten Dank nochmal Gr. aayb |
Re: FindComponentes "TShape faerben"
Was für ein Fehler kommt denn?
|
Re: FindComponentes "TShape faerben"
Keiner ;-)
Kurz zur Erlaeuterung: Die Shapes sind alle in Gelb gemalt -> Greift also die Zuweisung nicht, sollten die Shapes auch in Gelb erscheinen. Nun ist im array, als Beispiel: ColorTitleLine[1] := rgb(x,x,x); ColorTitleLine[2] := rgb(y,y,y); Die Shapes bekommen, bei Auswahl von "1" oder "2" IMMER die Farbe des ColorTitleLine[1] (Wie gesagt, das Array ist ein "array[1..3] of cardinal") Idee? :-) Besten Dank und Gr. aayb |
Re: FindComponentes "TShape faerben"
*ausdernasezieh* Und der Code? *Fingertrommel* :zwinker:
Denn 'YourID' ist dann eben immer 1. |
Re: FindComponentes "TShape faerben"
Sorry, total bloedsinniger Fehler meinerseits!
Es hatte funktioniert, nur waren die Farbwerte bei mir so nah einander, das man kaum ein Unterschied sehen konnte. :wall: Danke fuer deine Geduld und deine Hilfe :-) Gr. aayb |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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