![]() |
Property aus eigener Klasse nicht sichtbar
Hallo!
Endlich wieder ein neues Problem ... In meiner eigenen Klasse habe ich eine Eigenschaft deklariert. Mit einer Read Methode möchte ich darauf zugreifen. Es werden mir aber beim Zugriff nur die Konstanten angeboten.
Delphi-Quellcode:
Der Zugriff soll dann wie folgt erfolgen:
unit DatPanel;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; const AnzLabelsProPanel = 8 ; // Anzahl der Label (Zeilen) pro Panel LabelHeight = 13 ; // Höhe der Label (Zeilen); an Textgröße anpassen RandObenuUnten = 4 ; // Rand oben und unten (jeweils Wert - Rand komplett = 2*Wert) LabelAbstandlinks = 0 ; // Abstand links vom Label zum Panel (O = kein li. Rand) FarbeLabelOdd = clSilver ; // Farbe der ungeraden Labels FarbeLabelEven = clMedGray ; // Farbe der geraden Labels type TDatPanel = class(TPanel) private fLabel : Array [0..AnzLabelsProPanel - 1] of TLabel ; function GetMinPanelHeight: Integer ; public constructor Create(AOwner: TComponent); override ; procedure Resize; override ; property MinPanelHeight : Integer read GetMinPanelHeight ; end ; implementation constructor TDatPanel.Create(AOwner: TComponent); var i : integer ; begin inherited ; for i := 0 to AnzLabelsProPanel -1 do begin fLabel[i] := TLabel.Create(self); with fLabel[i] do begin Parent:= self ; // Zuweisung des Parent extrem wichtig! AutoSize := false ; // Keine automatsiche Größenanpassung Top := i * LabelHeight + RandObenuUnten ; Left := LabelAbstandlinks ; Height := LabelHeight ; Font.Size := 8 ; Caption := 'TestLine: ' + IntToStr(i+1) ; Name := 'DatLabel' + IntToStr(i) ; Tag := i ; if odd(i) then fLabel[i].Color := FarbeLabelOdd else fLabel[i].Color := FarbeLabelEven ; end ; end ; end; function TDatPanel.GetMinPanelHeight: Integer; begin Result := AnzLabelsProPanel * LabelHeight + 2 * RandObenuUnten ; end;
Delphi-Quellcode:
Beide sind vom Typ Integer. Was mache ich verkehrt? :gruebel:
procedure TForm1.Button2Click(Sender: TObject);
var aDP: Array [0..15] of TDatPanel ; i : integer ; begin for i := 0 to 15 do begin aDP[i] := TDatPanel.Create(ScrollBox); aDP[i].Parent := Scrollbox ; aDP[i].Height := DatPanel. // Hier wird mich nicht mein Property "MinPanelHeight" angeboten aDP[i].Top := i * aDP[i].Height ; aDP[i].Width := Scrollbox.ClientWidth ; end ; end ; Gruß und Dank glunzl |
Re: Property aus eigener Klasse nicht sichtbar
Propertys müssen IMHO in den published Abschntt rein.
Mfg Tobi |
Re: Property aus eigener Klasse nicht sichtbar
Kommt manchmal vor, wenn du zB die Komponente umschreibst aber nicht neu Installierst/Compilierst.
Dann hat die IDE noch die alte Version im Speicher... einfach die Property ausschrieben dann sollte es schon gehen. * Propertys müssen IMHO in den published Abschntt rein. * nicht ganz das ist nur nötig wenn sie im OI sichtbarsein sollen sonst reicht public |
Re: Property aus eigener Klasse nicht sichtbar
Zitat:
|
Re: Property aus eigener Klasse nicht sichtbar
Hallo glunzl,
DatPanel ist der Name der Unit. Welche Eigenschaften erwartest du da? Gruß Hawkeye |
Re: Property aus eigener Klasse nicht sichtbar
Zitat:
|
Re: Property aus eigener Klasse nicht sichtbar
Zitat:
|
Re: Property aus eigener Klasse nicht sichtbar
Zitat:
/Add *wenn du aber nach TDatPanel. den Vorschlag für diese Property willst muss es aber in den Published.* nope, (private protected public und published) werden bei mir alle von CodeInspetor angeboten, wobei privat und protected nur wenn ich in der gleichen Unit bin (oder eben Vererbt wurde <== nicht ganz sicher) |
Re: Property aus eigener Klasse nicht sichtbar
Zitat:
Zitat:
|
Re: Property aus eigener Klasse nicht sichtbar
Zitat:
|
Re: Property aus eigener Klasse nicht sichtbar
Hallo!
Die Klasse TDatPanel ist in ihrere eigenen Unis DatPanel geschrieben. Aus einer anderen Unit (die von Form1, bei mir Main) möchte ich nun auf die Eigenschaft "property MinPanelHeight", mit Hilfe der automatischen Codevervollständigung (Objekt.Eigenschaft) zugreifen. Inzwischen habe ich die Property in einen Publisched Bereich geschrieben, brachte allerdings kein Erfolg.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var aDP: Array [0..15] of TDatPanel ; i : integer ; begin for i := 0 to 15 do begin aDP[i] := TDatPanel.Create(ScrollBox); aDP[i].Parent := Scrollbox ; aDP[i].Height := DatPanel.MinPanelHeight // So hatte ich mir das vorgestellt // Hier wird mir nicht mein Property "MinPanelHeight" // nach dem Punkt angeboten aDP[i].Top := i * aDP[i].Height ; aDP[i].Width := Scrollbox.ClientWidth ; end ; end; |
Re: Property aus eigener Klasse nicht sichtbar
Zitat:
Vielleicht entspricht folgendes Verfahren Deinen Intentionen:
Delphi-Quellcode:
Gruß Jürgen
private FMinPanelHeight : integer;
property MinPanelHeight : Integer read FMinPanelHeight write SetMinPanelHeight; ... procedure TDatPanel.SetMinPanelHeight(Value: integer); var i: integer; begin i := GetMinPanelHeight; if (i <= Value) then FMinPanelHeight := Value else FMinPanelHeight := i; end; [/edit]Nachtrag Zitat:
GetMinPanelHeight ausschließlich auf Konstante zugreift, kann auch das Ergebnis und damit die "Eigenschaft" MinPanelHeight als Konstante verstanden werden, sodass es deshalb bei der Codevervollständigung nicht angeboten wird. |
Re: Property aus eigener Klasse nicht sichtbar
Zitat:
Versuchs also mal so:
Delphi-Quellcode:
aDP[i].Height := aDP[i].MinPanelHeight ;
|
Re: Property aus eigener Klasse nicht sichtbar
Hallo grunzl,
die Antworten genau lesen, man hat dir bereits geholfen: Zitat:
Delphi-Quellcode:
An der Stelle A C H T U N G hast du versucht auf die Unit der Komponete zu zugreifen. Diese "kennt" aber keine Funktion mit dem Namen MinPanelHeight. Diese kennt nur die Klasse. Somit zugriff nur über eine Instanz der Klasse. Wenn deine Berechnung wie in diesem Beispiel aber nur von Konstanten abhängig ist und nicht von Eigenschaften der Klasse, dann mach doch eine Funktion draus die Klassenunabhängig ist.
procedure TForm1.Button2Click(Sender: TObject);
var aDP: Array [0..15] of TDatPanel ; i : integer ; begin for i := 0 to 15 do begin aDP[i] := TDatPanel.Create(ScrollBox); aDP[i].Parent := Scrollbox ; aDP[i].Height := aDP[i].MinPanelHeight;//A C H T U N G // Hier wird mich nicht mein Property "MinPanelHeight" angeboten aDP[i].Top := i * aDP[i].Height ; aDP[i].Width := Scrollbox.ClientWidth ; end ; end; Gruß, Chris // Edit: Da war jemand schneller als ich ;-) Look @ Jelly |
Re: Property aus eigener Klasse nicht sichtbar
@Jelly: Bingo! Das wars
Delphi-Quellcode:
:wall: Danke!
aDP[i].Height := aDP[i].MinPanelHeight ;
@ChrisE: Genau lesen ist ja so eine Wissenschaft für sich ... Zitat:
Dank an alle! glunzl |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz