Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bitmap von Scrollbox (https://www.delphipraxis.net/51275-bitmap-von-scrollbox.html)

arbu man 9. Aug 2005 15:55


Bitmap von Scrollbox
 
Hi,

Wie kann ich den Inhalt einer Scrollbox mit allen komponenten die sich in der scrollbox befinden in ein Bitmap einlesen.
Zwar kann ich über das Handle der Scrollbox einen Scrennshort der Box erstellen aber dieser geht nur bis einschließlich der Scrollbar der Scrollbox nicht aber bis zu eigentlichen Ende.

mfg, arbu :wall:

Khabarakh 9. Aug 2005 16:52

Re: Bitmap von Scrollbox
 
Versuch es mal mit PaintControls, aber ich kann nur raten, ob du damit den gesamten Inhalt bekommst.

arbu man 9. Aug 2005 18:49

Re: Bitmap von Scrollbox
 
Eine Scrollbox scheint kein PaintControls aber Sie ist doch ein TWinControl :gruebel:

Klappt leider nicht :wall: :wall:

Khabarakh 9. Aug 2005 19:42

Re: Bitmap von Scrollbox
 
Ups, das ist ja protected :mrgreen: .
PaintTo ist zwar public, aber das wird wohl auch nur den sichtbaren Teil zeichnen.
Du könntest entweder versuchen, die Sichtbarkeit von PaintControls zu erhöhen, oder, was sicher funktioniert, alle Komponenten einzeln per PaintTo zu zeichnen.

arbu man 9. Aug 2005 20:43

Re: Bitmap von Scrollbox
 
Ah das mit paintto geht auch nur bis zur scrollbar

:wall: :wall: :wall:

omata 9. Aug 2005 22:03

Re: Bitmap von Scrollbox
 
Moin,

versuch doch mal folgendes...

Delphi-Quellcode:
procedure ScrollBoxToCanvas(ScrollBox:TScrollBox; Canvas:TCanvas);
var saveY, Y, SchrittY:integer;
    saveX, X, SchrittX:integer;
    abbruchY, abbruchX:boolean;
    saveBorderStyle:TBorderStyle;
begin
  saveY:=ScrollBox.VertScrollBar.Position;
  saveX:=ScrollBox.HorzScrollBar.Position;
  saveBorderStyle:=ScrollBox.BorderStyle;

  ScrollBox.BorderStyle:=bsNone;
  ScrollBox.VertScrollBar.Position:=0;
  Y:=0;
  SchrittY:=ScrollBox.Height-20;
  repeat
    ScrollBox.HorzScrollBar.Position:=0;
    X:=0;
    SchrittX:=ScrollBox.Width-20;
    abbruchY:=(ScrollBox.VertScrollBar.Position <> Y);
    repeat
      abbruchX:=(ScrollBox.HorzScrollBar.Position <> X);
      ScrollBox.Refresh;
      ScrollBox.PaintTo(
        Canvas,
        ScrollBox.HorzScrollBar.Position,
        ScrollBox.VertScrollBar.Position
      );
      ScrollBox.HorzScrollBar.Position:=ScrollBox.HorzScrollBar.Position + SchrittX;
      X:=X+SchrittX;
    until abbruchX;
    ScrollBox.VertScrollBar.Position:=ScrollBox.VertScrollBar.Position + SchrittY;
    Y:=Y+SchrittY;
  until abbruchY;

  ScrollBox.VertScrollBar.Position:=saveY;
  ScrollBox.HorzScrollBar.Position:=saveX;
  ScrollBox.BorderStyle:=saveBorderStyle;
end;
...nicht schön, aber selten!

MfG
Thorsten

arbu man 9. Aug 2005 22:36

Re: Bitmap von Scrollbox
 
Danke für den Code er funktioniert super :thumb:

schönen abend eh moin noch :mrgreen:

Cordt 8. Feb 2021 22:09

AW: Bitmap von Scrollbox
 
Hallo miteinander,

ich nutze den oben stehenden Code, allerdings habe ich 2 Probleme mit der Anzeige/dem Druck von bestimmten Elementen.

TCheckbox
Die Beschriftungen der Checkboxen, welche aktuell nicht auf dem Bildschirm angezeigt werden, werden (teilweise) gar nicht angezeigt. Teilweise heißt, nicht in jedem Fall. Aber wenn etwas angezeigt wird, dann alles und umgekehrt. Hier vermute ich, dass es an der Geschwindigkeit des Prozesses liegt. Wenn es zu schnell geht, dann wird nichts angezeigt, wenn das System gerade langsam ist, dann klappt es. Das teste und berichte ich noch.
Sollte jemand eine andere Idee oder das Wissen, woran es liegt, haben, dann bin ich darüber auch dankbar^^

TMemo
Ich habe ein Memo im Anzeigebereich, dessen Randbereiche rechts und links Teile der Pictures aus dem Image darunter anzeigt, wenn gedruckt wird. Hier hab ich noch keine Idee dazu.

Beste Grüße und vorausschickend schon mal danke für alle Antworten
Cordt

Cordt 15. Feb 2021 09:40

AW: Bitmap von Scrollbox
 
TMemo
Hier lag es an den Scrollbars. Der Bereich der Scrollbars war der, der mit anderen Dingen übermalt wurde. Da hier sozusagen eh nur ein Screenshot gemacht wird und kein weiterer Platz für zusätzlichen Text aus der Scrollbox zur Verfügung steht, habe ich beim ScrollBoxToCanvas vor dem .PaintTo den Stand der Scrollbars gespeichert, dann Memo.Scrollbars := ssNone gesetzt und danach wieder hergestellt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 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