Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Repaint beim Form-Resize beschränken (https://www.delphipraxis.net/164692-repaint-beim-form-resize-beschraenken.html)

G-Baumstamm 27. Nov 2011 09:47

AW: Repaint beim Form-Resize beschränken
 
Heyhey,

Zitat:

Zitat von Bummi (Beitrag 1137979)
Pagecontrol war jetzt das Stichwort...
Wir hatten bei einem Projekt mit GDI+-Darstellung von Maschinendaten durch eigen Komponenten auch ein massives Flickerproblem mit PageControls. Wir haben es an den Stellen auf ein Panel mit einem eigenen Tabcontrol umgestellt, in welches Rahmenlose Forms (alClient) geladen wurden, beim Tabwechsel mit BringToFront ensprechend angezeigt. Das geflickere war damit Geschichte.


Danke für den Tip, das werde ich jetzt so machen ! Funktioniert soweit auch super, ein kleines Problem habe ich aber noch: Die einzelnen Forms habe ich einfach per CreateParented integriert, ist auch alles in Ordnung. Allerdings habe ich ihren Borderstyle natürlich auf bsNone gesetzt, was dazu führt, dass sie keine Scrollbars mehr anzeigen ... Also: jemand ne Idee wie ich die Form trotz bsNone zum anzeigen von ScrollBars bewege, wenn der Inhalt größer als die Form ist ? Eine Scrollbox möchte ich explizit nicht verwenden, da die Scrollbars der Form seltsamerweise die einzigen sind die mitgeskinnt werden & ich mir das überlagern von Windows-Scrollbars mit geskinneten um das Verhalten zu simulieren sparen möchte. Man kann doch bestimmt über CreateParams der Childform irgendwie einstellen, das sie trotzdem Scrollbars anzeigt, oder ?

Zitat:

Zitat von NamenLozer (Beitrag 1138015)
Ich hab jetzt nicht jeden Beitrag hier gelesen, aber weil eigenes GUI-Framework angesprochen wurde: Afair hat Andorra 2d sowas (wenn ich mich nicht irre sogar mit graphischem Form-Designer). Wäre vielleicht einen Blick wert.


Danke, ebenfalls interessanter Hinweis. Wenn ich Zeit & Lust habe werden ich mal versuchen mich da einzuarbeiten, für den Moment werde ich es aber weiter ohne probieren ;)

Bummi 27. Nov 2011 11:13

AW: Repaint beim Form-Resize beschränken
 
wir arbeiten grundsätzlich mit Templates, deren überladene Konstruktoren deutlich umfangreicher als das folgende Beispiel sind (unter anderem wird ein Zeiger auf die Variable (kann nil sein) der zugewiesen wird, mit übergeben die im Destruktor wenn gesetzt "genilt" wird)
Delphi-Quellcode:
  Constructor Create(AOwner:TComponent;UseAutoScroll:Boolean=false);Overload;
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

{ TForm2 }

constructor TTemplate.Create(AOwner: TComponent; AParent: TwinControl;UseAutoScroll:Boolean=false);
begin
  inherited Create(AOwner);
  if Assigned(Aparent) then
      begin
        borderStyle := bsNone;
        Align := alClient;
        Parent := AParent;
        Show;
        AutoScroll := UseAutoScroll;
      end;
end;

G-Baumstamm 27. Nov 2011 11:49

AW: Repaint beim Form-Resize beschränken
 
Das Problem besteht ja bei mir nicht in der Tatsache, dass ich die Form nicht eingebunden bekomme, sondern darin das ich trotz bsNone die Scrollbars der Form brauche (Autoscroll wird bei bsNone ignoriert).

stahli 27. Nov 2011 12:02

AW: Repaint beim Form-Resize beschränken
 
Mit embedded Forms würde es wohl funktionieren:
Delphi-Quellcode:
    FormXyz.ManualDock(TabSheetXyz, nil, alNone);
    FormXyz.Align := alClient;
    FormXyz.Show;

(Im Beispiel setze ich das Formular übrigens in ein TabSheet und da flackern die Controls auch beim Resizen - ebenso wie GroupBoxen.
Ich nutze hier embedded Forms aus Gründen der Übersichtlichkeit und Projektaufteilung.)


