AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Scrollbars

Ein Thema von Bjoerk · begonnen am 3. Mär 2012 · letzter Beitrag vom 3. Mär 2012
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#1

AW: Scrollbars

  Alt 3. Mär 2012, 13:32
Dem Panel ist es egal, es verkleinert sich auch, wenn dessen Inhalt nicht ganz reinpassen würde.
Die Form reagiert nur auf die Größe des Panels und da es sich in die Form einpaßt, steht es nicht über den Rand der Form drüber und deshalb braucht die Form keine Scrollbar anzuzeigen.

Du könntest höchstes dem Panel aber auch eine Minimalgröße vorgeben.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Scrollbars

  Alt 3. Mär 2012, 14:00
Eine Panelmindeströße vorgeben bringt da auch nix, genau das ist mein Problem…

Bei alClient holen sich die Steuerelemente die Größe vom übergeordneten Container, die Form also von Screen, das Panel von Form usw.. Der Form ist es dabei egal, was auf dem Panel so drauf ist.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.961 Beiträge
 
Delphi 12 Athens
 
#3

AW: Scrollbars

  Alt 3. Mär 2012, 14:41
Also erstens: Warum nimmst du für das untere Panel alClient, wenn du genau das gar nicht willst? Das ist dafür gedacht, dass der vorhandene Platz ausgefüllt wird. Du willst aber eine bestimmte Größe. Wenn du nicht alClient nimmst, funktionieren auch die Scrollbars.

Zweitens: Du kannst die Scrollbox ja auf das Panel drauf legen und dahinein die Elemente, die zu groß für das Formular sein könnten.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Scrollbars

  Alt 3. Mär 2012, 14:50
Ja, ich weiß, ihr habt da alle Recht. Mich bitte auch jetzt nicht falsch verstehen. Ich hab meine Gründe, warum ich das so frage. Normalerweise arbeite ich constraints usw., zur Not mit einer Scrollbox und fertig. Ich hab‘ ca. 100 Forms, bei denen das so ist, wie oben beschrieben. Wenn ich da jetzt anfange zu ändern, wird‘ ich nie mehr fertig. Dann hab ich in OnResize auch noch einiges stehen. Meine Notlösung sah bis bisher so aus:

Delphi-Quellcode:
procedure MainFormPaint;
var
  ATop, ALeft, AWidth, AHeight, SWidth, SHeight, SLeft, STop, T: integer;
begin
  ALeft:= Application.MainForm.Left;
  ATop:= Application.MainForm.Top;
  AWidth:= Application.MainForm.Width;
  AHeight:= Application.MainForm.Height;

  SWidth:= Screen.WorkAreaWidth;
  SHeight:= Screen.WorkAreaHeight;
  STop:= Screen.WorkAreaTop;
  SLeft:= Screen.WorkAreaLeft;

  if ((SWidth-AWidth) < 0) or ((SHeight-AHeight) < 0) then
  begin
    Application.MainForm.HorzScrollBar.Range:= AWidth;
    Application.MainForm.VertScrollBar.Range:= AHeight;
    AWidth:= SWidth;
    AHeight:= SHeight;
  end;

  T:= ALeft;
  while (T+SLeft+AWidth) > SWidth do Dec(T);
  if T < SLeft then T:= SLeft;
  ALeft:= T;

  T:= ATop;
  while (T+STop+AHeight) > SHeight do Dec(T);
  if T < STop then T:= STop;
  ATop:= T;

  Application.MainForm.SetBounds(ALeft, ATop, AWidth, AHeight);
end;
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Scrollbars

  Alt 3. Mär 2012, 21:39
Ich werd's jetzt doch ändern. So geht's eigentlich ganz gut mit relativ wenig Aufwand. Statt des einen Panels dann halt doch eine Scrollbox. Den fehlenden Text kann ich mir über eine Suchen und Ersetzenroutine vor Formcreate erst mal reinschaffen. Der Compiler bleibt ja dann später an der entsprechen Stelle stehen und ich kann's dann weiter ändern.

Delphi-Quellcode:
procedure TForm1.PageControlChange(Sender: TObject);
begin
  with PageControl do
  begin
    if ActivePage = TabSheet1 then
    begin
      Width:= GroupBox1.Width+40;
      Height:= GroupBox1.Height+50;
    end;
    if ActivePage = TabSheet2 then
    begin
      Width:= GroupBox4.Width+40;
      Height:= GroupBox4.Height+50;
    end;
    Self.ClientWidth:= Width + 2*Left;
    Self.ClientHeight:= Height + 2*Top + StatusBar.Height + Panel2.Height;
  end;
  with ScrollBox.HorzScrollBar do if IsScrollBarVisible then Position:= 0;
  with ScrollBox.VertScrollBar do if IsScrollBarVisible then Position:= 0;
  UmspeichernNachMaske(Sender);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Scaled:= false;
  PageControl.Align:= alNone;
  PageControl.ActivePage:= TabSheet1;
  Constraints.MaxWidth:= Screen.WorkAreaWidth;
  Constraints.MaxHeight:= Screen.WorkAreaHeight;
  AbelHelp1.Execute;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:33 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