Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist (https://www.delphipraxis.net/173795-screenshot-eines-fensters-machen-dessen-inhalt-groesser-formgroesse-ist.html)

Helmi 17. Mär 2013 10:21

AW: ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist
 
Zitat:

Zitat von Andreas L. (Beitrag 1207753)
Wie sieht das Ergebnis aus wenn du PRF_ERASEBKGND aus dem SendMessage-Aufruf entfernst?

Bringt leider nichts...

Zitat:

Zitat von Perlsau (Beitrag 1207754)
Das geht meines Wissens nach nicht, weil die nicht sichtbaren Teile deines Programm-Fensters nicht in Windows als Bitmap existieren, sondern erst beim Scrollen im Programm neu gezeichnet werden. Genauso wenig kannst du den Inhalt eines gerade nicht sichtbaren TabSheets einer Pagecontrol-Komponente sehen oder das, was in einem nicht aufgeklappten Menü verborgen ist. Bildschirmaufnahmen lesen lediglich den Bildschirmspeicher aus, und dort ist eben nur das drin, was gerade hineingezeichnet wurde.

Das klingt plausibel


Zitat:

Zitat von Perlsau (Beitrag 1207754)
Die Lösung besteht darin, zwei Bildschirmfotos zu machen und die dann zusammenzufügen. Das kann man, wenn man das häufiger benötigt, natürlich automatisieren, will sagen: von einer Software erledigen lassen.

Das wäre dann die einzige Lösung.
Leider ist das Fenster so groß, dass ich nicht nur horizontal sondern auch vertikal scrollen müsste und dann die Bilder dementsprechend zusammensetzen muss

stahli 17. Mär 2013 12:06

AW: ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist
 
Ich habe das mal so gemacht (vor Jahren), finde das aber leider nicht mehr.
Es wurde halt eine große bmp erstellt.

Helmi 17. Mär 2013 12:11

AW: ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist
 
Zitat:

Zitat von stahli (Beitrag 1207770)
Ich habe das mal so gemacht (vor Jahren), finde das aber leider nicht mehr.
Es wurde halt eine große bmp erstellt.

Das wär mir egal
könntest du auf dem Dachboden (oder Keller) nach dem Code suchen? :-)

stahli 17. Mär 2013 12:48

AW: ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist
 
Ich hatte doch noch einen Tresor im Garten vergraben, den musste ich nur noch ausbuddeln und aufschweißen... ;-)

Musst Du mal schauen, ob Dich das auf den Weg bringen kann:
- DesignerBoxTournament ist eine Scrollbox
- Designer ist ein Panel in der Scrollbox, das den Kontent enthält (und der Gesamtgröße entspricht)
- ImageCopy ist ein TImage


Delphi-Quellcode:
procedure TFormTurniere.sButtonCopyClick(Sender: TObject);
var
  DR, SR: TRect;
  X, Y: Integer;
begin
  Beep;
  ImageCopy.Picture.Bitmap.Width := DesignerBoxTournament.Designer.Width;
  ImageCopy.Picture.Bitmap.Height := DesignerBoxTournament.Designer.Height;
  DR.Left := 0;
  DR.Top := 0;
  DR.Right := ImageCopy.Picture.Bitmap.Width;
  DR.Bottom := ImageCopy.Picture.Bitmap.Height;
  ImageCopy.Canvas.FillRect(DR);
  Y := 0;
  while Y < DesignerBoxTournament.Designer.Height do
  begin
    X := 0;
    while X < DesignerBoxTournament.Designer.Width do
    begin
      DesignerBoxTournament.HorzScrollBar.Position := X;
      DesignerBoxTournament.VertScrollBar.Position := Y;
      //ShowDummy(DesignerBoxTournament); // ... baute den Inhalt auf
      Application.ProcessMessages;
      Sleep(500);
      DR.Left := X;
      DR.Top := Y;
      DR.Right := X + DesignerBoxTournament.ClientWidth;
      DR.Bottom := Y + DesignerBoxTournament.ClientHeight;
      SR.Left := X;
      SR.Top := Y;
      SR.Right := X + DesignerBoxTournament.ClientWidth;
      SR.Bottom := Y + DesignerBoxTournament.ClientHeight;
      ImageCopy.Canvas.CopyRect(DR, DesignerBoxTournament.Designer.Canvas, SR);
      Inc(X, DesignerBoxTournament.ClientWidth);
    end;
    Inc(Y, DesignerBoxTournament.ClientHeight);
  end;
  ImageCopy.Picture.Bitmap.SaveToFile(Path + 'Copy.bmp');
end;

Helmi 17. Mär 2013 13:03

AW: ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist
 
Zitat:

