![]() |
Screenshots erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich mache Screenshots häufig um Abbildungen von Controls oder Fenstern in Help-Files einzubinden und ging dabei bisher so vor:
1) Taste "Drucken" 2) Paint öffnen 3) Mit Strg-V den Screenshot in Paint übertragen. 4) In Paint den benötigten Bereich freistellen. 5) Speichern. Problem hierbei: Wenn ich versuche, im pf4bit oder pf8bit Format zu speichern sind die Farben i.d.R. verfälscht, lasse ich das Format bei pf24bit, bläht das die Helpdateien auf. Mit z.B. Photoshop das Pixelformat ändern, bringt die gewünschten Ergebnisse, ist aber auf Dauer zeitraubend. Ich habe jetzt ein kleines Programm erstellt, das die Angelegenheit vereinfacht. Von der Exe habe ich mehrere Verknüpfungen auf dem Desktop angelegt, die mit unterschiedlichen Shortcuts aufgerufen werden und die die Exe mit unterschiedlichen Parametern aufrufen. Das Standardverhalten des Programms (ohne Parameter) ist, wie folgt: 1) Wenn beim Aufruf des Programms der Mauszeigen auf ein Control zeigt, wird dieses Control in eine Bitmap kopiert. 2) Andernfalls, wenn Mauszeiger auf ein Fenster zeigt, wird dieses Fenster kopiert. 3) Andernfalls wird der ganze Bildschirm kopiert. Anschließend wird geprüft, ob die Bitmap ohne Farbverluste in eines der Pixelformate pf1bit, pf4bit oder pf8bit umgewandelt werden kann, und ggfs. die Bitmap in das "kleinstmögliche" dieser Formate umgewandelt. Wenn eine Umwandlung ohne Farbverluste nicht möglich ist, wird die Bitmap in pf8bit umgewandelt, wobei Farbverluste auftreten, die i.d.R. visuell nicht wahrnehmbar sind, umgewandelt. Die Bitmap wird in jedem Fall ins Clipboard kopiert, und als .bmp-Datei gespeichert. Wenn dem Programm ein Parameterstring übergeben wird, hängt das Verhalten des Programms hiervon ab. Eine Erklärung der unterstützten Parameter befindet sich oberhalb der Prozedur "CopyFromScreen" im Anhang. |
AW: Screenshots erstellen
Liste der Anhänge anzeigen (Anzahl: 3)
Have you considered using PNG ?
here an example the attachment is screen shot with 1793x879 pixel and sizes are : PNG : 65.7 KB (67,300 bytes) JPG : 239 KB (245,146 bytes) BMP : 4.50 MB (4,729,074 bytes) Anhang 56470Anhang 56471 I had to archive the PNG to prevent the resizing and keep the quality and pixels. Anhang 56472 ps: for my screenshot daily usage i use GreenShot ![]() |
AW: Screenshots erstellen
Windows contains a standard program:
Ausschneiden und Skizzieren / Snipping Tool It is pretty usable and offers saving to PNG. |
AW: Screenshots erstellen
Wie wird das Programm gestartet? Die Maus zeigt ja immer auf das Icon, wenn man die Maus nutzt. Wenn man per Tastatur startet, hat sich der Focus geändert. Besser wäre es, das Programm würde ständig laufen oder meinetwegen die "Drucken" Taste Hooken, dann aber machen die zahlreichen Parameter wenig Sinn.
|
AW: Screenshots erstellen
Ja, in aktuelleren Windowsen (10/11) liegt auf der Print-Taste ein neues Standardtool von Microsoft. (früher mußte man es noch manuell starten, bzw. aus dem Appstore installieren)
* das kann den ganzen Bildschirm in die Zwischenablage kopieren, oder ein Fenster, bzw. einen freien Bereich * sowie das Ganze als Bild oder Video * Achtung, nach dem Stop werden Videos nicht automatisch gespeichert * Fotos kommen standardmäßig in die Zwischenablage, sowie ist seit Windows 11 auch das Automatisch Speichern standardmäßig aktiv * * C:\Users\%username%\Pictures\Screenshots * manuell speichern oder noch beaarbeiten -> Klick auf Popup oder in den Benachrichtigungen (falls man das nicht deaktiviert hat) *
Delphi-Quellcode:
, bzw.
Snipping Tool
Delphi-Quellcode:
(lässt sich auch im Startmenü finden)
Ausschneiden und skizzieren
* * reagiert es nicht direkt auf [Drucken], oder geht irgendwas automatisch oder nicht ... siehe im Programm, oben Rechts, in den 3 Punkten -> Einstellungen ansonsten gäbe es z.B. auch ![]() |
AW: Screenshots erstellen
Zitat:
|
AW: Screenshots erstellen
Zitat:
|
AW: Screenshots erstellen
Zitat:
|
AW: Screenshots erstellen
Danke...siehe #7.
|
AW: Screenshots erstellen
Zitat:
|
AW: Screenshots erstellen
Zitat:
|
AW: Screenshots erstellen
Zitat:
As explained, I need this mainly to include bitmaps into HelpFiles. I use the Windows Help Workshop which supports only .bmp files. |
AW: Screenshots erstellen
Zitat:
![]() Ich frage, weil dort steht, dass Zitat:
|
AW: Screenshots erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Screenshots erstellen
Zitat:
|
AW: Screenshots erstellen
Zitat:
|
AW: Screenshots erstellen
Zitat:
|
AW: Screenshots erstellen
HardCopys von Formularen mache ich immer aus dem Programm selbst heraus:
Delphi-Quellcode:
Die Routine sollte sich mit wenig Aufwand auf BMP umbauen lassen.
procedure HardCopy(sJpegFile : String; fm : TForm);
Var FJpeg : TJpegImage; begin try if SysUtils.FileExists(sJpegFile) then SysUtils.DeleteFile(sJpegFile); if fm.WindowState = wsMinimized then fm.WindowState := wsNormal; fm.Show; fm.Refresh; FJpeg := TJpegImage.Create; try try FJpeg.Assign(fm.GetFormImage); fJPeg.SaveToFile(sJpegFile); except on e : Exception do begin MessageDlg(e.Message,mtError,[mbOk],0); end; end; except // Fehler werden ignoriert, da sie nicht behoben werden können. end; finally FJpeg.Free; end; end; Aufruf:
Delphi-Quellcode:
HardCopy('Dateiname.jpg', Form1);
Oder (sinngemäß) sowas in der Art:
Delphi-Quellcode:
Die älter Version des Help-Workshop, die für die .hlp-Dateien war und als Quelltext RTF-Dateien verlangte, konnte nur .bmp-Dateien verarbeiten.
var
i : Integer; s : String; begin for i := 0 to Screen.FormCount - 1 do begin s := Format('c:\temp\%s.jpg',[Screen.Forms[i].Name]); HardCopy(s, Screen.Forms[i]); end; end; Der HTML-Help-Workshop (hcw.exe) für die .chm-Dateien, kann alles verarbeiten, was man so in HTML-Dateien "verwursten" kann, da da (zumindest in den älteren Windowsversionen) die Hilfe über eine eingebettete Version des Internetexplorers angezeigt wurde. Von daher sind JPG-Dateien absolut ok. Keine Ahnung, wie das aktuell läuft. (ok: Unter Windows 10 sieht es genauso aus wie unter NT, XP, ... ;-)) |
AW: Screenshots erstellen
Zitat:
Zitat:
Sorry, aber da finde ich es schon praktischer, einfach nur Zum Beispiel AltGr+B zu drücken. |
AW: Screenshots erstellen
Nö, die Routine ist Teil einer Unit, die ich sowieso in jedes Programm mit einbinden muss, da sie durchaus noch weitere sinnvolle Aufgaben erledigt. (Gesamtes Laden und Speichern der konfigurierbaren Einstellungen, zentrale Fehlerbehandlung aller Fehler, die nicht vernünftig im Quelltext abgehandelt wurden, Aufruf des (programm)eigenen Hilfesystems (EPub-Format), ...)
Das sie auch die HardCopy-Routine enthält ist nur ein kleines Schmanckerl. Wenn Du das auch so löst, dann kannst Du der Routine ja den ShortCut ALTGr+B geben. Damit muss Du im Arbeitsablauf dann nicht mal was ändern ;-) |
AW: Screenshots erstellen
Die Methode GetFormImage liefert doch schon ein Bitmap, damit müsste eigentlich auch sowas gehen:
Delphi-Quellcode:
form1.GetFormImage.SaveToFile('c:\temp\' + Form1.Name + '.bmp');
Delphi-Quellcode:
for var i : Integer := 0 to Screen.FormCount - 1 do Screen.Forms[i].GetFormImage.SaveToFile(Format('c:\temp\%s.bmp',[Screen.Forms[i].Name]));
|
AW: Screenshots erstellen
|
AW: Screenshots erstellen
Heißt das, dass oben in meiner Routine mit dem
Delphi-Quellcode:
auch ein Speicherloch entsteht?
FJpeg.Assign(fm.GetFormImage);
|
AW: Screenshots erstellen
Natürlich.
Delphi-Quellcode:
function TCustomForm.GetFormImage: TBitmap;
begin Result := TBitmap.Create; |
AW: Screenshots erstellen
Mist, warum hat mich FastMM noch nie darauf hingewiesen?
Da muss dann noch mehr im Argen liegen :-( So besser?
Delphi-Quellcode:
Wenn nicht, sollte ich mir langsam aber sicher ein anderes Hobby suchen :-(
{ Bildschirmfoto eines Formulars machen und als JPeg speichern. }
procedure HardCopy(sJpegFile : String; fm : TForm); Var FJpeg : Jpeg.TJpegImage; FBmp : Graphics.TBitmap; begin if SysUtils.FileExists(sJpegFile) then SysUtils.DeleteFile(sJpegFile); if (fm.WindowState = wsMinimized) then fm.WindowState := wsNormal; fm.Show; fm.Refresh; FJpeg := TJpegImage.Create; FBmp := fm.GetFormImage; try try FJpeg.Assign(FBmp); fJPeg.SaveToFile(sJpegFile); except on e : Exception do begin MessageDlg(e.Message,mtError,[mbOk],0); end; end; finally FBmp.Free; FJpeg.Free; end; end; |
AW: Screenshots erstellen
Zitat:
Danke für Deine Mühe, Delphi.Narium, kommt aber für mich nicht in Frage, weil Erstens habe ich keine Unit, die ich in alle Projekte einbinde. Zweitens will ich nicht immer eine Form aus einem aktuell laufenden Programm kopieren. Drittens will ich nicht immer eine Form, sondern auch nur einzelne Controls kopieren. etc. Vor allem: Ich habe doch ein perfekt auf meine Bedürfnisse zugeschnittenes Programm, das ich durch Shortcuts aufrufen kann, ohne vorher ein Programm zu starten. Übrigens hatte ich früher in meine Programme etwas ähnliches integriert, zum Beispiel ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz