Hallo,
ich möchte eine Lupe mit BP basteln, also wo ich die Möglichkeit habe, einen Bereich auf der sich mein Mauszeiger bewegt bzw befindet zu vergrößern Wie mit einer Lupe/Vergrößerungsglas. Hat jemand schon mal so etawas programmiert, oder hat jemand eine Idee wie man so was bsateln kann?
Gruß: SC
Lupe
Im Codearchiv sollte sich soetwas finden lassen. Hab da mal eben was ähnliches gefunden:
Gibt aber afaik noch ein anderes Lupenbeispiel im Codearchiv von purearea.net. 
Code: Alles auswählen
; English forum:
; Author:
; Date: 21. January 2003
Procedure CaptureScreen(Left.l, Top.l, handle.l,Factor)
DC.l = GetDC_(0)
MemDC.l = CreateCompatibleDC_(DC)
If handle = 0
BmpID.l = CreateCompatibleBitmap_(DC, 200, 200)
Else
BmpID.l = handle
EndIf
SelectObject_( MemDC, BmpID)
StretchBlt_( MemDC, 0, 0,200*Factor,200*Factor, DC,Left, Top, 200, 200, #SRCCOPY )
DeleteDC_( MemDC)
ReleaseDC_(0,DC)
ProcedureReturn BmpID ;same BUG if Bitmap or BmpID is used...
EndProcedure
;
If OpenWindow(0,200,200,200,200,#PB_Window_SystemMenu,"Loupe") : Else : End : EndIf
If CreateGadgetList(WindowID()) : Else : End : EndIf
;
CursorPosition.POINT
hImage = CaptureScreen( CursorPosition\x, CursorPosition\y, 0,1)
hGadget = ImageGadget(0, 0, 0, 200,200, hImage)
;
Repeat
EventID.l = WindowEvent()
Delay(10)
GetCursorPos_(CursorPosition)
hImage = CaptureScreen( CursorPosition\x, CursorPosition\y, hImage,4)
SendMessage_(hGadget, #STM_SETIMAGE, #IMAGE_BITMAP, hImage)
Until EventID=#PB_EventCloseWindow
;
End

@SC
Für was brauchst Du das?
Aus meiner Sicht macht das nur Sinn für einen statischen Screen/Hintergrund (z.B. Ein Bild vergrössern).
Für einen bewegten Hintergrund must Du immer einen Versatz drin haben!
SOnst vergrösserst Du die Vergrösserung und die wird wieder vergrössert, usw.
Für was brauchst Du das?
Aus meiner Sicht macht das nur Sinn für einen statischen Screen/Hintergrund (z.B. Ein Bild vergrössern).
Für einen bewegten Hintergrund must Du immer einen Versatz drin haben!
SOnst vergrösserst Du die Vergrösserung und die wird wieder vergrössert, usw.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Ja, daß kommt meinem Vorhaben am nähesten, sinnvoll wäre auch, wenn man den Bereich per rechtenmausklick vergrößern und Linkenmausklick verkleinern könnte. Kann mir jemand den folgenden Programm entsprechend ergänzen?Na dann erstell doch das Fenster randlos und ohne Titelleiste immer genau an der Mausprosition. Dadurch sieht es dann so aus, als wenn deine Maus den Sichtbereich dort vergrößert...
Code: Alles auswählen
; English forum:
; Author:
; Date: 21. January 2003
Procedure CaptureScreen(Left.l, Top.l, handle.l,Factor)
DC.l = GetDC_(0)
MemDC.l = CreateCompatibleDC_(DC)
If handle = 0
BmpID.l = CreateCompatibleBitmap_(DC, 500, 500)
Else
BmpID.l = handle
EndIf
SelectObject_( MemDC, BmpID)
StretchBlt_( MemDC, 0, 0,300*Factor,300*Factor, DC,Left, Top, 200, 200, #SRCCOPY )
DeleteDC_( MemDC)
ReleaseDC_(0,DC)
ProcedureReturn BmpID ;same BUG if Bitmap or BmpID is used...
EndProcedure
;
If OpenWindow(0,200,200,300,300,#PB_Window_SystemMenu,"Loupe") : Else : End : EndIf
If CreateGadgetList(WindowID()) : Else : End : EndIf
;
CursorPosition.POINT
hImage = CaptureScreen( CursorPosition\x, CursorPosition\y, 0,1)
hGadget = ImageGadget(0, 0, 0, 300,300, hImage)
;
Repeat
EventID.l = WindowEvent()
Delay(10)
GetCursorPos_(CursorPosition)
hImage = CaptureScreen( CursorPosition\x, CursorPosition\y, hImage,4)
SendMessage_(hGadget, #STM_SETIMAGE, #IMAGE_BITMAP, hImage)
Until EventID=#PB_EventCloseWindow
;
End