![]() |
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:
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.
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; Desahlb meine Frage: Kann man zum Beispiel für alle Komponeten eines Typs gleichzeitig eine Eigenschaft einstellen? Oder gibt es andere Lösung? |
Re: Problem mit zusätzlicher Panel-Komponente
hi, ich mach das immer so (im OnCreate)
Delphi-Quellcode:
Sorry, war noch ein Fehler drin. Hier mal ein Beispiel-Code, wie ich ihn verwende:
for i:=0 to ComponentsCount do
if (Components[i] is TIASemiPanel) then Components[i].color:=MyFarbe;
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; |
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: |
Re: Problem mit zusätzlicher Panel-Komponente
:arrow: THX an alle, ich habe jetzt die Lösung gefunden! :!:
Delphi-Quellcode:
achja ich habe wirklich 50 Panels in meiner Anwendung :???:
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; |
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 14:34 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