Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#8

Re: [OOP / Methodenbezeichner] Anfängerfrage

  Alt 5. Mai 2005, 14:19
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 )
  Mit Zitat antworten Zitat