![]() |
Problem mit Properties
Hallo Delphi-Profis,
ich habe folgendes Problem/Herausforderung: In meiner Delphi-Applikation habe ich ein extra Formular, auf der die ganzen Einstellungen vorgenommen werden. Unter anderem finden sich dort einige TPanels, über die die Programmpfade externer Kommandozeilenapplikationen eingestellt werden können. Um diese Pfade nun auszulesen, wollte ich gerne für jede Applikation eine Property bereitstellen, am liebsten nach folgendem Muster:
Delphi-Quellcode:
Das funktioniert so leider nicht. Auch mein Versuch mit einer zusätzlichen Getter-Funktion geht nicht besser:
property App1Pathname: string read Panel1.Caption;
property App2Pathname: string read Panel2.Caption; { etc. }
Delphi-Quellcode:
Gibt's einen Weg, wie man das hinbekommt, ohne für jedes Property eine eigene Getter-Funktion vorzusehen?
function GetAppname(aPanel: TPanel): String;
begin result := aPanel.Caption end; property App1Pathname: string read GetAppname(Panel1); property App2Pathname: string read GetAppname(Panel2); .sundance. |
Re: Problem mit Properties
Hallo sundance,
ganz ohne Getter wird es wohl nicht gehen, der folgende Code zeigt dir einen möglichen Weg auf:
Delphi-Quellcode:
Benutzen kannst du die neue Eigenschaft so:
type
TForm1 = class (TForm) : private function GetAppname (aPanel: TPanel): String; public property AppPathname [aPanel: TPanel]: string read GetAppname; end; function TForm1.GetAppname (aPanel: TPanel): String; begin if Assigned(aPanel) then Result := aPanel.Caption else Result := ''; end;
Delphi-Quellcode:
Eine Sache ist mir noch nicht klar: wie kann der Anwender mit der Caption-Eigenschaft eines Panels eine Einstellung vornehmen?
Name1 := Form1.AppPathname[Panel1];
Gruß Hawkeye |
Re: Problem mit Properties
Hallo Hawkeye,
vielen Dank für deine Antwort. Allerdings war mein Hintergedanke, dass ich beim Aufruf der Property nicht wissen muss, auf welchem Panel der jeweilige Pfadname steht. Sonst könnte ich mir das alles sparen und einfach nur
Delphi-Quellcode:
verwenden.
Name1 := Form1.Panel1.Caption;
Zitat:
Delphi-Quellcode:
.sundance.
procedure TFormSettings.AppSelectionClick(Sender: TObject);
// Durch Klicken auf das Panelfeld des jeweiligen externen Programms kann über // einen Dateiauswahldialog der Pfad ausgewählt werden. var aPanel: TPanel; fn: String; begin aPanel := Sender as TPanel; // Zeiger auf geklicktes Panelfeld fn := aPanel.Caption; // Dort eingetragener Dateiname with OpenAppDialog do begin if FileExists(fn) then InitialDir := ExtractFileDir(fn) else InitialDir := JTools.GetProgramFilesDir; if Execute then aPanel.Caption := FileName; end; { with} end; |
Re: Problem mit Properties
Du könntest die index-Direktive nutzen:
Delphi-Quellcode:
Ungetestet, aber so oder ähnlich sollte es funktionieren. Sicherheitsabfragen mußt du natürlich noch einbauen.
type
TForm1 = class (TForm) : procedure FormCreate (Sender: TObject); private Panels : array [1..4] of TPanel; function GetAppname (aIndex: Integer): String; public property App1Pathname: string index 1 read GetAppname; property App2Pathname: string index 2 read GetAppname; property App3Pathname: string index 3 read GetAppname; property App4Pathname: string index 4 read GetAppname; end; procedure TForm1.FormCreate (Sender: TObject); begin Panels[1] := Panel1; Panels[2] := Panel2; Panels[3] := Panel3; Panels[4] := Panel4; end; function TForm1.GetAppname (aIndex: Integer): String; begin Result := Panels[aIndex].Caption; end; Gruß Hawkeye |
Re: Problem mit Properties
Hawkeye,
das sieht perfekt aus; ich werd's gleich mal ausprobieren. Vielen Dank schon mal... .sundance. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 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