Autor Beitrag
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 09:13 
Ich möchte eine neue Class (oder Record) erstellen, und zwar TZeiger, welche ungefähr so aussieht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
TZeiger=class/record
  Length: real;
  Pen: TPen;
end;

Ich müsste aber noch wissen wie ich das initialisiere, in Create der Uhr:
ausblenden Delphi-Quelltext
1:
2:
3:
TZeiger := TZeiger.Create // afaik nur bei class
TZeiger.Length := 0.7 // Müsste gehen
TZeiger.Pen := TPen.Create // ??? gib afair fehler bei record

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 10:12 
Hallo,

erstelle doch eine Klasse und kreatiere TPen im Konstruktor von TZeiger:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
TZeiger = class(TObject)
public
  Length: real; 
  Pen: TPen;
  constructor Create; 
  destructor Destroy; 
end

// ..............

constructor TZeiger.Create;
begin
  inherited Create;
  
  Pen :=TPen.Create;
end;

destructor TZeiger.Destroy;
begin
  Pen.Free;
  inherited Destroy;
end;


MFG

- Ernesto -


Zuletzt bearbeitet von ErnestoChe am Mo 02.06.03 10:19, insgesamt 3-mal bearbeitet
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 10:13 
nagut, aber ich müsste noch wissen, von was ich die classe ableiten soll.
Hab grade sowas von Persistent abgeleitet gesehen (auch Zeiger).

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 10:24 
Hi,

kommt darauf an was deine Klasse alles haben soll und wofür sie gedacht. Für eine Real-Zahl und TPen denk ich mal, dass TObject genügt.

MFG

- Ernesto -
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 11:10 
Hmm ich hab es jetzt so gemacht:
ausblenden 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:
type
  TZeiger = class
  public
    Length: real;
    Pen: TPen;
    constructor Create;
    destructor Destroy;
  end;

...

constructor TZeiger.Create; 
begin
  inherited Create;

  Pen :=TPen.Create;
end;

destructor TZeiger.Destroy;
begin
  Pen.Free;
  inherited Destroy;
end;


und im Published Abschnitt meiner Komponente


ausblenden Delphi-Quelltext
1:
2:
3:
    property StdZeiger: TZeiger read fStdZeiger write fStdZeiger;
    property MinZeiger: TZeiger read fMinZeiger write fMinZeiger;
    property SekZeiger: TZeiger read fSekZeiger write fSekZeiger;


sowie folgendes im protected abschnitt
ausblenden Delphi-Quelltext
1:
2:
3:
    fStdZeiger: TZeiger;
    fMinZeiger: TZeiger;
    fSekZeiger: TZeiger;


Aber wenn ich z.B. StdZeiger im Objectinspektor verändern will, dann kommt wenn ich [+] klicke "Keine Expandierung möglich"

