Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit zusätzlicher Panel-Komponente (https://www.delphipraxis.net/100400-problem-mit-zusaetzlicher-panel-komponente.html)

Strahlex 27. Sep 2007 18:43


Problem mit zusätzlicher Panel-Komponente
 
Ich habe in meinem Projekt 50 Panels die ich gleichzeitig umfärbe. Das mache ich mittels dieser GetObjectByName:
Delphi-Quellcode:
function tform1.GetObjectByName(ctrlName: string): TObject;
  var
      i: Integer;
  begin
      Result := nil;
      for i := 0 to form1.ComponentCount -1 do
      begin
          if frmEditor.Components[i].Name = ctrlName then
          begin
              Result := frmEditor.Components[i];
              break;
          end;
      end;
      for i := 0 to form1.ControlCount -1 do
      begin
          if form1.Controls[i].Name = ctrlName then
          begin
              Result := form1.Controls[i];
              break;
          end;
      end;
  end;
Mein Problem ist das ich die Panels durch die Komponente TIASemiPanel ersetzen will, das ist eine von TPanel abgeleitete Komponete. Wenn ich GetObjectByName für diese Komponente ausführe erhalte ich eine Zugriffsverletzung.

Desahlb meine Frage:
Kann man zum Beispiel für alle Komponeten eines Typs gleichzeitig eine Eigenschaft einstellen? Oder gibt es andere Lösung?

Progman 27. Sep 2007 18:49

Re: Problem mit zusätzlicher Panel-Komponente
 
hi, ich mach das immer so (im OnCreate)
Delphi-Quellcode:
for i:=0 to ComponentsCount do
  if (Components[i] is TIASemiPanel) then Components[i].color:=MyFarbe;
Sorry, war noch ein Fehler drin. Hier mal ein Beispiel-Code, wie ich ihn verwende:
Delphi-Quellcode:
  for i:=0 to Self.ComponentCount-1 do
   if (Components[i] is TXiButton) then begin
     (Components[i] as TXiButton).ColorScheme:=bColorScheme;
     (Components[i] as TXiButton).Cursor:=myDefault;
   end;

s-off 27. Sep 2007 18:52

Re: Problem mit zusätzlicher Panel-Komponente
 
Du kannst alle Komponenten, die sich auf einer Form befinden markieren und die Eigenschaft über den OI editieren.

Da ich aber nicht glaube, dass Du 50 Panels auf einer Form hast, könntest Du auch direkt in den DFMs Search&Replace mit regulären Ausdrücken machen.

Den Zusammenhang, dass Du eine Schutzverletzung bei GetObjectByName bekommst und Deinem Vorhaben, die Eigenschaft aller Panels gleichzeitig zu ändern, verstehe ich allerdings nicht.

=======

:wall: nachdem ich Progmans Beitrag gelesen habe, habe auch ich gemerkt, was Du eigentlich willst.... Vergiss die drei Absätze oben einfach :oops:

Strahlex 27. Sep 2007 19:13

Re: Problem mit zusätzlicher Panel-Komponente
 
:arrow: THX an alle, ich habe jetzt die Lösung gefunden! :!:
Delphi-Quellcode:
for i:=0 to Self.ComponentCount-1 do
   if (Components[i] is TIASemiPanel) then
      if (Components[i] as TIASemiPanel).Name = 'semiPanel1' then begin
        (Components[i] as TIASemiPanel).Color:=color1;
        (Components[i] as TIASemiPanel).Color1:=color1;
      end;
achja ich habe wirklich 50 Panels in meiner Anwendung :???:

oki 27. Sep 2007 19:23

Re: Problem mit zusätzlicher Panel-Komponente
 
Hi,

das klappt so aber nur, wenn der Owner das Formular ist. Erstellt man zur Laufzeit Componenten und gibt ein anderes Control als Owner an, so muß man auch die Components jeder enthaltenen Componente durchsuchen. Am besten Recursiv.

Gruß oki


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 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