AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi ScreenShot eines Fensters machen dessen Inhalt größer Formgröße ist

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

Ein Thema von Helmi · begonnen am 16. Mär 2013 · letzter Beitrag vom 17. Mär 2013
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#11

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

  Alt 17. Mär 2013, 10:21
Wie sieht das Ergebnis aus wenn du PRF_ERASEBKGND aus dem SendMessage-Aufruf entfernst?
Bringt leider nichts...

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


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
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#12

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

  Alt 17. Mär 2013, 12:06
Ich habe das mal so gemacht (vor Jahren), finde das aber leider nicht mehr.
Es wurde halt eine große bmp erstellt.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#13

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

  Alt 17. Mär 2013, 12:11
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?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#14

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

  Alt 17. Mär 2013, 12:48
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;
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#15

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

  Alt 17. Mär 2013, 13:03
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?

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.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#16

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

  Alt 17. Mär 2013, 13:13
Muss man zu dieser Zeile noch etwas wissen?
ImageCopy.Canvas.CopyRect(DR, DesignerBoxTournament.Designer.Canvas, SR); Ein Panel (Designer) hat doch kein Canvas oder hab ich was übersehen?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#17

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

  Alt 17. Mär 2013, 13:34
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#18

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

  Alt 17. Mär 2013, 14:09
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.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#19

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

  Alt 17. Mär 2013, 14:28
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).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#20

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

  Alt 17. Mär 2013, 14:36
mmh - aber wie bekomm ich die Position raus?
Ich bin ja in einem fremden Fenster
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:18 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