Zitat von
maximov:
Das gesammte problem tritt eigentlich nur auf, weil du deine procedure als normale globale prozedur deklarierst und nicht als methode einer speziellen klasse. Generell handelt man sich nur ärger ein, wenn man von globalen punkten lokale aufgaben direkt ausführt. Ich würd das als methode von TForm1 deklarieren, womit dnn auch self wieder verfügbar ist.
Ja und nein.
Spezielle Klasse? Klaro!
Methode vom Form? hmmm... Schlecht bis gar nicht wiederverwendbar.
Im Vorfeld würde ich
das empfehlen. Dadurch geschieht der Rest einfach transparenter.
OK...
Im Menu unter View findest du den Project Manager. Öffne ihn mal und füge deiner Projektgruppe ein neues Projekt hinzu.
Es sollte ein
Package sein.
Speichere es am Besten gleich als "LabelMitWertDings.dpk" ab.
Dem
Package verpasst du eine neue
Unit und speicherst diese als "uLabelMitWertDings.pas".
Wie man vielleicht sehen kann, wird das ene Ableitung von TLabel. Wir wollen also die alte Eigenschaft Caption verstecken und eine neue Eigenschaft vom Typ Integer einführen. Diese sollte dann hinter den Kulissen die Umwandlung Integer -> String durchführen um die Caption des Labels zu besetzen.
Außerdem sollten wir die Caption direkt im Constructor mit einer Zahl besetzen (sonst knallt es ja gleich von Anfang an
)
Noch ein Register, um das Control in die
IDE zu kriegen und das war's dann auch schon.
Los Unitos:
Delphi-Quellcode:
unit uLabelMitWertDings;
interface
uses
Classes,
StdCtrls;
type
TLabelMitWertDings =
class(TLabel)
private
fWertDings :Integer;
protected
property Caption;
procedure setWertDings(
const aValue: Integer);
virtual;
published
property WertDings :Integer
read fWertDings
write setWertDings;
public
constructor Create(aOwner: TComponent);
override;
end;
procedure Register();
// zum Installieren in die IDE
implementation
uses
SysUtils;
procedure Register();
begin
RegisterComponents('
Samples', [TLabelMitWertDings]);
end;
{ TLabelMitWertDings }
constructor TLabelMitWertDings.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
WertDings := 0;
end;
procedure TLabelMitWertDings.setWertDings(
const aValue: Integer);
begin
fWertDings := aValue;
inherited Caption := IntToStr(fWertDings);
end;
end.
Jetzt einfach im Project Manager einen Rechtsklick auf das
Package und Install anklicken ->und *fump* schon ist das Control in der Komponentenpalette. (Wie im Code ersichtlich unter Samples)
Alles witere dürfte klar sein:
LabelMitWertDings.WertDings := 1;
Und zu den Tips mit den globalen Variablen des Formdesigners: Das kann doch nicht wirklich euer ernst sein?
Ich habe keine Ahnung warum Borland diesen Mist gebaut hat. Aber wer diese DAU-Krücken benutzt hat soviel Sinn für
OOP bzw. wartbaren, fehlerresistenten Code wie meine Großmutter. (Eher noch weniger
)