Delphi-PRAXiS
Seite 1 von 2  1 2   

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/)
-   -   Delphi Dynamische Scrollbox (https://www.delphipraxis.net/201317-dynamische-scrollbox.html)

delphicoder123 11. Jul 2019 15:00

Dynamische Scrollbox
 
Hallo,
in meinem Formular habe ich eine Scrollbox. Das Formular hat die Höhe vom Bildschirm.
Innerhalb der Scrollbox habe ich ein TImage (Scrollbox und TImage sind alClient ausgerichtet).
Die Scrollbox soll nur eine Scrollbar haben, wenn der erzeugte Inhalt nicht auf das Image draufpasst. Inhalte sind Zeichnungen in Form von Rechtecken.
Die Scrollbox soll auch nur so hoch sein, wie der erzeugte Inhalt, sollte aber mindestens X Pixel hoch sein.


Das Schwierige wird sein, die Scrollbar ein und auszublenden. Wie kann ich das realisieren?

peterbelow 11. Jul 2019 17:24

AW: Dynamische Scrollbox
 
Zitat:

Zitat von delphicoder123 (Beitrag 1436516)
Hallo,
in meinem Formular habe ich eine Scrollbox. Das Formular hat die Höhe vom Bildschirm.
Innerhalb der Scrollbox habe ich ein TImage (Scrollbox und TImage sind alClient ausgerichtet).
Die Scrollbox soll nur eine Scrollbar haben, wenn der erzeugte Inhalt nicht auf das Image draufpasst. Inhalte sind Zeichnungen in Form von Rechtecken.
Die Scrollbox soll auch nur so hoch sein, wie der erzeugte Inhalt, sollte aber mindestens X Pixel hoch sein.


Das Schwierige wird sein, die Scrollbar ein und auszublenden. Wie kann ich das realisieren?

Setze Align für das TImage auf alNone und left und top auf 0. Du mußt dann image.width und height and die Größe des Inhalts anpassen, das geht nicht von selbst. Dabei mußt Du nicht nur das TImage selbst anpassen sondern auch image.picture.bitmap width und height, das ist nicht automatisch. Die Scrollbox bekommt scrollbars when ihr Inhalt über die Grenzen der Client area hinausreicht, das ist automatisch.

Andreas L. 12. Jul 2019 09:55

AW: Dynamische Scrollbox
 
Zitat:

Zitat von peterbelow (Beitrag 1436531)
Du mußt dann image.width und height and die Größe des Inhalts anpassen, das geht nicht von selbst.[/B]

TImage hat die Eigenschaft AutoSize. Width & Height muss also nicht selbst angepasst werden.

peterbelow 12. Jul 2019 13:55

AW: Dynamische Scrollbox
 
Zitat:

Zitat von Andreas L. (Beitrag 1436551)
Zitat:

Zitat von peterbelow (Beitrag 1436531)
Du mußt dann image.width und height and die Größe des Inhalts anpassen, das geht nicht von selbst.[/B]

TImage hat die Eigenschaft AutoSize. Width & Height muss also nicht selbst angepasst werden.

Stimmt, man muss nur die Größe der Bitmap anpassen.

delphicoder123 22. Jul 2019 11:48

AW: Dynamische Scrollbox
 
Zitat:

Zitat von Andreas L. (Beitrag 1436551)
Zitat:

Zitat von peterbelow (Beitrag 1436531)
Du mußt dann image.width und height and die Größe des Inhalts anpassen, das geht nicht von selbst.[/B]

TImage hat die Eigenschaft AutoSize. Width & Height muss also nicht selbst angepasst werden.

Hallo,
wenn ich das TImage auf align none, top und left auf 0 setze, dann passt sich die Breite und Höhe des TImage nicht
anhand des Inhalts an. Es behält die gleiche Größe.
Das TImage ist innerhalb der Scrollbox.
Eine Bitmap verwende ich in meinem Formular nicht.

delphicoder123 22. Jul 2019 21:59

AW: Dynamische Scrollbox
 
Das wäre der zugehörige Code dazu.

Delphi-Quellcode:
an I implement this?
These questions are so important.

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    Image1: TImage;
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
  left:=5;
  top:=10;
  form1.Width:=Screen.Width-15;
  form1.Height:=Screen.Height-50;
  ScrollBox1.Align:=alClient;
  image1.Left:=0;
  image1.Top:=0;
  image1.Width:=ScrollBox1.Width;
  image1.Height:=ScrollBox1.Height;
  image1.Canvas.Rectangle(1400,50,2000,100);
end;

end.

peterbelow 23. Jul 2019 11:37

AW: Dynamische Scrollbox
 
Zitat:

Zitat von delphicoder123 (Beitrag 1437247)
Zitat:

Zitat von Andreas L. (Beitrag 1436551)
Zitat:

Zitat von peterbelow (Beitrag 1436531)
Du mußt dann image.width und height and die Größe des Inhalts anpassen, das geht nicht von selbst.[/B]

TImage hat die Eigenschaft AutoSize. Width & Height muss also nicht selbst angepasst werden.

Hallo,
wenn ich das TImage auf align none, top und left auf 0 setze, dann passt sich die Breite und Höhe des TImage nicht
anhand des Inhalts an. Es behält die gleiche Größe.
Das TImage ist innerhalb der Scrollbox.
Eine Bitmap verwende ich in meinem Formular nicht.

Doch, wenn Du auf dem image.canvas zeichnest dann verwendest Du eine Bitmap, allerdings eine, die TImage für dich anlegt (über image.picture.bitmap kann man darauf zugreifen). du mußt die Größe dieser Bitmap ändern wenn Du mehr Zeichenfläche brauchst. Ob image.autosize das mnitbekommt mußt Du testen, kann sein, dass es nur zuschlägt, wenn man eine Grafik aus einer Datei lädt. Oh, und Image.stretch und image.center sollten false sein.

delphicoder123 23. Jul 2019 14:31

AW: Dynamische Scrollbox
 
Liste der Anhänge anzeigen (Anzahl: 1)
Was mache ich falsch?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    Image1: TImage;
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
  ScrollBox1.Align:=alClient;
  ScrollBox1.HorzScrollBar.Visible:=true;
  image1.Align:=alnone;
  image1.Left:=0;
  image1.Top:=0;
  image1.Stretch:=false;
  image1.center:=false;
  image1.Picture.Bitmap.Width:=900;
  image1.Picture.Bitmap.Height:=900;
  image1.Canvas.Rectangle(600,600,800,800);
end;

end.

EWeiss 23. Jul 2019 14:34

AW: Dynamische Scrollbox
 
Wo ist das Bitmap für Image1 das du geladen hast? Sehe keins..

gruss

delphicoder123 23. Jul 2019 15:02

AW: Dynamische Scrollbox
 
Ich weiß nicht, wie das geht


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 Uhr.
Seite 1 von 2  1 2   

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