![]() |
Re: Bildschirmlupe - Bereich unter Formular ermitteln
Er will den Bereich, an dem sein Fenster auf dem Bildschirm ist, so (vergrößert) auf seinem Fenster zeichnen, als wäre sein Fenster gar nicht da, also das, was sich unterhalb von seinem Fenster befindet, sprich das, was man sehen würde wenn sein Fenster nicht da wäre.
In Delphi Spache etwa so:
Delphi-Quellcode:
Form1.Hide;
CaptureScreenRect(Bit, Form1.BoundsRect); Form1.Show; Canvas.Draw(0, 0, Bit); |
Re: Bildschirmlupe - Bereich unter Formular ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Vielleicht so etwas wie im Anhang?
Delphi-Quellcode:
Funktioniert nicht ganz zuverlässig. Man kann das Formular transparent lassen, allerdings ist dann die Bildqualität deutlich schlechter.
procedure TForm1.ontmr(Sender: TObject);
var SrcRect : TRect; DestRect : TRect; tmpCanvas : TCanvas; hDesktop : Hwnd; begin if (frmTop <> Form1.Left) or (frmLeft <> Form1.Top) then begin frmTop := Form1.Left; frmLeft := Form1.Top; img.Visible := False; Form1.TransparentColor := True; hDesktop := GetDesktopWindow; DestRect := img.Canvas.ClipRect; SrcRect.Left := img.ClientOrigin.X + (img.Width div 4); SrcRect.Top := img.ClientOrigin.Y + (img.Height div 4); SrcRect.Right := SrcRect.Left + (img.Width div 2); SrcRect.Bottom := SrcRect.Top + (img.Height div 2); tmpCanvas := TCanvas.Create; try tmpCanvas.Handle := GetDC(GetDesktopWindow); img.Canvas.CopyRect(DestRect, tmpCanvas, SrcRect); finally ReleaseDC(hDesktop, tmpCanvas.Handle); tmpCanvas.Free; end; Application.ProcessMessages; img.Visible := True; Form1.TransparentColor := False; end; end; |
Re: Bildschirmlupe - Bereich unter Formular ermitteln
Damit sieht es besser aus:
Delphi-Quellcode:
procedure TForm1.ontmr(Sender: TObject);
const factor = 2; var SrcRect : TRect; DestRect : TRect; hDesktop : Hwnd; dcDesktop : HDC; begin if (frmTop <> Form1.Left) or (frmLeft <> Form1.Top) then try frmTop := Form1.Left; frmLeft := Form1.Top; img.Visible := False; Form1.TransparentColor := True; hDesktop := GetDesktopWindow; dcDesktop := GetWindowDC(hDesktop); SrcRect.Left := img.Width div (factor * 2); SrcRect.Top := img.Height div (factor * 2); SrcRect.Right := SrcRect.Left + (img.Width div factor); SrcRect.Bottom := SrcRect.Top + (img.Height div factor); DestRect := img.Canvas.ClipRect; bmp.Width := DestRect.Right - DestRect.Left; bmp.Height := DestRect.Bottom - DestRect.Top; BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, dcDesktop, img.ClientOrigin.X, img.ClientOrigin.Y, srcCopy); img.Canvas.CopyRect(DestRect, bmp.Canvas, SrcRect); finally ReleaseDC(dcDesktop, hDesktop); img.Visible := True; Form1.TransparentColor := False; end; end; Zitat:
|
Re: Bildschirmlupe - Bereich unter Formular ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Ich denke so geht's.
|
Re: Bildschirmlupe - Bereich unter Formular ermitteln
Nun noch ein (rundes) Lupen-Formular, dann ist das schon gut zu verwenden!
:thumb: Wozu aber die Beschränkung der Fensterbewegung? Wenn schon, dann sollte die Lupe auch auf dem 2ten und 3ten Monitor funktionieren... |
Re: Bildschirmlupe - Bereich unter Formular ermitteln
Zitat:
Zitat:
Zitat:
|
Re: Bildschirmlupe - Bereich unter Formular ermitteln
Zitat:
Ich melde mich eventuell nochmal wenn ich was draus gemacht habe :cyclops: |
Re: Bildschirmlupe - Bereich unter Formular ermitteln
Ja, dem DANKE schließe ich mich natürlich an!
@Garfield: Vielleicht kann ich es beim rzMagnifier noch einbauen, wenn du nichts dagegen hast? |
Re: Bildschirmlupe - Bereich unter Formular ermitteln
Bitte. Ich freue mich, dass ich helfen konnte. :thumb:
@ taaktaak, selbstverständlich kannst Du es nutzen. Dazu ist es doch da. |
Re: Bildschirmlupe - Bereich unter Formular ermitteln
Prima, Danke :hi:
Bin gespannt, ob sich damit die Probleme, die mein Programm unter VISTA hat, beseitigen lassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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