AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Änderungen im TFrame auf einem TForm verhindern.

Änderungen im TFrame auf einem TForm verhindern.

Ein Thema von bernau · begonnen am 28. Apr 2019 · letzter Beitrag vom 30. Apr 2019
Antwort Antwort
Seite 2 von 2     12
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.560 Beiträge
 
Delphi 6 Enterprise
 
#11

AW: Änderungen im TFrame auf einem TForm verhindern.

  Alt 29. Apr 2019, 12:47
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.
Ralph
  Mit Zitat antworten Zitat
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
469 Beiträge
 
Delphi 2007 Professional
 
#12

AW: Änderungen im TFrame auf einem TForm verhindern.

  Alt 29. Apr 2019, 14:50
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.
Nicht nur das, man kann in einem Frame auch Code hinterlegen, z.B. zur Eingabevalidierung.
Thomas Mueller
  Mit Zitat antworten Zitat
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
469 Beiträge
 
Delphi 2007 Professional
 
#13

AW: Änderungen im TFrame auf einem TForm verhindern.

  Alt 29. Apr 2019, 14:53
Vieleicht hilft es, wenn man statt eines Frames ein mittels ccpack erzeugtes Control verwendet?

https://blog.dummzeuch.de/delphi-cus...ntainers-pack/

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.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
6.976 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: Änderungen im TFrame auf einem TForm verhindern.

  Alt 29. Apr 2019, 14:54
Nicht nur das, man kann in einem Frame auch Code hinterlegen, z.B. zur Eingabevalidierung.
... und auch Daten (z.B. lokale Felder, Konstanten) und verwendete Units kapseln.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
350 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#15

AW: Änderungen im TFrame auf einem TForm verhindern.

  Alt 30. Apr 2019, 05:34
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.
Dennis

Geändert von Dennis07 (30. Apr 2019 um 15:33 Uhr)
  Mit Zitat antworten Zitat
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
469 Beiträge
 
Delphi 2007 Professional
 
#16

AW: Änderungen im TFrame auf einem TForm verhindern.

  Alt 30. Apr 2019, 08:49
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:

unit uDesignerSelectionProtector;
Hm, compiliert nicht:
* 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.
Thomas Mueller

Geändert von dummzeuch (30. Apr 2019 um 09:19 Uhr)
  Mit Zitat antworten Zitat
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
469 Beiträge
 
Delphi 2007 Professional
 
#17

AW: Änderungen im TFrame auf einem TForm verhindern.

  Alt 30. Apr 2019, 09:28
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.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
6.976 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: Änderungen im TFrame auf einem TForm verhindern.

  Alt 30. Apr 2019, 09:59
Ich überlege gerade, ob man mit einem IDesinger Interface nicht auch die Auswahl von Controls auf einem Frame verhindern kann. Müsste eigentlich gehen...
Die Auswahl der Controls will ich ja vielleicht gar nicht verhindern, sondern lediglich deren Änderung. In diesem Fall vermutlich sogar nur die Änderung von Position und Größe - also das, was bei Elemente fixieren passiert. Andere Änderungen mögen ja durchaus erlaubt sein.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
350 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#19

AW: Änderungen im TFrame auf einem TForm verhindern.

  Alt 30. Apr 2019, 15:38
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.
Deshalb war da das "..2" noch. Hatte es gestern versucht, aber nicht hinbekommen. Das geht nicht so einfach, wie man es sich denkt. Evtl kannst du es ja mal reinposten, wenn du eine Lösung hast.
Die Auswahl kannst du ja über IDesignNotification.SelectionChanged 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.
Wie gesagt, hab es gestern auf die Schnelle nicht mehr hinbekommen. Aber wäre dennoch an der Lösung interessiert.
Dennis
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf