Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Panels alle gleichfarbig machen (https://www.delphipraxis.net/83870-panels-alle-gleichfarbig-machen.html)

Christian18 7. Jan 2007 18:25


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

Vielen Dank im vorraus

MFG Christian18

oki 7. Jan 2007 18:33

Re: Panels alle gleichfarbig machen
 
Hi,
Delphi-Quellcode:
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;
ich bin mir jetzt nur nicht ganz sicher, ob du nicht in ScrollBox.Components suchen mußt.

Gruß oki

Bernhard Geyer 7. Jan 2007 18:34

Re: Panels alle gleichfarbig machen
 
Hast Du evtl. XP-Theming für deine Anwendung aktiv. Dort gelten andere Spielregeln.

mkinzler 7. Jan 2007 18:35

Re: Panels alle gleichfarbig machen
 
Abgesehen davon, stimmt die obere Grenze wieder nicht.

MrKnogge 7. Jan 2007 18:37

Re: Panels alle gleichfarbig machen
 
Das sollte funktionieren:

Delphi-Quellcode:
for j:=0 to 19 do // das -1 bitte nicht vergessen
  with TPanel(FindComponent(P + IntToStr(i+1))) do
        p.Color:=clBtnFace;
Gruß

Hawkeye219 7. Jan 2007 18:38

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

oki 7. Jan 2007 18:44

Re: Panels alle gleichfarbig machen
 
Zitat:

Zitat von mkinzler
Abgesehen davon, stimmt die obere Grenze wieder nicht.

Sorry,
Delphi-Quellcode:
  for j:=0 to ScrollBox1.ComponentCount - do begin
@MrKnogge: dann aber so
Delphi-Quellcode:
with TPanel(FindComponent(P + IntToStr(i+1))) do
        Color:=clBtnFace;

Zitat:

Zitat von Hawkeye219
Hallo,

du mußt die Methode FindComponent des Owners deiner Panels aufrufen. Ist dies wirklich das Formular?

Ich denke das auf jeden Fall!

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:

Zitat von Hawkeye219
HNoch 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.

Und genau das ist die Eigenschaft Components.

Gruß

mkinzler 7. Jan 2007 18:45

Re: Panels alle gleichfarbig machen
 
Er meint, das du einen eigenen Array anlegen sollst.

MrKnogge 7. Jan 2007 18:50

Re: Panels alle gleichfarbig machen
 
Zitat:

Zitat von oki
@MrKnogge: dann aber so
Delphi-Quellcode:
with TPanel(FindComponent(P + IntToStr(i+1))) do
        Color:=clBtnFace;

Da hat mich wohl einer bei copy & paste erwischt. :mrgreen:

Was das array angeht, er meint wenn du deine Panels so deklarieren würdest:

Delphi-Quellcode:
P[1..20]: array pf TPanel:
Könntest du sie geütlich in einer Schlaife durchlaufen um die Farbe zu ändern.

Delphi-Quellcode:
for i := 0 to 19 do
  P[i+1].Color := ...

Christian18 7. Jan 2007 19:09

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???


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.
Seite 1 von 3  1 23      

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