Autor Beitrag
TheBasti
Hält's aus hier
Beiträge: 3

Win 98
Delphi 3
BeitragVerfasst: So 02.01.05 00:31 
Hallo

Hätte ne Frage wie ich in einem eigenen Komponenten ne Datei per OpenDialog auswählen kann. Also, wie ich ein ganz normales string-Eingabefeld (FFileName) das ich entweder manuel oder per "..."-Button(der den OpenDialog öffnet) erzeugen kann.
Wer jetzt nicht weiß was ich meine benutzt mal kurz den TAnimate Komponent die Eigenschaft FileName ist genau so wie ich mir das vorstelle...und da habe ich auch versucht abzuschauen. Ich habe den TAnimate Teil aus dem Source Odner als eigenen Komponent genommen(TTestKombo) nachdem ich im Quelltext nicht durchgeblickt habe. Das Ergebniss war jedoch enttäuschend..zwar ist er genau wie der TAnimate aber der "..."-Button und damit der OpdenDialog aufruf sind nicht da. Dabei habe ich bis auf den Namen des Komponenten nix am Quelltext geändert. Der FileName beim TAnimate ist üprigens auch ein "normaler" string.

Also, wie schafe ich es den "..."Button(inkl. OpenDialog aufruf) in mein Komponenten zu bekommen??(ist beides für mich ein Rätsel)

mfg
Sebastian
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: So 02.01.05 01:02 
Hallo und :welcome: im Delphi-Forum.de!

Um das mal kurz zusammen zu fassen: Du hast eine eigene Komponete entwickelt und möchtest jetzt bei einer Eigenschaft dieser neuen Komponente im Objektinspektor einen Button platziert haben damit der Komponentenbenuzter eine Datei auswählen kann. Ist das so richtig?

Das sind Property-Editoren. Diese Property-Editoren musst du selbst enwickeln oder du greifst auf schon vorhandene (wie z. B. dieser "Datei Auswahl"-Property Editor) zurück. Wenn du deine Komponente mit
ausblenden Delphi-Quelltext
1:
RegisterComponents ('Standard', [TMyControl]);					

registriest kannst du auch Deine Eigenschaft registrieren und einen Property-Editor für diese Eigenschaft festlegen. Schau dir mal RegisterPropertyEditor() in der Delphi-Hilfe an. Außerdem kannst du ja mal in den Sourcecodes von Delphi schauen wie diese Editoren programmiert sind.

Gruß
Tino
TheBasti Threadstarter
Hält's aus hier
Beiträge: 3

Win 98
Delphi 3
BeitragVerfasst: So 02.01.05 18:29 
Hallo

Das mit dem Welcome Schild finde ich rücksichtsvoll :wink:

Also, du hast das Stichwort gegeben. Ich habe einfach mal das Delphi Verzeichnis nach dem Begrif durchsucht und habe ein Beispiel gefunden...unter DEMOS\PROBEDIT ist ein Beispiel..darauf werd ich aufbauen und es denn posten

mfg
Sebastian
TheBasti Threadstarter
Hält's aus hier
Beiträge: 3

Win 98
Delphi 3
BeitragVerfasst: Mo 03.01.05 16:28 
Hallo

So das Beispiel hatte mich eher ein bissle verwirrt die Lösung ist eigentlich ganz einfach. Man muß es nur wissen :roll:
So hier ist nun die Lösung:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
type
  TTestComp = class(TComponent)
  private
    { Private-Deklarationen }
    FTestString:string;
    procedure SetFTestString(Value:string);
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    property TEST:string read FTestString write SetFTestString;
  end;

  TTestEdit=Class(TPropertyEditor)
  public
   procedure Edit; override;
   function GetAttributes: TPropertyAttributes; override;
   function GetValue:stringoverride;
   procedure SetValue(const Value: string);override;
  private
   inhalt:string;
  end;


procedure Register;

implementation

procedure TTestComp.SetFTestString(Value:string);
begin
 FTestString:=value;
end;

procedure TTestEdit.Edit;
var s,PropName: string;
FileDialog:TOpenDialog;
begin
 PropName := GetName;
 if PropName='TEST' then
  begin
   FileDialog:=TOpenDialog.Create(Application);
    with FileDialog do
     begin
      Filter := 'Textdateien (*.TXT)|*.TXT';
      if inhalt='' then FileName:='*.TXT' else FileName:=inhalt;
      FilterIndex:=1;
      Title:='Textdatei öffnen';
     end;
   if FileDialog.Execute then SetValue(FileDialog.FileName);
   FileDialog.Free;
  end;
end;

function TTestEdit.GetValue:string;
var PropName: string;
begin
 PropName := GetName;
 if PropName='TEST' then
  begin
   inhalt:=GetStrValue;
   Result := inhalt;
  end;
end;

procedure TTestEdit.SetValue(const Value: string);
var PropName: string;
begin
 PropName := GetName;
 if PropName='TEST' then
  begin
   inhalt:=value;
   SetStrValue(value);
  end;
end;

function TTestEdit.GetAttributes: TPropertyAttributes;
var PropName: string;
begin
 PropName := GetName;
 if PropName='TEST' then
  begin
   Result := [paDialog];
  end;
end;

procedure Register;
begin
 RegisterComponents('Beispiele', [TTestComp]);
 RegisterPropertyEditor(TypeInfo(String),nil,'',TTestEdit);
end;


So vielen Dank

mfg
Sebastian

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Quake
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 05.02.05 02:27 
Hallo,

man hann den Code noch minimal verkürzen. Wenn man
ausblenden Delphi-Quelltext
1:
RegisterPropertyEditor(TypeInfo(String),TTestComp,'TEST',TTestEdit);					

benutzt kann man sich das
ausblenden Delphi-Quelltext
1:
if PropName='TEST' then					

in den Methoden von TTestEdit sparen.

ciao
Quake
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 06.02.05 10:18