AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FindComponentes "TShape faerben"

Ein Thema von aayb · begonnen am 19. Nov 2008 · letzter Beitrag vom 20. Nov 2008
Antwort Antwort
aayb

Registriert seit: 9. Jan 2008
14 Beiträge
 
#1

FindComponentes "TShape faerben"

  Alt 19. Nov 2008, 17:53
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: FindComponentes "TShape faerben"

  Alt 19. Nov 2008, 17:58
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
aayb

Registriert seit: 9. Jan 2008
14 Beiträge
 
#3

Re: FindComponentes "TShape faerben"

  Alt 20. Nov 2008, 09:50
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: FindComponentes "TShape faerben"

  Alt 20. Nov 2008, 09:55
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
aayb

Registriert seit: 9. Jan 2008
14 Beiträge
 
#5

Re: FindComponentes "TShape faerben"

  Alt 20. Nov 2008, 10:15
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: FindComponentes "TShape faerben"

  Alt 20. Nov 2008, 10:29
Was für ein Fehler kommt denn?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
aayb

Registriert seit: 9. Jan 2008
14 Beiträge
 
#7

Re: FindComponentes "TShape faerben"

  Alt 20. Nov 2008, 10:39
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: FindComponentes "TShape faerben"

  Alt 20. Nov 2008, 10:42
*ausdernasezieh* Und der Code? *Fingertrommel*

Denn 'YourID' ist dann eben immer 1.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
aayb

Registriert seit: 9. Jan 2008
14 Beiträge
 
#9

Re: FindComponentes "TShape faerben"

  Alt 20. Nov 2008, 10:54
Sorry, total bloedsinniger Fehler meinerseits!
Es hatte funktioniert, nur waren die Farbwerte bei mir so nah einander, das man kaum ein Unterschied sehen konnte.


Danke fuer deine Geduld und deine Hilfe
Gr.
aayb
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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