Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   [XE10] Designer, Properties bedingt im Inspektor verstecken (https://www.delphipraxis.net/189039-%5Bxe10%5D-designer-properties-bedingt-im-inspektor-verstecken.html)

4dk2 28. Apr 2016 08:03

[XE10] Designer, Properties bedingt im Inspektor verstecken
 
Guten Morgen zusammen,
gibt es eine Möglichkeit per TPropertyEditor oder TComponentEditor (oder andere), Properties bedingt im Inspektor zu verstecken?

z.b.
Delphi-Quellcode:
type
  TCompTest=class(TComponent)
  private
    FBedingung:Integer;
    FBedingtAnzeigen:String;
  published
    property Bedingung:Integer read FBedingung write FBedingung;
    property BedingtAnzeigen:string read FBedingtAnzeigen write FBedingtAnzeigen;
  end;
Ich würd jetzt gerne z.b. wenn Bedingung=1 ist BedingtAnzeigen im Objekt-Inspektor verstecken.
Geht das? :)

gemeni2005 2. Mai 2016 07:12

AW: [XE10] Designer, Properties bedingt im Inspektor verstecken
 
Hallo,
ja das geht mit dem "UnlistPublishedProperty" aus der Unit DesignIntf.
Gruß
Robert

4dk2 2. Mai 2016 13:22

AW: [XE10] Designer, Properties bedingt im Inspektor verstecken
 
Also die Lösung ist bei mir:
Delphi-Quellcode:
function TSimpleObject_PropertyEditor._PropertyEditorFilterFunc(const ATestEditor: IProperty): Boolean;
begin
  result:=true;
  if ATestEditor.GetName='Daten2' then //name des properties das bedingt vesteckt werden soll...
    if not GetSimpleObject.Show then //soll das property angezeigt werden oder nicht...
      result:=false;
end;

procedure TSimpleObject_PropertyEditor.GetProperties(Proc: TGetPropProc);
var
  I: Integer;
  J: Integer;
  Components: IDesignerSelections;
begin
  Components := TDesignerSelections.Create;
  for I := 0 to PropCount - 1 do
  begin
    J := GetOrdValueAt(I);
    if J <> 0 then
      Components.Add(TComponent(GetOrdValueAt(I)));
  end;
 // showmessage(inttostr(Components.Count));
  if Components.Count > 0 then
    GetComponentProperties(Components, tkProperties, Designer, Proc,_PropertyEditorFilterFunc);
end;

function TSimpleObject_PropertyEditor.GetSimpleObject: TSimpleObject;
begin
  if GetOrdValue <> 0 then
  begin
    Result := TSimpleObject(GetOrdValue);
  end
  else
  begin
    Result := nil;
  end;
end;
funktioniert generell,
Aber nachdem die Bedingung gesetzt ist, muss man im Designer einmal das Object verlassen und wieder öffnen,
damit GetProperties erneut aufgerufen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz