![]() |
TPropertyEditor
Moin,
ich habe schon ALLES hier im Forum gelesen was TPropertyEditor angeht, falls gleich kommt "Suche benutzen", hab auch deren Links zu anderen (englischen) Seiten gelesen usw... Aber irgendwie kapier ichs immernoch nicht, mal steht da was von 2 Packages und in extra unit packen usw, aber irgendwie werd ich da nicht schlau draus, auch nicht aus den Methoden die man da überschreibt, z.b diese:
Delphi-Quellcode:
Kann mir jemand genau beschreiben wie ich einen einfach Info Dialog erstelle, den ich vom OI aus aufrufen kann?
function TFileNameProperty.GetAttributes: TPropertyAttributes;
begin Result := [paDialog] end {GetAttributes}; |
Re: TPropertyEditor
wann soll denn der Info-Dialog kommen? bei einem Doppelklick auf die Komponente (wäre ein Component-Editor) oder beim klick auf "..." bei einem Property. Und wozu einen Info-Dialog? Property-Editoren sind dazu da properties zu verändern...
Am besten du sagst mal was du überhaupt vorhast... |
Re: TPropertyEditor
moin SirThornberry,
ich möchte natürlich keinen Info-Dialog, aber ich denke soetwas wäre vielleicht am einfachsten zu erklären.... Also es ist so, ich brauche eine Property die ca so aussieht: Zitat:
So sollte die ListView ca aussehen: ![]() Hast du ne Idee wie ich das machen könnte? |
Re: TPropertyEditor
also gehts um einen PropertyEditor.
Am besten du legst dir erstmal ein neues Form an für deinen Propertyeditor und baust dieses so das es voll funktionsfähig ist. Wenn du dies fertig hast kannst du dann daran gehen das ganze als property-editor zu registrieren.
Delphi-Quellcode:
unit uPropertyEditors;
interface uses DesignEditors, DesignIntf, TheUnitOfYourComponent; type TYourPropertyEditor = class(TPropertyEditor) public procedure Edit; override; function GetAttributes: TPropertyAttributes; override; end; implementation procedure Register; begin //If it's an Integer Property RegisterPropertyEditor(TypeInfo(integer), TYourComponent, 'YourPropertyName', TYourPropertyEditor); end; procedure TYourPropertyEditor.Edit; var LObj: TYourComponent; LEditForm: TYourEditForm; begin if (GetComponent(0) is TYourComponent) then begin LObj := TYourComponent(GetComponent(0)); //Now You can do something with LObj //For exampel you can show a form for Editing { LEditForm := TYourEditForm.Create(nil); if LEditForm.ShowModal = mrOK then begin LObj.YourPropertyName := EditingForm.Value; //If the Property has Changed Self.Designer.Modified; end; LEditForm.Free; } end; end; function TYourPropertyEditor.GetAttributes: TPropertyAttributes; begin Result := [paMultiSelect, paDialog, paRevertable]; end; end. |
Re: TPropertyEditor
Besten Dank :)
Edit: Schaut super aus, danke für deine Mühe :) Noch ein paar Fragen: wozu ist der erste Parameter von "RegisterPropertyEditor"? eine Property könnte ja auch strings UND integer enthalten, oder? Was ist GetComponent(), bzw was ist die 0 darin? in der Hilfe steht das es ein Index sei, aber auf was bezieht sich der? MfG |
Re: TPropertyEditor
Mit dem "GetComponent(0)" wird die Instanz zur aktuellen Componente geholt. Wenn du mehrere Componenten markierst solltest du über "GetComponent" alle markierten Componenten ansprechen können. In diesem beispiel wird nur die erste Componenten editiert. Über "PropCount" solltest du die Anzahl der markierten Componenten herausfinden können. Der Erste Parameter bei "RegisterPropertyEditor" gibt den Typ an. Je nach dem um welchen Typ es sich handelt musst du da eben was anderes hinschreiben (die Hilfe ist dein Freund)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz