Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi FindComponentes "TShape faerben" (https://www.delphipraxis.net/124476-findcomponentes-tshape-faerben.html)

aayb 19. Nov 2008 16:53


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:
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;
Das Problem? Es geht nicht.
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

DeddyH 19. Nov 2008 16:58

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 ;)

aayb 20. Nov 2008 08:50

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

alzaimar 20. Nov 2008 08:55

Re: FindComponentes "TShape faerben"
 
Lass Dir einfach die Komponentennamen ausgeben: Schmeiss ein Memo auf die Form und dann
Delphi-Quellcode:
For i:=0 to ComponentCount-1 do
  Memo1.lines.add(Format('%3d: %s',[i,Components[i].Name]));
Dann wirst du es verstehen.

Alternativ geht es so:
Delphi-Quellcode:
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;
Die Methode 'FindComponent' sucht die Komponente mit dem angegeben Namen.

aayb 20. Nov 2008 09:15

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

alzaimar 20. Nov 2008 09:29

Re: FindComponentes "TShape faerben"
 
Was für ein Fehler kommt denn?

aayb 20. Nov 2008 09:39

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

alzaimar 20. Nov 2008 09:42

Re: FindComponentes "TShape faerben"
 
*ausdernasezieh* Und der Code? *Fingertrommel* :zwinker:

Denn 'YourID' ist dann eben immer 1.

aayb 20. Nov 2008 09:54

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 08:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz