| Autor |
Beitrag |
Tweafis
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Mo 02.06.03 09:13
Ich möchte eine neue Class (oder Record) erstellen, und zwar TZeiger, welche ungefähr so aussieht:
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:
Delphi-Quelltext 1: 2: 3:
| TZeiger := TZeiger.Create TZeiger.Length := 0.7 TZeiger.Pen := TPen.Create |
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
ErnestoChe
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: Mo 02.06.03 10:12
Hallo,
erstelle doch eine Klasse und kreatiere TPen im Konstruktor von TZeiger:
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 
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: 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
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: 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 
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Mo 02.06.03 11:10
Hmm ich hab es jetzt so gemacht:
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
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
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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: Mo 02.06.03 11:19
Hi,
dann leite deine TZeiger von TPersistent ab und mache folgendes:
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 
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: 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 
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: 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
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: 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:
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; 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 
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Mo 02.06.03 11:37
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
ErnestoChe
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: Mo 02.06.03 11:43
Hallo,
werden die Eigenschaften expandiert wenn du "+" drückst? Werden nur die Änderungen zur Entwurfszeit nicht angezeigt?
|
|
Tweafis 
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: 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
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: Mo 02.06.03 11:52
Hallo,
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:
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
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: Mo 02.06.03 11:57
Hallo nochmal,
du musst sie veröffentlichen, genauso wie bei der Komponente selber:
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 
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Mo 02.06.03 11:57
hab genau das gemacht
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
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
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
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: Mo 02.06.03 12:06
Hi,
lies dieses und das vorhergehende Postin durch. Und natürlich noch den private-bereich ändern.
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 
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: 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 
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: 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 
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
ErnestoChe
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: 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
MFG
- Ernesto -
Zuletzt bearbeitet von ErnestoChe am Mo 02.06.03 12:28, insgesamt 1-mal bearbeitet
|
|