Zitat von stahli (Beitrag 1207774)
Ich hatte doch noch einen Tresor im Garten vergraben, den musste ich nur noch ausbuddeln und aufschweißen... ;-)

In was für einer gefährlichen Gegend Deutschlands wohnst du denn? :-)

Zitat:

Zitat von stahli (Beitrag 1207774)
Musst Du mal schauen, ob Dich das auf den Weg bringen kann:
- DesignerBoxTournament ist eine Scrollbox
- Designer ist ein Panel in der Scrollbox, das den Kontent enthält (und der Gesamtgröße entspricht)
- ImageCopy ist ein TImage


Delphi-Quellcode:
procedure TFormTurniere.sButtonCopyClick(Sender: TObject);
var
  DR, SR: TRect;
  X, Y: Integer;
begin
  Beep;
  ImageCopy.Picture.Bitmap.Width := DesignerBoxTournament.Designer.Width;
  ImageCopy.Picture.Bitmap.Height := DesignerBoxTournament.Designer.Height;
  DR.Left := 0;
  DR.Top := 0;
  DR.Right := ImageCopy.Picture.Bitmap.Width;
  DR.Bottom := ImageCopy.Picture.Bitmap.Height;
  ImageCopy.Canvas.FillRect(DR);
  Y := 0;
  while Y < DesignerBoxTournament.Designer.Height do
  begin
    X := 0;
    while X < DesignerBoxTournament.Designer.Width do
    begin
      DesignerBoxTournament.HorzScrollBar.Position := X;
      DesignerBoxTournament.VertScrollBar.Position := Y;
      //ShowDummy(DesignerBoxTournament); // ... baute den Inhalt auf
      Application.ProcessMessages;
      Sleep(500);
      DR.Left := X;
      DR.Top := Y;
      DR.Right := X + DesignerBoxTournament.ClientWidth;
      DR.Bottom := Y + DesignerBoxTournament.ClientHeight;
      SR.Left := X;
      SR.Top := Y;
      SR.Right := X + DesignerBoxTournament.ClientWidth;
      SR.Bottom := Y + DesignerBoxTournament.ClientHeight;
      ImageCopy.Canvas.CopyRect(DR, DesignerBoxTournament.Designer.Canvas, SR);
      Inc(X, DesignerBoxTournament.ClientWidth);
    end;
    Inc(Y, DesignerBoxTournament.ClientHeight);
  end;
  ImageCopy.Picture.Bitmap.SaveToFile(Path + 'Copy.bmp');
end;

Danke für den Code - ich werd mir den mal zu Herzen nehmen und versuchen das zu verstehen,
bzw. auf mein Problem anzuwenden.

Helmi 17. Mär 2013 13:13

AW: ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist
 
Muss man zu dieser Zeile noch etwas wissen?
Delphi-Quellcode:
ImageCopy.Canvas.CopyRect(DR, DesignerBoxTournament.Designer.Canvas, SR);
Ein Panel (Designer) hat doch kein Canvas oder hab ich was übersehen?

stahli 17. Mär 2013 13:34

AW: ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist
 
Den Canvas hatte ich (glaube ich) extra veröffentlicht.
Du müsstest evtl. auch den Canvas der Scrollbox oder des Formulars nehmen können.

Genauer kann ich das schlecht nachvollziehen weil meine Aktivitäten dazu schon länger her sind.

Helmi 17. Mär 2013 14:09

AW: ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist
 
Im Grunde genommen hab ich deinen Code verstanden.

Wenn ich das nun auf mein eigentliches Problem ummünze dann hab ich aber ein anderes Problem.

Dein Code weiss von Anfang an, wie groß das Ursprüngliche ist und scrollt dann über X und Y an die Endposition hin.

Wenn ich aber einen ScreenShot des fremden Fensters machen will, weiss ich nicht, wie groß das Gesamte ist.
Ich müsste also wissen, wie weit ich scrollen muss. - Ich finde aber nichts um rauszufinden, ob die Scrollbalken
angezeigt werden, oder wie weit ich scrollen muss.

Wenn ich das wüsste, dann könnt ich deinen Code darauf anwenden.

stahli 17. Mär 2013 14:28

AW: ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist
 
zwei Möglichkeiten:

1) Scrolle einfach immer weiter und teste, wie weit Position tatsächlich verschoben wurde.
Die Differnz zur letzten Position ist dann der neue Bereich.

2) Schau Dir mal die Eigenschaften der Scrollbars an.
Die wissen auf jeden Fall, wie groß die Bereiche in X- und Y-Richtung sind (irgendwas miz Range oder so).

Helmi 17. Mär 2013 14:36

AW: ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist
 
mmh - aber wie bekomm ich die Position raus?
Ich bin ja in einem fremden Fenster


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr.
Seite 2 von 3     12 3      

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