:( Fis

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 02.06.03 11:14 
Tweafis hat folgendes geschrieben:
Aber wenn ich z.B. StdZeiger im Objectinspektor verändern will, dann kommt wenn ich [+] klicke "Keine Expandierung möglich"

Deine leite die Klasse mal von Persistent ab.

Gruß
Tino
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 11:19 
Hi,

dann leite deine TZeiger von TPersistent ab und mache folgendes:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
type 
  TZeiger = class(TPersistent) 
  public 
    Length: real; 
    Pen: TPen; 
    constructor Create; 
    destructor Destroy; 
    procedure Assign(Source : TPersistent); override;
  end

//...................

procedure TZeiger.Assign(Source: TPersistent);
begin
  Length := TZeiger(Source).Length;
  Pen := TZeiger(Source).Pen;
end;


MFG

- Ernesto -
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 11:24 
Jetzt kommt zwar keine Fehlermeldung mehr, aber aus dem + wird nur ein - und es klappt nicht auf, bzw werden keine optionen zum verändern angezeigt

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 11:30 
Und wenn ich in Create Assign(Self) aufrufe bringt das auch nix, nur dass die Teile von Anfang an "aufgeklappt" sind (- statt +). (vielleicht war das auch nur weil ich es davor aufgeklappt habe...)

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 11:32 
Hi,

dann mach noch folgendes, erstelle ein Objekt von der Klasse von der deine Komponente abgeleitet ist, und ändere den Konstruktor folgendermaßen um:

ausblenden 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  
  TZeiger = class(TPersistent)  
  private
    FOwner: TCustomControl;     // <-------- zum Beispiel
  public  
    Length: real;  
    Pen: TPen;  
    constructor Create(AOwner: TComponent); 
    destructor Destroy;  
    procedure Assign(Source : TPersistent); override
  end;  

//.........................

constructor TZeiger.Create(AOwner: TComponent);
begin 
  inherited Create;

  if AOwner is TCustomControl then
    FOwner := TCustomControl(AOwner)
  else
    FOwner:=nil

  Pen :=TPen.Create; 
end;


MFG

- Ernesto -
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 11:37 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type
  TZeiger = class(TPersistent)
  private
    FOwner: TCustomControl;
  public
    Length: real;
    Pen: TPen;
    constructor Create(AOwner: TComponent);
    destructor Destroy;
    procedure Assign(Source : TPersistent); override;
  end;

ausblenden 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:
//TZeiger Start

constructor TZeiger.Create;
begin
  inherited Create;

  if AOwner is TCustomControl then 
    FOwner := TCustomControl(AOwner)
  else
    FOwner:=nil;  

  Pen :=TPen.Create;
end;

destructor TZeiger.Destroy;
begin
  Pen.Free;
  inherited Destroy;
end;
               
procedure TZeiger.Assign(Source: TPersistent);
begin
  Length := TZeiger(Source).Length;
  Pen := TZeiger(Source).Pen;
end;

// TZeiger Ende

ausblenden Delphi-Quelltext
1:
2:
3:
4:
  //in Create func  der Kompo
StdZeiger := TZeiger.Create(Self);
  MinZeiger := TZeiger.Create(Self);
  SekZeiger := TZeiger.Create(Self);


ausblenden Delphi-Quelltext
1:
2:
3:
4:
//in Destroy func der Kompo
  StdZeiger.Free;
  MinZeiger.Free;
  SekZeiger.Free;


Bringt nix, ich kann die Eigenschaften von z.B. StdZeiger nicht über den Objektinspektor verändern[/delphi]

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 11:43 
Hallo,

werden die Eigenschaften expandiert wenn du "+" drückst? Werden nur die Änderungen zur Entwurfszeit nicht angezeigt?
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 11:48 
[+]StdZeiger

so sieht es aus... dann *click* ->

[-]StdZeiger

aber keine Ausklappung

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 11:52 
Hallo,

ausblenden Delphi-Quelltext
1:
2:
3:
property StdZeiger: TZeiger read fStdZeiger write fStdZeiger; 
    property MinZeiger: TZeiger read fMinZeiger write fMinZeiger; 
    property SekZeiger: TZeiger read fSekZeiger write fSekZeiger;


Das soltest Du umändern und per Write in Methoden schreiben. So etwa:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
type deineKompo = class(TCustomControl)
   //.......
protected
  procedure SetStdZeiger(newValue:  TZeiger);
published 
  property StdZeiger: TZeiger read fStdZeiger write SetStdZeiger; 
  property MinZeiger: TZeiger read fMinZeiger write SetMinZeiger; 
  property SekZeiger: TZeiger read fSekZeiger write SetSekZeiger;
end;


//....

procedure deineKompo.SetStdZeiger(newValue:  TZeiger);
begin
  fStdZeiger := newValue;
  RePaint;
end;


MFG

- Ernesto -
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 11:57 
Hallo nochmal,

du musst sie veröffentlichen, genauso wie bei der Komponente selber:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type 
  TZeiger = class(TPersistent) 
  private 
    FOwner: TCustomControl; 
  public 
    Length: real; 
    Pen: TPen; 
    constructor Create(AOwner: TComponent); 
    destructor Destroy; 
    procedure Assign(Source : TPersistent); override
  published
    property Length;
    property Pen;
  end;


MFG

- Ernesto -
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 11:57 
hab genau das gemacht

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TwUhr.SetStdZeiger(newValue:  TZeiger);
begin
  fStdZeiger := newValue;
  RePaint;
end;

procedure TwUhr.SetMinZeiger(newValue:  TZeiger);
begin
  fMinZeiger := newValue;
  RePaint;
end;

procedure TwUhr.SetSekZeiger(newValue:  TZeiger);
begin
  fSekZeiger := newValue;
  RePaint;
end;
und halt protected und property

aber das bringt nix.

Ich glaube das liegt an
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type
  TZeiger = class(TPersistent)
  private
    FOwner: TCustomControl;
  public
    Length: real;
    Pen: TPen;
    constructor Create(AOwner: TComponent);
    destructor Destroy;
    procedure Assign(Source : TPersistent); override;
  end;


dem und

ausblenden 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:
constructor TZeiger.Create;
begin
  inherited Create;

  if AOwner is TCustomControl then 
    FOwner := TCustomControl(AOwner)
  else
    FOwner:=nil;  

  Pen :=TPen.Create;
end;

destructor TZeiger.Destroy;
begin
  Pen.Free;
  inherited Destroy;
end;

procedure TZeiger.Assign(Source: TPersistent);
begin
  Length := TZeiger(Source).Length;
  Pen := TZeiger(Source).Pen;
end;


dem Teil

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 12:06 
Hi,

lies dieses und das vorhergehende Postin durch. Und natürlich noch den private-bereich ändern.

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:
type  
  TZeiger = class(TPersistent)  
  private  
    FLength: Real;
    FPen: TPen;
    FOwner: TCustomControl;  
    procedure SetLength(newValue: Real);
    procedure SetPen(newValue: Tpen);
  public 
    constructor Create(AOwner: TComponent);  
    destructor Destroy;  
    procedure Assign(Source : TPersistent); override;  
  published 
    property Length: Real read FLength write SetLength;
    property Pen: TPen read FPen write SetPen;
  end;

// ......


procedure TZeiger.SetLength(newValue: Real);
begin
  FLength := newValue;
  FOwner.Repaint;
end;

procedure TZeiger.Setpen(newValue: TPen);
begin
  FPen := newValue;
  FOwner.Repaint;
end;

MFG

- Ernesto -
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 12:22 
Das Gibt so Fehler wie Stack-Überlauf und das Programm startet nimma

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 12:24 
ES GEHT!!!!!

Ich hab nur ausversehen in SetPen Pen stat FPen geändert -> muss ja stack überlaufgeben (ruft sich immer wieder selber auf))

Aber jetzt geht es!!!

Thx ErnestoChe, thxthxthx :D :D :D

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 12:27 
Hi,

nimm mal für FLength Integer statt Real und teile mal neben bei mit von welcher Klasse du deine Komponente ableitest.

// Nachtrag: gerngeschehen, freut mich, dass es jetzt klappt :wink:

MFG

- Ernesto -


Zuletzt bearbeitet von ErnestoChe am Mo 02.06.03 12:28, insgesamt 1-mal bearbeitet