![]() |
Mehrere Panel gleichzeitig färben
Hallo ich hab ein kleines Problem.
In meinem Project sind sehr viele ( wirklich viele Panel ) vorhanden. Die alle gleichzeitig zu "färben" ist mir zu aufwändig. Ich hab es mit einer For-Schleife versucht aber komme an einem Punkt nicht weiter:
Delphi-Quellcode:
Ich hoffe ihr könnt mir helfen und versteht mein Problem.
For i:=1 to 39 do
Panel&i.Color:=rgb(i*2,i+2,i); // Hier ist das Problem. Ich hab versucht den Integer mit einem "&" anzuhängen (Kenntnisse von TI-Basic) - Leider ohne Erfolg. |
AW: Mehrere Panel gleichzeitig färben
Es gibt mehrere Möglichkeiten:
- Durch das Controls-Array iterieren und wenn das aktuelle Control ein Panel ist, färben - Erstellen einer eigenen Liste/eines Array, in dem Du die Panels verwaltest, unabhängig vom Parent oder Owner - FindComponent/FindControl anwenden (IMO schlechteste Alternative) |
AW: Mehrere Panel gleichzeitig färben
Zitat:
Ja, aber wenn er es bereits vergeblich (weil grundlegend fälschlich) dadurch versucht hat, "ein Integer mit einem "&" anzuhängen (Kenntnisse von TI-Basic)", dann wird er diese Empfehlung vermutlich ohne konkrete Anleitung nicht in funktionierenden Delphi-Code umsetzen können.
Code:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin for i:= 0 to ComponentCount - 1 do if (Components[i] is TPanel) then (Components[i] as TPanel).color:=clBlue; end; |
AW: Mehrere Panel gleichzeitig färben
Ich würde wahrscheinlich eher über Controls iterieren als über Components. Controls bezieht sich auf Parent-Beziehung, während Components die Owner-Beziehung auswertet. Aber in meinen Augen ist die eigene Verwaltung über ein Array/eine Liste sowieso die beste Lösung, da man dort gezielt Panels aufnehmen bzw. ausschließen kann.
[edit] Beispiel (ich erzeuge die Panels hier dynamisch, das muss man natürlich nicht, man kann sie auch einzeln den Array-Elementen zuweisen):
Delphi-Quellcode:
[/edit]
const
PANELCOUNT = 42; PANELSPERCOL = 3; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDblClick(Sender: TObject); private { Private-Deklarationen } FPanels: array [1 .. PANELCOUNT] of TPanel; public { Public-Deklarationen } end; ... procedure TForm1.FormCreate(Sender: TObject); var i: integer; CntRows: integer; begin CntRows := PANELCOUNT div PANELSPERCOL; for i := Low(FPanels) to High(FPanels) do begin FPanels[i] := TPanel.Create(self); FPanels[i].Parent := self; FPanels[i].ParentBackground := false; FPanels[i].Height := ClientHeight div CntRows; FPanels[i].Width := ClientWidth div PANELSPERCOL; FPanels[i].Left := ClientWidth div PANELSPERCOL * (i mod PANELSPERCOL); FPanels[i].Top := ClientHeight div CntRows * (i mod CntRows); end; end; procedure TForm1.FormDblClick(Sender: TObject); var i: integer; begin for i := Low(FPanels) to High(FPanels) do FPanels[i].Color := clRed; end; |
AW: Mehrere Panel gleichzeitig färben
Wäre es nicht einfacher die Color des Forms zu ändern? Standardmäßig sollte sich das auf die Panels fortpflanzen (Stichwort: ParentColor).
|
AW: Mehrere Panel gleichzeitig färben
Kommt halt darauf an, was genau gewollt ist.
|
AW: Mehrere Panel gleichzeitig färben
Zitat:
Zitat:
Code:
const MaxColors = 8; // z.B. oder aber mehr oder weniger
Var fcolor: Array [1..maxcolors] of integer =(clBlue, clYellow, clRed, clMaroon, clGreen, clNavy, clLime, clFuchsia); procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin for i:= 0 to ComponentCount - 1 do if (Components[i] is TPanel) then (Components[i] as TPanel).color:=fColor[random(maxcolors)+1]; end; |
AW: Mehrere Panel gleichzeitig färben
Danke für die vielen Antworten!
Ich habe heute leider keine Zeit mehr eure Vorschläge auszuprobieren. Dennoch bin ich davon überzeugt, dass eure Vorschläge mir sicher helfen werden. Ich melde mich morgen nochmal :) Mit freundlichen Grüßen LittleTee |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 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