![]() |
AW: Änderungen im TFrame auf einem TForm verhindern.
Nee ich hatte bloß zu kurz gedacht:
Wenn ich ein Frame mit 2 Edits und einem Button drauf habe und das Frame zur Designtime auf ein Form (und dort ggf. auf ein Panel) lege, dann kann ich mir das Frame auch sparen und die 2 Edits und den Button auch direkt auf ein Panel legen. Was ich damit natürlich nicht berücksichtigte ist z.B., dass man das Frame ja an verschiedenen Stellen (mehrfach) einsetzen kann und dann kan man das auch ruhig schon zur Designtime benutzen. |
AW: Änderungen im TFrame auf einem TForm verhindern.
Zitat:
|
AW: Änderungen im TFrame auf einem TForm verhindern.
Vieleicht hilft es, wenn man statt eines Frames ein mittels ccpack erzeugtes Control verwendet?
![]() Das unterstützt allerdings kein FMX und es sind wirklich Controls die man damit erzeugt, also keine Frames, d.h. Änderungen sind ein bisschen aufwändiger, weil man immer die Packages neu compilieren muss. |
AW: Änderungen im TFrame auf einem TForm verhindern.
Zitat:
|
AW: Änderungen im TFrame auf einem TForm verhindern.
Könntest per Designtime-Package die dortigen Controls oder direkt die ganzen Frames beispielsweise verstecken.
Das könnte dir helfen, habe ich mal vor Jahren geschrieben:
Delphi-Quellcode:
unit uDesignerSelectionProtector;
////////////////////////////////////// /// Designer Selection Protector /// /// **************************** /// /// (c) 2017 Dennis Göhlert a.o. /// ////////////////////////////////////// interface uses DesignIntf, DesignEditors, System.Classes, Vcl.Controls; type TDesignerSelectionProtector = class(TSelectionEditor) private class procedure HideChildren(const ADesigner: IDesigner; const AControl: TWinControl); static; class procedure ViewChildren(const ADesigner: IDesigner; const AControl: TWinControl); static; private type TDesignerSelectionProc = procedure (const ADesigner: IDesigner; const AControl: TWinControl); TDesignerSelectionAction = record Verb: String; Proc: TDesignerSelectionProc; end; protected const FActions: array [0 .. 1] of TDesignerSelectionAction = ( ( Verb: 'Hide children'; Proc: TDesignerSelectionProtector.HideChildren ), ( Verb: 'View children'; Proc: TDesignerSelectionProtector.ViewChildren ) ); public procedure ExecuteVerb(Index: Integer; const List: IDesignerSelections); override; function GetVerb(Index: Integer): String; override; function GetVerbCount: Integer; override; end; procedure Register; implementation procedure Register; begin RegisterSelectionEditor(TWinControl, TDesignerSelectionProtector); end; { TDesignerSelectionLocker } procedure TDesignerSelectionProtector.ExecuteVerb(Index: Integer; const List: IDesignerSelections); var LSelectionIndex: Integer; LSelection: TPersistent; begin inherited; for LSelectionIndex := 0 to Pred(List.Count) do begin LSelection := List[LSelectionIndex]; if LSelection is TWinControl then begin FActions[Index].Proc(Designer, LSelection as TWinControl); end; end; Designer.Modified; end; function TDesignerSelectionProtector.GetVerb(Index: Integer): String; begin Result := FActions[Index].Verb; end; function TDesignerSelectionProtector.GetVerbCount: Integer; begin Result := Length(FActions); end; class procedure TDesignerSelectionProtector.HideChildren(const ADesigner: IDesigner; const AControl: TWinControl); var LIndex: Integer; begin for LIndex := 0 to Pred(AControl.ControlCount) do begin AControl.Controls[LIndex].SetDesignVisible(False); end; end; class procedure TDesignerSelectionProtector.ViewChildren(const ADesigner: IDesigner; const AControl: TWinControl); var LIndex: Integer; begin for LIndex := 0 to Pred(AControl.ControlCount) do begin AControl.Controls[LIndex].SetDesignVisible(True); end; end; end. |
AW: Änderungen im TFrame auf einem TForm verhindern.
Zitat:
* TDesignerSelectionProc muss als "of object" deklariert werden EDIT: Nein, muss es nicht. Nur Delphi 2007 mag das so nicht. Delphi 10.3 compiliert ohne "of object". * FActions muss als "array[0..1]" deklariert werden. Aber Danke, das werde ich mir mal genauer ansehen. |
AW: Änderungen im TFrame auf einem TForm verhindern.
OK, funktioniert, wenn auch etwas gewöhnungsbedürftig.
Ich überlege gerade, ob man mit einem IDesinger Interface nicht auch die Auswahl von Controls auf einem Frame verhindern kann. Müsste eigentlich gehen... Auf jeden Fall mal Danke für diesen Startpunkt. |
AW: Änderungen im TFrame auf einem TForm verhindern.
Zitat:
|
AW: Änderungen im TFrame auf einem TForm verhindern.
Zitat:
Die Auswahl kannst du ja über
Delphi-Quellcode:
abfangen. Nur leider hängt sich die IDE dort immer auf, wenn du selbst eine änderung an der Auswahl vornimmst. Und das OBWOHL ich da Schutzmechanismen wie einen Lockcount eingeführt habe.
IDesignNotification.SelectionChanged
Wie gesagt, hab es gestern auf die Schnelle nicht mehr hinbekommen. Aber wäre dennoch an der Lösung interessiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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