Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - eigene komponente, property will nicht


Flash106 - Sa 25.12.04 21:13
Titel: eigene komponente, property will nicht
Hallo

ich versuche mich gerade ein wenig in der komponentenentwicklung und hab jetz ein eigenes Editfeld gemacht. Es soll eine Property namens tabelle haben aber ich kriege immer eine fehler meldung. hier mal der source:


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:
type
  TmyCustomEdit = class(TWinControl)
  private
    edEdit: TEdit;
    ...
    procedure SetTableName(vTable: String);
    function GetTableName: String;
    ...
  published
    property Text: String read GetText write SetText;  //<--das geht
    property Table: String read GetTableName write SetTableName;  //<-- das geht auch 
                                                            aber da unten nicht mehr
  end;
  ...
  ...

function TMyCustomEdit.GetTableName: String;
begin
  Result := edEdit.Table; //<-- jetz krieg ich den fehler das er table nicht kennt :(
end;

procedure TMyCustomEdit.SetTableName(vTable: String);
begin
  edEdit.Table := vTable;
end;


mit Text gehts doch auch :( ... was ist denn falsch daran??

hiiilfeee

Bianca

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am Mo 27.12.2004 um 14:27


.Chef - Sa 25.12.04 21:19

Kann auch nicht gehen, denn du greifst auf Table als Eigenschaft von TEdit (edEdit) zu, und TEdit hat kein Table.

Gruß,
Jörg


Flash106 - Sa 25.12.04 21:20

ähm naja.. ich dachte.. also ich wollt ihm sone eigenschaft verpassen.. geht das denn nicht? :(
ich mach das zum erstenmal.. sorry..
:(


.Chef - Sa 25.12.04 21:25

Klar geht das. Leite deine Komponente ganz einfach von TEdit ab anstatt von TWinControl, lass Table da, wo es jetzt ist (published), und gib deiner Kompo noch eine private Eigenschaft FTable zur internen Verwendung. Ein Komponenten-mach-Tutorial gibts glaub ich auf delphi-source.de (bin jetzt zu faul zum suchen).


Flash106 - Sa 25.12.04 21:28

ok danke.. naja das auf delphi source hab ich mir angesehen... hab da nur nich so recht gefunden was ich gesucht hab... bis dann =).. schönen feiertage noch


Flash106 - Sa 25.12.04 21:31

also laut tutorial müsste es ja dann so sein oder?? :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type
  TmyCustomEdit = class(TEdit)
  private
    edEdit: TEdit;
    FTable : string;
...

  published
    property Text: String read GetText write SetText;
    property Table: String read FTable write FTable;
...


krieg aber immernoch den gleichen fehler :(

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


retnyg - Sa 25.12.04 21:39
Titel: Re: eigene komponente, property will nicht
Flash106 hat folgendes geschrieben:


Quelltext
1:
2:
3:
4:
function TMyCustomEdit.GetTableName: String;
begin
  Result := edEdit.Table; //<-- jetz krieg ich den fehler das er table nicht kennt :(
end;


Result := edEdit.table ? das kann doch gar nicht gehen, table ist ja kein Element von edEdit1
wenn schon dann einfach table (aber ist table ein string???)
oder TMyCustomEdit.table


Flash106 - Sa 25.12.04 21:46

ja also:

property Table: String read FTable write FTable;

puh.. ich möchte einfach Table als eigenschaft zu dem editfeld hinzufügen so wie text oder width oder was weis ich?! wie mache ich das denn fehlerfrei?!?!?


retnyg - Sa 25.12.04 21:50


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:
type
  TmyCustomEdit = class(TEdit)
  private
  //   Table: string;
    ...
    procedure SetTableName(vTable: String);
    function GetTableName: String;
    ...
  published
    property Text: String read GetText write SetText;  //<--das geht
    property Table: String read GetTableName write SetTableName;  //<-- das geht auch 
                                                            aber da unten nicht mehr
  end;
  ...
  ...

function TMyCustomEdit.GetTableName: String;
begin
  Result := Table; //<-- jetz krieg ich den fehler das er table nicht kennt :(
end;

procedure TMyCustomEdit.SetTableName(vTable: String);
begin
  Table := vTable;
end;

probiers mal so
in deinem hauptprogramm musst du dann noch die unit einbinden und eine var vom type TMyCustomEdit definieren
var
edEDIT1 : TMyCustomedit;


Flash106 - Sa 25.12.04 21:57

nein geht nich... :cry:


retnyg - Sa 25.12.04 21:59

am einfachsten ginge es wenn du keine eigene "Komponente" machst, sondern einfach den Typ TMyCustomEdit in deinem Hauptprogramm definierst:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
type TMyCustomEdit = class(Tedit)
     private 
         table: string;
         text: string;
     end;
 
     TForm1 = Class (TForm)
  ...

var Form1 : TForm1;
    Eddt : TMyCustomEdit;

...

procedure Button1Click(sender... bla
begin
   Eddt.Text := 'bla';
   Eddt.table := 'tabelle1';
end;


retnyg - Sa 25.12.04 22:04

Flash106 hat folgendes geschrieben:
nein geht nich... :cry:

hast du in meinem CodeBeispiel die Zeile 4 auch auskommentiert ? ich habe das 3 min später oder so editiert


Ansonsten muss in den Private Teil folgendes kommen
FTable : string;
und unten
property Table: String read FTable write SetTableName;