AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bildschirmlupe - Bereich unter Formular ermitteln

Bildschirmlupe - Bereich unter Formular ermitteln

Ein Thema von Fussball-Robby · begonnen am 28. Dez 2008 · letzter Beitrag vom 17. Jul 2009
Antwort Antwort
Seite 2 von 10     12 34     Letzte » 
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#11

Re: Bildschirmlupe - Bereich unter Formular ermitteln

  Alt 30. Dez 2008, 10:30
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);
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#12

Re: Bildschirmlupe - Bereich unter Formular ermitteln

  Alt 30. Dez 2008, 13:42
Vielleicht so etwas wie im Anhang?

Delphi-Quellcode:
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;
Funktioniert nicht ganz zuverlässig. Man kann das Formular transparent lassen, allerdings ist dann die Bildqualität deutlich schlechter.
Angehängte Dateien
Dateityp: 7z lupe_105.7z (149,8 KB, 22x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#13

Re: Bildschirmlupe - Bereich unter Formular ermitteln

  Alt 30. Dez 2008, 14:23
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 von Sunlight7:
Der 2. Link vergrößert ein (von Datei geladenes) Bitmap, das auf dem Formular gezeichnet wird.
Wäre also doch passend, da der Desktop nun ebenfalls als Bitmap vorliegt.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#14

Re: Bildschirmlupe - Bereich unter Formular ermitteln

  Alt 30. Dez 2008, 16:43
Ich denke so geht's.
  • Formularhintergrund wird transparent und Image unsichtbar geschaltet.
  • Kurz warten, damit der wieder sichtbare Hintergrund gezeichnet wird.
  • Ein Hintergrundbild vom Desktop machen.
  • Den zu vergrößernden Ausschnitt in ein Bitmap kopieren.
  • Das Bitmap vergrößert in das Image kopieren.
  • Beim Formularhintergrund die Transparenz ab- und das Image sichtbar schalten.
  • Wieder von vorn anfangen.
Angehängte Dateien
Dateityp: 7z lupe_181.7z (158,3 KB, 32x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#15

Re: Bildschirmlupe - Bereich unter Formular ermitteln

  Alt 30. Dez 2008, 19:00
Nun noch ein (rundes) Lupen-Formular, dann ist das schon gut zu verwenden!

Wozu aber die Beschränkung der Fensterbewegung?
Wenn schon, dann sollte die Lupe auch auf dem 2ten und 3ten Monitor funktionieren...
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#16

Re: Bildschirmlupe - Bereich unter Formular ermitteln

  Alt 30. Dez 2008, 19:43
Zitat von taaktaak:
Nun noch ein (rundes) Lupen-Formular, dann ist das schon gut zu verwenden!
Könnte man machen.

Zitat von taaktaak:
Wozu aber die Beschränkung der Fensterbewegung?
Das Formular fing bei mir am Bildschirmrand an zu "Blinken". Kannst ja testen, wie es bei Dir ohne die procedure WMMoving aussieht.

Zitat von taaktaak:
Wenn schon, dann sollte die Lupe auch auf dem 2ten und 3ten Monitor funktionieren...
Das ist nur eine Demo für den Threadstarter und ich habe nur einen Monitor.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Bildschirmlupe - Bereich unter Formular ermitteln

  Alt 30. Dez 2008, 19:48
Zitat von Garfield:
Das ist nur eine Demo für den Threadstarter und ich habe nur einen Monitor.
Echt ein großes DANKE Da hast du mir aber einiges an Such- und Programmierarbeit abgenommen, super
Ich melde mich eventuell nochmal wenn ich was draus gemacht habe
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#18

Re: Bildschirmlupe - Bereich unter Formular ermitteln

  Alt 30. Dez 2008, 19:54
Ja, dem DANKE schließe ich mich natürlich an!

@Garfield: Vielleicht kann ich es beim rzMagnifier noch einbauen, wenn du nichts dagegen hast?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#19

Re: Bildschirmlupe - Bereich unter Formular ermitteln

  Alt 30. Dez 2008, 20:53
Bitte. Ich freue mich, dass ich helfen konnte.

@ taaktaak, selbstverständlich kannst Du es nutzen. Dazu ist es doch da.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#20

Re: Bildschirmlupe - Bereich unter Formular ermitteln

  Alt 30. Dez 2008, 20:56
Prima, Danke
Bin gespannt, ob sich damit die Probleme, die mein Programm unter VISTA hat, beseitigen lassen.
Ralph
  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 03:21 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