AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Properties

Ein Thema von sundance · begonnen am 17. Jul 2006 · letzter Beitrag vom 17. Jul 2006
Antwort Antwort
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#1

Problem mit Properties

  Alt 17. Jul 2006, 12:06
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:
property App1Pathname: string read Panel1.Caption;
property App2Pathname: string read Panel2.Caption;
{ etc. }
Das funktioniert so leider nicht. Auch mein Versuch mit einer zusätzlichen Getter-Funktion geht nicht besser:
Delphi-Quellcode:
function GetAppname(aPanel: TPanel): String;
begin
  result := aPanel.Caption
end;

property App1Pathname: string read GetAppname(Panel1);
property App2Pathname: string read GetAppname(Panel2);
Gibt's einen Weg, wie man das hinbekommt, ohne für jedes Property eine eigene Getter-Funktion vorzusehen?

.sundance.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Problem mit Properties

  Alt 17. Jul 2006, 12:22
Hallo sundance,

ganz ohne Getter wird es wohl nicht gehen, der folgende Code zeigt dir einen möglichen Weg auf:

Delphi-Quellcode:
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;
Benutzen kannst du die neue Eigenschaft so:

Name1 := Form1.AppPathname[Panel1]; Eine Sache ist mir noch nicht klar: wie kann der Anwender mit der Caption-Eigenschaft eines Panels eine Einstellung vornehmen?

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#3

Re: Problem mit Properties

  Alt 17. Jul 2006, 12:37
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
Name1 := Form1.Panel1.Caption; verwenden.
Zitat:
wie kann der Anwender mit der Caption-Eigenschaft eines Panels eine Einstellung vornehmen?
Dafür gibt's einen Eventhandler, den jedes Panel beim Klicken darauf aufruft:
Delphi-Quellcode:
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;
.sundance.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Problem mit Properties

  Alt 17. Jul 2006, 12:56
Du könntest die index-Direktive nutzen:

Delphi-Quellcode:
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;
Ungetestet, aber so oder ähnlich sollte es funktionieren. Sicherheitsabfragen mußt du natürlich noch einbauen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#5

Re: Problem mit Properties

  Alt 17. Jul 2006, 13:01
Hawkeye,

das sieht perfekt aus; ich werd's gleich mal ausprobieren.
Vielen Dank schon mal...

.sundance.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 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