Embedded Forms in TabControls flackern widerum nicht. Allerdings muss man dann dynamisch beim umblättern das passende Form einblenden.
Das habe ich so getan:
Delphi-Quellcode:
procedure TFormPlan.odTabControlTournamentsPlanShowRegister(Sender: TObject);

  procedure ShowForm(F: TForm);

    procedure DoShowForm(SF, F: TForm; FC: TodFormCtrl);
    begin
      if SF = F then
      begin
        if (SF.Parent <> PanelTournamentsPlan) or (not SF.Visible) then
        begin
          SF.ManualDock(PanelTournamentsPlan, nil, alNone);
          SF.Align := alClient;
          SF.Show;
        end;
        FC.od := odTabControlTournamentsPlan.ActiveOd;
        if Assigned(SF.OnShow) then
          SF.OnShow(Self);
      end
      else
      begin
        FC.od := nil;
        SF.Close;
      end;
    end;

  begin
    CourtTournament := odTabControlTournamentsPlan.ActiveOd as TodTournament;
    DoShowForm(FormPlanMelee, F, FormPlanMelee.odFormCtrl);
    DoShowForm(FormPlanSwiss, F, FormPlanSwiss.odFormCtrl);
    DoShowForm(FormPlanGroup, F, FormPlanGroup.odFormCtrl);
    DoShowForm(FormPlanKo, F, FormPlanKo.odFormCtrl);
  end;

begin
  if odTournament = nil then
    ComboBoxTournamentSystem.ItemIndex := -1
  else if odTournament.Data_Is_Melee then
    ComboBoxTournamentSystem.ItemIndex := 0
  else if odTournament.Data_Is_Swiss then
    ComboBoxTournamentSystem.ItemIndex := 1
  else if odTournament.Data_Is_Group then
    ComboBoxTournamentSystem.ItemIndex := 2
  else if odTournament.Data_Is_Ko then
    ComboBoxTournamentSystem.ItemIndex := 3
  else
    ComboBoxTournamentSystem.ItemIndex := -1;
  case ComboBoxTournamentSystem.ItemIndex of
    0:
      ShowForm(FormPlanMelee);
    1:
      ShowForm(FormPlanSwiss);
    2:
      ShowForm(FormPlanGroup);
    3:
      ShowForm(FormPlanKo);
  else
    ShowForm(nil);
  end;
  ComboBoxTournamentSystem.Enabled := ComboBoxTournamentSystem.Text = '';
end;

Bummi 27. Nov 2011 12:30

AW: Repaint beim Form-Resize beschränken
 
Delphi-Quellcode:
sondern darin das ich trotz bsNone die Scrollbars der Form brauche (Autoscroll wird bei bsNone ignoriert).
ich habe leider kein D7 zu Testen zur Hand, der Code den ich eingestellt habe funktioniert unter unter D2010 + problemlos ....

G-Baumstamm 27. Nov 2011 12:38

AW: Repaint beim Form-Resize beschränken
 
Vielleicht hab ich das auch einfach nur falsch umgesetzt, aber auch wenn ich die Form nach der beschriebenen Methode andocke bleibt das Problem, das die Form bei bsNone keine Scrollbars erzeugt bestehen ...

Edit: Menschliches Versagen beim Umsetzen von Bummis Code, funktioniert natürlich. Aber: Das Ding macht mich trotzdem fertig ... Wenn ich das genau so mache skinnt er die Scrollbars einfach nicht mit, ändere ich zum testen bsNone zu bsSizeable habe ich stattdessen ne Form mit Header ABER dafür mit geskinnten Scrollbars ...

Bummi 27. Nov 2011 12:42

AW: Repaint beim Form-Resize beschränken
 
wenn Du den Code aus #22 erfolglos getestet hast muss ich Dich auf Montag vertrösten, im Büro habe ich noch ein paar VM's mit D7 ....

stahli 27. Nov 2011 12:52

AW: Repaint beim Form-Resize beschränken
 
Kann natürlich auch sein, dass die AlphaControls (vielleicht auch nur in Verbindung mit D7) da nicht korrekt mitspielen. Ist ja auch ein seltener Sonderfall, solch eine Anwendung.

DrUArn 27. Nov 2011 13:03

AW: Repaint beim Form-Resize beschränken
 
Hi,

habe nicht viel Ahnung vom Thema. In einem Richedit mit vielen Schreibaktionen half dies:


Delphi-Quellcode:
LockWindowUpdate(self.Handle);

  //hier alle Zeichenaktionen

LockWindowUpdate(0);
Mfg Uwe

G-Baumstamm 27. Nov 2011 13:06

AW: Repaint beim Form-Resize beschränken
 
Mhh ... was mir jetzt noch einfallen würde, wäre

1) Über CreateParams (Style) zu sagen, das auch bei bsNone Scrollbars gezeichnet werden sollen, oder

2) Den Header durch irgendeinen Trick trotz bsSizeable nicht anzeigen

3) Entweder mit den Windows-Scrollbars leben, mit dem Formheader in der anderen Form oder geskinnte Scrollbars drüberzeichnen und das Verhalten imitieren.

Wobei ich natürlich glücklicher wäre wenn 1 oder 2 irgendwie machbar sind ... ^^

Edit: Wüsste nicht wie mir LockWindowUpdate helfen sollte, wenn meine Form entweder die falschen oder gakeine Scrollbars malt ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr.
Seite 3 von 4     123 4      

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