Bereich mit Maus markieren

Anfängerfragen zum Programmieren mit PureBasic.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Bereich mit Maus markieren

Beitrag von Martin66119 »

Einen guten Morgen!

Um auf dem Bildschirm einen bestimmten Bereich markieren zu können bräuchte ich eine Unterstützung, da ich nur eine weniger elegante Lösung hinbekomme:

Unelegante Lösung

Select EventWindowID
Case #Window_1 ; Handling #Window_1
Select EventID
case #WM_LBUTTONUP
MausX1 = DesktopMouseX()
case #WM_LBUTTONUP
MausX1 = DesktopMouseX()
.....
endselect

DeltaX = MausX2 -MausX1

Eine elegente Lösung stelle ich mir ungefähr so vor. Eine Lösung, so glaube ich habe ich hier im Forum irgendwo mal gesehen, finde diese aber nicht mehr.

Wenn ich auf die linke Maustaste drücke wird der Startpunkt in einer Variabeln abgelegt und beim Loslassen der linken Maustaste der Entpunkt in einer zweiten Variabeln. Wenn ich nun die rechte Maustaste drücke wird
die Differenz (Ende - Beginn) ermittelt. Mit diesem Ergebnis kann ich dann weiterarbeiten und Funktionen starten die ich brauche.


Danke und auch Grüße an alle im Forum
Martin
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Hilft dir das weiter?

Code: Alles auswählen

OpenWindow(0,0,0,400,300,"untitled",#WS_OVERLAPPEDWINDOW | 1)

Repeat
	EventID = WaitWindowEvent()
	
	If EventID = #WM_LBUTTONDOWN		
		IX = WindowMouseX(0) : IY = WindowMouseY(0)		
	EndIf
		
	If EventID = #WM_MOUSEMOVE And EventwParam() = #MK_LBUTTON
 		MX = WindowMouseX(0) : MY = WindowMouseY(0)
		
		hdc = GetDC_(WindowID(0))
		DrawFocusRect_(hdc,frc.RECT)
		
        If ((IX < MX) And (IY > MY)) 
            SetRect_(frc,IX,MY, MX,IY)
        ElseIf ((IX > MX) And (IY > MY))
            SetRect_(frc,MX, MY, IX,IY)
        ElseIf ((IX > MX) And (IY < MY)) 
            SetRect_(frc,MX,IY, IX, MY)
        Else 
            SetRect_(frc,IX,IY,MX,MY)
        EndIf

		DrawFocusRect_(hdc,frc)
		ReleaseDC_(WindowID(0),hdc)	
	EndIf	
Until EventID = 16
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

es gibt bestimmt API funktionen dafür....

ich weiß jetzt nich den fachbegriff, aber das ist ne grundfunktion von win seit ....immer...

also, es müsste ne api-funktion geben, die dir fürs ereignis des mouse-release
die koordinaten der vorher während des tastendrucks beschriebenen bereichs liefert......

MUSS es geben... MUSS!

...weil ohne dem kann man das komplette system nich proggen...;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Start Stop

Beitrag von Martin66119 »

Guten morgen!

Danke für die Hilfe. Mal schauen ob ich mit den Ansätzen weiterkomme.

Martin
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

um es noch mal deutlich zu machen...

natürlich kann man manuell die koordinaten zum zeitpunkt des #WM_LBUTTONDOWN rückspeichern,
und Fluids lösung ist echt praktikabel, wie alle seine beiträge, die ich bisher gelesen habe.

aber da dieses problem ein stinknormales problem ist,
das schon immer seit der entwicklung von windows bestanden hat,
gibt es folgerichtiger weise in der API integriert die rückspeicherung der #WM_LBUTTONDOWN-Koordinaten,
und es muss auch eine funktion geben,
um auf ein #WM_LBUTTONUP adäquat zu reagieren unter einbeziehung eines "Dragframe"
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Maustaste drücken und loslassen

Beitrag von Martin66119 »

Danke nochmal an die Helfenden!!!

Ich habe es nun so gemacht und das klappt dann auch so wie ich es brauche.

Code: Alles auswählen

....
  Select EventWindowID 
 
    Case #Window_1      ; Handling #Window_1 
      Select EventID        
        Case   #WM_MOUSEMOVE 
          Fadenkreuz()
        Case #WM_LBUTTONDOWN
          MausX1 = EventlParam() & $FFFF            
        Case #WM_LBUTTONUP 
          MausX2 = EventlParam() & $FFFF  
          Messwertanalyse()
.....
Antworten