Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#18

Re: Gemeinsame OnClick - Behandlung

  Alt 5. Dez 2003, 11:54
Zitat von himitsu:
Und ich bleibe dann wohl doch beim alten (kommt ja bei mir selten genug vor),
da weiß/sehe ich wenigstens noch besser was dort passieren soll.
Hi himitsu,

ich habe meine ad hoc-Lösung ein bisschen überarbeitet
Delphi-Quellcode:
type
  TTypeKinds = set of TTypeKind;

procedure SetPropIfPossible(const AnInstance: TObject;
  const APropName: string; const ANeededTypes: TTypeKinds;
  const AValue: Variant); overload;
begin
  Assert( Assigned(AnInstance) );

  if IsPublishedProp(AnInstance, APropName) and
    (PropType(AnInstance, APropName) in ANeededTypes) then
      SetPropValue(AnInstance, APropName, AValue);
end;

procedure SetPropIfPossible(const AnInstance: TObject;
  const APropName, AValue: string); overload;
begin
  SetPropIfPossible(AnInstance, APropName, [tkWChar, tkLString, tkWString],
    AValue);
end;

procedure SetPropIfPossible(const AnInstance: TObject;
  const APropName: string; const AValue: Boolean); overload;
begin
  SetPropIfPossible(AnInstance, APropName, [tkEnumeration], AValue);
end;

procedure SetPropIfPossible(const AnInstance: TObject;
  const APropName: string; const AValue: Integer); overload;
begin
  SetPropIfPossible(AnInstance, APropName, [tkInteger], AValue);
end;
so dass man die Lösung relativ simpel anwenden kann (vielleicht will sich jmd mal die Mühe machen, das ganze zu erweitern und in die Code-Library zu stellen?)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetPropIfPossible(Sender, 'Width', 200);
  SetPropIfPossible(Sender, 'Enabled', False);
  SetPropIfPossible(Sender, 'Caption', 'What about RTTI?');
end;
Ich muss sagen, dass ich die Lösung deutlich Übersichtlicher finde, als zB diese:
Delphi-Quellcode:
If Sender.ClassType = TButton Then Begin
  TButton(Sender).Enabled := True;
  TButton(Sender.Width:= 200;
  Tbutton(Sender).Caption:= 'What about RTTI?';
End Else If Sender.ClassType = TBitBtn Then Begin
  TBitBtn(Sender).Enabled := True;
  TBitBtn(Sender.Width:= 200;
  TBitBtn(Sender).Caption:= 'What about RTTI?';
End Else If Sender.ClassType = TEdit Then Begin
  TEdit(Sender).Enabled := True;
  TEdit(Sender).Width:= 200;
End Else If Sender.ClassType = TMemo Then Begin
  TMemo(Sender).Enabled := True;
  TMemo(Sender).Width:= 200;
End;
Darüber hinaus funktioniert sie mit jeder Delphi-Komponente, die im OI die entsprechenden Eigenschaften besitzt...
gruß, choose
  Mit Zitat antworten Zitat