Følgende kode kalder "enable" på en control, der er nedarvet fra TWinControl.
if Ctrl is TWinControl then begin if TWinControl(Ctrl).ControlCount <= 0 then begin Ctrl.Enabled:=enable; end; end;
Problemet er den kalder TWinControl.Enable metoden. Det jeg er ude på er at få kaldt kontrollens enable. Altså hvis det er en TEdit vil jeg kalde TEdit.Enable. Kan dette lade sig gøre? Det _SKAL_ være generelt.
Jeg ved godt jeg kunne lave et tjek på alle typer der findes og så lave en typecast, men der er ufedt.
Selvom mange ledere i danske virksomheder udviser stor interessere for kunstig intelligens (AI), tøver de med at tage teknologien i brug.
19. november 2024
Slettet bruger
13. september 2002 - 20:33#1
hvilken type variabel er Ctrl
Synes godt om
Slettet bruger
13. september 2002 - 21:11#2
Prøv dette var WCtrl:TWincontrol; Begin if Ctrl is TWinControl then begin WCtrl=Ctrl if WCtrl.ControlCount <= 0 then begin WCtrl.Enabled:=enable; end; end;
if Ctrl is TEdit then (Ctrl as TEdit).Enabled := Enable else if Ctrl is TLabel then (Ctrl as TLabel).Enabled := Enable;
Med mindre du finder en GetClassTypeName-agtig funktion, så tror jeg ikke lige får så meget ud af det... Baren case-sætning ville gøre det bedre, men jeg har selv haft et lignende problem, og der fandt jeg ingen vej uden om den jeg lige har beskrevet... Dog siger jeg ikke at den ikke findes! ;)
tankred din forslag virker ikke. Det er det jeg gør!
hermandsen dit forslag kender jeg godt, men det er jo netop det jeg skriver jeg vil undgå da jeg i så fald altid ville skulle vedligeholde min funktion når der kommer nye fremmede kontroller på formen. Jeg tror du har ret, der findes nok ikke nogen mulighed for det.
Selvfølgelig skal tingene håndteres forskelligt, det er netop derfor jeg ikke kan nøjes med base-class funktionens 'enable', jeg skal bruge den rigtige type og tilhørende enable funktion, men den er vist ikke tilgængelig på det niveau. Ohh well, jeg finder en anden løsning :)
type TS=Class(TLabel) Public Procedure RePaint; override; End; TForm1 = class(TForm) procedure FormClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } T:TS; end;
var Form1: TForm1;
implementation
{$R *.dfm}
Procedure TS.RePaint; Begin Caption:='Repainted'; Inherited; End;
procedure TForm1.FormClick(Sender: TObject); var T1:TLabel; begin T1:=T; T1.Repaint; end;
procedure TForm1.FormCreate(Sender: TObject); begin T:=TS.Create(self); T.Parent:=Self; T.Caption:='dtr'; end;
end.
Der vor jeg kalder functionen fra er en TLabel variabel men den kalder aligevel TS.Repaint og ikke som Vis du typecastede den TLabel.Repaint.
Mvh. Simon
Synes godt om
Ny brugerNybegynder
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.