Avatar billede cadamsen Nybegynder
28. august 2003 - 14:52 Der er 12 kommentarer

Property i hjemmelavet komponenter.

Hej ..

Hvis man gerne vil kunne se en properties for en komponent i "Object Inspector"'en skrives følgende code for komponenten :


unit est;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, stdctrls;

type
  Test = class(TComponent)
  private
    FValue: integer;
    procedure SetValue(const Value: integer);
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    Constructor Create(AOwner : TComponent); override;
  published
    { Published declarations }
    property Value : integer read FValue write SetValue;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [Test]);
end;

constructor Test.Create(AOwner: TComponent);
begin
    Inherited;
    Value := 10;
end;

procedure Test.SetValue(const Value: integer);
begin
  FValue := Value;
end;

end.


Men hvordan laver man en property som et rullegardin (Combobox) af strings hvor man kan vælge en?


CAD
Avatar billede Slettet bruger
28. august 2003 - 15:04 #1
Måske kan du bruge det her( taget fra indy):

type
TIdReuseSocket = (rsOSDependent, rsTrue, rsFalse);
...


FReuseSocket: TIdReuseSocket;
...
property ReuseSocket: TIdReuseSocket read FReuseSocket write FReuseSocket default rsOSDependent;
Avatar billede Slettet bruger
28. august 2003 - 15:08 #2
type
THejhej = (Hej, Hejhej, Hejhejhej);

type
  TTest = class(TComponent)
  private
  FHejhej: THejhej;
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
  property ReuseSocket: THejhej read FHejhej write FHejhej default Hej;
    { Published declarations }
  end;

Det her virker :-)
Avatar billede Slettet bruger
28. august 2003 - 15:09 #3
Svar
Avatar billede cadamsen Nybegynder
28. august 2003 - 15:30 #4
Hvad hvis THejHej skal indehold strings eller en integer.

CAD
Avatar billede martinlind Nybegynder
28. august 2003 - 15:40 #5
Så laver du din egen type og tilhørende editor, er beskrevet i hjælpen
Avatar billede 2j Nybegynder
28. august 2003 - 15:42 #6
Hvorfor skal den slags vøre så svært og bøvlet???

Fatter hat..
Avatar billede cadamsen Nybegynder
28. august 2003 - 15:44 #7
Hvor er det beskrevet i hjælpen
Avatar billede tolderlund Nybegynder
28. august 2003 - 15:52 #8
Du skal lave din property som en enumerated type.
type
  TMenneske = (mnBarn, mnMand, mnKvinde);
published
  property Menneske: TMenneske read FMenneske write FMenneske default mnBarn;
Sådan cirka.
Avatar billede 2j Nybegynder
28. august 2003 - 15:56 #9
Ja, men hvordan tildeler vi så mnBarn, mnKvinde og mnMand en variabeltype og en værdi?
F.eks. sådan at mnKvinde = 1, mnBarn = 2 og mnMand = 3
Avatar billede tolderlund Nybegynder
28. august 2003 - 16:05 #10
Du skal ikke tildele mnKvinde osv en værdi.
(De har dog implicit en værdi automatisk, fra 0 og opefter).
var
  Menneske: TMenneske;
begin
  Menneske := mnKvinde;
  if Menneske = Mand then
    {gør noget}
end;
Man kan tildele dem en værdi hvis man vil:
type
  TMenneske = (mnBarn=4, mnMand=6, mnKvinde=9);
Det er dog sjældent brugbart og kræver min. Delphi6 IIRC.
Avatar billede tolderlund Nybegynder
28. august 2003 - 16:06 #11
Skulle være
  if Menneske = mnMand then
  {gør noget}
Avatar billede martinlind Nybegynder
28. august 2003 - 16:11 #12
Det kan godt lade sig gøre som f.eks. TStrings, jeg kan ikke lige huske hvor i hjælpen det står, kig under property editor
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester