![]() |
Panels alle gleichfarbig machen
Hallo,
ich habe 20 Panels in einer ScrollBox. Die Panels haben alle verschiedene Farben. Jetzt möchte ich die Panels alle in der selben Farbe haben. Damit ich nicht jedes Panel einzeln ansprechen muss, habe ich mir folgendes überlegt.
Delphi-Quellcode:
Leider funktioniert es mal wieder nicht. Was habe ich falsch gemacht??? Die Panels erzeuge ich Dynamisch und gebe den Panels auch bei der erzeugung Namen. Die Panels heißen P1, P2, ..., P20
for j:=0 to Form1.ComponentCount do
begin p:=FindComponent('P' + IntToStr(j + 1)) as TPanel; if p is TPanel then begin p.Color:=clBtnFace; end; end; Vielen Dank im vorraus MFG Christian18 |
Re: Panels alle gleichfarbig machen
Hi,
Delphi-Quellcode:
ich bin mir jetzt nur nicht ganz sicher, ob du nicht in ScrollBox.Components suchen mußt.
begin
for j:=0 to Form1.ComponentCount do begin if Form1.Components[j] is TPanel then begin (Form1.Components[j] as TPanel).Color:=clBtnFace; end; end; end; Gruß oki |
Re: Panels alle gleichfarbig machen
Hast Du evtl. XP-Theming für deine Anwendung aktiv. Dort gelten andere Spielregeln.
|
Re: Panels alle gleichfarbig machen
Abgesehen davon, stimmt die obere Grenze wieder nicht.
|
Re: Panels alle gleichfarbig machen
Das sollte funktionieren:
Delphi-Quellcode:
Gruß
for j:=0 to 19 do // das -1 bitte nicht vergessen
with TPanel(FindComponent(P + IntToStr(i+1))) do p.Color:=clBtnFace; |
Re: Panels alle gleichfarbig machen
Hallo,
du mußt die Methode FindComponent des Owners deiner Panels aufrufen. Ist dies wirklich das Formular? Noch einfacher wäre es, beim Erzeugen der Panels die Referenzen in einer Liste oder einem dynamischen Array abzulegen. Damit ersparst du dir die aufwendige Suche mittels FindComponent. Gruß Hawkeye |
Re: Panels alle gleichfarbig machen
Zitat:
Delphi-Quellcode:
@MrKnogge: dann aber so
for j:=0 to ScrollBox1.ComponentCount - do begin
Delphi-Quellcode:
with TPanel(FindComponent(P + IntToStr(i+1))) do
Color:=clBtnFace; Zitat:
Delphi-Quellcode:
for j:=0 to ScrollBox1.ComponentCount - do begin
if ScrollBox1.Components[j] is TPanel then begin (ScrollBox1.Components[j] as TPanel).Color:=clBtnFace; end; end; Zitat:
Gruß |
Re: Panels alle gleichfarbig machen
Er meint, das du einen eigenen Array anlegen sollst.
|
Re: Panels alle gleichfarbig machen
Zitat:
Was das array angeht, er meint wenn du deine Panels so deklarieren würdest:
Delphi-Quellcode:
Könntest du sie geütlich in einer Schlaife durchlaufen um die Farbe zu ändern.
P[1..20]: array pf TPanel:
Delphi-Quellcode:
for i := 0 to 19 do
P[i+1].Color := ... |
Re: Panels alle gleichfarbig machen
Hi,
ich habe gerade noch eine andere Idee, auf meinen Panels habe ich Images!!! Ist es möglich zu erkennen aus welchen Panel das Image drauf liegt??? |
Re: Panels alle gleichfarbig machen
ja ist möglich. Aber was ist nun mit deinem Problem? Mach bitte für eine neue Frage einen neuen Thread auf.
|
Re: Panels alle gleichfarbig machen
Zu meinem Problem, hat bis jetzt keine Variante funktioniert. --> Also bei mir nicht.
|
Re: Panels alle gleichfarbig machen
Sind die Panels da und sichtbar?
Was hast du als Parent beim Create gesetzt? Hast du mal geprüft, ob er die Panels nicht findet, oder ob das Setzen der Farbe nicht funzt? Liegt es eventuell do´ch an den Themes? Hast du nach den Ändern der Farbe das Fenster neu zeichnen lassen (Invalidate, Repaint ...)? Gruß oki |
Re: Panels alle gleichfarbig machen
Hallo oki,
das sind ja gleich viele Frage auf einmal. Nagut ich versuch es mal!!! Zitat:
Zitat:
var p : Array of TPanel; ... p[j - 1].Parent:=ScrollBox1; Zitat:
Zitat:
|
Re: Panels alle gleichfarbig machen
Und dein Owner bei Create?
Zitat:
Wenn das so ist, dann sind deine Panels bei einem anderen Owner. Gruß oki |
Re: Panels alle gleichfarbig machen
Dann benutzt du also weiterhin
![]() ![]() Gruß Hawkeye |
Re: Panels alle gleichfarbig machen
Zitat:
Es könnte sein, dass der Compiler die Schleife rumdreht (der performance wegen) Zitat:
Dann probier es mal damit. Und zu guter letzt bleibt die Frage mit den XP-Themes. |
Re: Panels alle gleichfarbig machen
wie kann ich denn herrausfinden wer der owner ist??? das hör ich jetzt zum erstem mal.
|
Re: Panels alle gleichfarbig machen
Hi,
Zitat:
Damit ist alles klar, wie in meiner letzten Frage; der Owner ist schult. Kein Owner, kein Eintrag in eine Liste Components (logisch). Gruß oki |
Re: Panels alle gleichfarbig machen
Sorry, hab da was verwechselt.
|
Re: Panels alle gleichfarbig machen
Der Owner ist der, den du als Owner beim Create angibst.
Delphi-Quellcode:
Hier ist Scrollbox1 der Owner (Besitzer).
MyPanel := TPanel.Create(ScrollBox1);
Gruß oki |
Re: Panels alle gleichfarbig machen
Hey jetzt funktioniert es vielen vielen dank.
Eine Frage habe ich noch. Die Images die ich auf den Panels drau habe, welchen owner haben die denn??? Also ich habe pro Panel ein Image drauf. |
Re: Panels alle gleichfarbig machen
Das dass du bei dem Create des Images angiebst.
Delphi-Quellcode:
Image := TImage.Create({hier steht der Owner});
|
Re: Panels alle gleichfarbig machen
so du beim Create nichts anderes angegeben hast (nil :wink: ) das Panel.
Delphi-Quellcode:
Gruß
myImage := TImage.create(mypanel);
MyImage.Parent := MyPanel; |
Re: Panels alle gleichfarbig machen
ok dann habe ich das mit den Owner jetzt kapiert. Man lernt wirklich nie aus. naja nochmals vielen dank für eure Hilfe.
|
Re: Panels alle gleichfarbig machen
gern geschehen!
Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 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