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
Bjoerk

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

Scrollbars

  Alt 3. Mär 2012, 13:52
Ich habe viele Forms mit 2 Panels, ein Panel alTop für die Speedbuttons und das andere alClient auf dem sich verschiedene Tabsheets befinden. Wenn nun das cleintArea des Bildschirm kleiner ist, z.b. bei einem Notebook, dann sollen Scrollbars angezeigt werden, da sonst der untere Bereich des Programms nicht zu sehen ist. Autoscroll der Form auf true bringt da nicht, weil das Panel alClient ist. Wie kann ich trotzdem Windows dazubrigen, mir ein paar Scrollbars zu spendieren?
  Mit Zitat antworten Zitat
Fridolin622

Registriert seit: 22. Nov 2010
4 Beiträge
 
#2

AW: Scrollbars

  Alt 3. Mär 2012, 14:00
Hi,

kannst du nicht statt nem Panel eine ScrollBox nehmen?

Gruß,

Fridolin
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Scrollbars

  Alt 3. Mär 2012, 14:12
Du könntest die Scrollleisten auch in dem Panel anzeigen. Notfalls eine ScrollBox statt des Panels oder in das Panel.
Oder eben auf das alClient verzichten.

[edit]
ups, zulange gewartet und dann den armen Fridolin übersehn (wäre auch zu praktisch, wenn wir eine RedBox hätten, welche uns warnt ).
$2B or not $2B

Geändert von himitsu ( 3. Mär 2012 um 14:14 Uhr)
  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:16
Fridolin, eine Scrollbox zeigt nur Scrollbars, wenn eine Steuerelement auf ihr, größer ist, als die selbst. Bei alClient kann das jedoch nie passieren.
  Mit Zitat antworten Zitat
Fridolin622

Registriert seit: 22. Nov 2010
4 Beiträge
 
#5

AW: Scrollbars

  Alt 3. Mär 2012, 14:26
Wieso soll das bei alClient NIE passieren können? Die Elemente in der Scrollbox sind ja nicht immer auch alClient. In deinem Fall hab ich nur die Tabsheets übersehen, die du ja wahrscheinlich auch auf alClient hast. Dann könntest du aber in jedes Tabsheet eine scrollbox legen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Scrollbars

  Alt 3. Mär 2012, 14: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.
$2B or not $2B
  Mit Zitat antworten Zitat
Bjoerk

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

AW: Scrollbars

  Alt 3. Mär 2012, 15: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.648 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Scrollbars

  Alt 3. Mär 2012, 15: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
 
#9

AW: Scrollbars

  Alt 3. Mär 2012, 15: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
 
#10

AW: Scrollbars

  Alt 3. Mär 2012, 22: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 04:25 Uhr.
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