Seite 2 von 2

Re: Canvas bei Linux in einer VM

Verfasst: 18.09.2012 09:18
von Lord
@all

Zuerst ein Dank an alle für eure Antworten.

Wenn ich das jetzt richtig verstanden habe, funktioniert
das Clipping in einem "realen" Linuxsystem, während es
bei einem Linux in einer VM nicht geht.
Wie bei mir in einem "realen" Windowssystem, führt ein
#PB_Canvas_ClipMouse bei einem Klick mit der linken
Maustaste auf das CanvasGadget zu einem Eingrenzen
des Bewegungsbereiches des Mousecursors auf die Canvas-
fläche und das Setzen von #PB_Canvas_Clip auf #True
nach einem Klick mit der linken Maustaste zu der Ein-
grenzung, welche durch Setzen von #PB_Canvas_Clip auf
#False wieder aufgehoben wird.

Die Einstellungen in VMWare in den Preferences für den
Mousecursor führen auch zu keiner Veränderung des Ver-
haltens (und den Shortcut CTRL I gibt es auch nicht).

Folglich ist doch die VM Schuld und PB funktioniert hier
richtig. Deshalb eine letzte Frage: Funktioniert der folgende
Code in einem "realen" Linux? Wird also auch hier der Maus-
Cursor auf das Canvas beschränkt, während die linke Taste
gedrückt wird?
Der Code ist ein Extrakt aus einem unter Windows laufenden
Programm, das auch unter Linux laufen soll.

Code: Alles auswählen

Global ImgXSize.i
Global ImgYSize.i
Global WinX
Global WinY
Global XF.f
Global YF.f

Procedure LMBDLoop()
  ResizeGadget(3, #PB_Ignore, #PB_Ignore,#PB_Ignore, WinY-180)
  Repeat
    Protected Event.i=WaitWindowEvent(20)
    Protected EventType.i=EventType()
    Protected EventGadget.i=EventGadget()
    If Event=#PB_Event_Gadget And EventGadget=1
      Protected cmx=GetGadgetAttribute(1,#PB_Canvas_MouseX)
      Protected cmy=GetGadgetAttribute(1,#PB_Canvas_MouseY)
      StatusBarText(1, 0,Right("0000"+Str(cmx*xf), 4)+" : "+Right("0000"+Str(cmy*yf),4),#PB_StatusBar_Center )
      StatusBarText(1, 1, Right("000"+Str(cmx), 3)+" : "+Right("000"+Str(cmy),3))
      Select cmx
          ;{          
        Case 0 To 17
          Select cmy
            Case 0 To 17
              GrabImage(1, 4, 0, 0,360,360)
              *hImg4=ResizeImage(4, 180,180)
              StartDrawing(ImageOutput(3))
                Box(0,0,180,180,0)
                DrawImage(ImageID(4), 90-cmx*XF/2, 90-cmy*YF/2)
                LineXY( 90,  0,  90, 180, $0000FF)
                LineXY(  0, 90, 180,  90, $0000FF)
              StopDrawing()
              
            Case 18 To WinY-19
              GrabImage(1, 4, 0, cmy*YF-180,360,360)
              *hImg4=ResizeImage(4, 180,180)
              StartDrawing(ImageOutput(3))
                Box(0,0,180,180,0)
                DrawImage(ImageID(4), 90-cmx*XF/2, 0)
                LineXY( 90,  0,  90, 180, $0000FF)
                LineXY(  0, 90, 180,  90, $0000FF)
              StopDrawing()
              
            Case WinY-18 To WinY
              GrabImage(1, 4, 0, ImgYSize-1-360, 360,360)
              *hImg4=ResizeImage(4, 180,180)
              StartDrawing(ImageOutput(3))
                Box(0,0,180,180,0)
                DrawImage(ImageID(4), 90-cmx*XF/2, (ImgYSize-1-cmy*yf)/2-90)
                LineXY( 90,  0,  90, 180, $0000FF)
                LineXY(  0, 90, 180,  90, $0000FF)
              StopDrawing()
              
          EndSelect
          ;}          
          ;{          
        Case 18 To WinX-19
          Select cmy
            Case 0 To 17
              GrabImage(1,4, cmx*XF-180, 0, 360,360)
              *hImg4=ResizeImage(4, 180,180)
              StartDrawing(ImageOutput(3))
                Box(0,0,180,180,0)
                DrawImage(ImageID(4), 0, 90-cmy*YF/2)
                LineXY( 90,  0,  90, 180, $0000FF)
                LineXY(  0, 90, 180,  90, $0000FF)
              StopDrawing()
              
            Case 18 To WinY-19
              GrabImage(1, 3, cmx*XF-180, cmy*YF-180,360,360)
              *hImg3=ResizeImage(3, 180,180)
              StartDrawing(ImageOutput(3))
                LineXY( 90,  0,  90, 180, $0000FF)
                LineXY(  0, 90, 180,  90, $0000FF)
              StopDrawing()
           
            Case WinY-18 To WinY
              GrabImage(1,4, cmx*XF-180, ImgYSize-1-360, 360,360)
              *hImg4=ResizeImage(4, 180,180)
              StartDrawing(ImageOutput(3))
                Box(0,0,180,180,0)
                DrawImage(ImageID(4), 0, (ImgYSize-1-cmy*yf)/2-90)
                LineXY( 90,  0,  90, 180, $0000FF)
                LineXY(  0, 90, 180,  90, $0000FF)
              StopDrawing()
              
          EndSelect 
          ;}          
          ;{          
        Case WinX-18 To WinX
          Select cmy
            Case 0 To 17
              GrabImage(1, 4, ImgXSize-1-360, 0,360,360)
              *hImg4=ResizeImage(4, 180,180)
              StartDrawing(ImageOutput(3))
                Box(0,0,180,180,0)
                DrawImage(ImageID(4),((ImgXSize-cmx*xf)/2)-90, 90-cmy*YF/2)
                LineXY( 90,  0,  90, 180, $0000FF)
                LineXY(  0, 90, 180,  90, $0000FF)
              StopDrawing()
              
            Case 18 To WinY-19
              GrabImage(1, 4, ImgXSize-1-360, cmy*YF-180,360,360)
              *hImg4=ResizeImage(4, 180,180)
              StartDrawing(ImageOutput(3))
                Box(0,0,180,180,0)
                DrawImage(ImageID(4),((ImgXSize-cmx*xf)/2)-90, 0)
                LineXY( 90,  0,  90, 180, $0000FF)
                LineXY(  0, 90, 180,  90, $0000FF)
              StopDrawing()
              
            Case WinY-18 To WinY
              GrabImage(1,4,  ImgXSize-1-360, ImgYSize-1-360, 360,360)
              *hImg4=ResizeImage(4, 180,180)
              StartDrawing(ImageOutput(3))
                Box(0,0,180,180,0)
                DrawImage(ImageID(4), ((ImgXSize-1-cmx*xf)/2)-90, (ImgYSize-1-cmy*yf)/2-90)
                LineXY( 90,  0,  90, 180, $0000FF)
                LineXY(  0, 90, 180,  90, $0000FF)
              StopDrawing()
              
              ;}          
          EndSelect
      EndSelect
      SetGadgetState(2, ImageID(3))
      HideGadget(2,0)
    EndIf
  Until EventType=#PB_EventType_LeftButtonUp; Or Eventype=#PB_EventType_MouseLeave
  
  ResizeGadget(3, #PB_Ignore, #PB_Ignore,#PB_Ignore, WinY)
  HideGadget(2,1)
EndProcedure

*hImg1=CreateImage(1, 7500, 6492)
ImgXSize.i=ImageWidth(1)
ImgYSize.i=ImageHeight(1)
WinX=ImgXSize/10
WinY=ImgYSize/10
XF.f=1.0*ImgXSize/WinX
YF.f=1.0*ImgYSize/WinY

StartDrawing(ImageOutput(1))
  Box(0,0,ImgXSize, ImgYSize, $0000FF)
  Box(1,1,ImgXSize-2,ImgYSize-2, $00FFFF)
  Box(180,180, ImgXSize-360,ImgYSize-360, $00FF00)
  LineXY(0,0, ImgXSize-1, ImgYSize-1, $000000)
  LineXY(ImgXSize-1,0, 0, ImgYSize-1, $000000)
StopDrawing()

CopyImage(1,2)
*hImg2=ResizeImage(2, WinX, WinY)

*hImg3=CreateImage(3, 180, 180)


OpenWindow(0, 0, 0, WinX+180, WinY+24, "Test", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CreateStatusBar(1, WindowID( 0))
AddStatusBarField(180)
AddStatusBarField(64)

TreeGadget(0, 0,0, 180, WinY):HideGadget(0,1)
CanvasGadget(1,181,0,WinX, WinY, #PB_Canvas_ClipMouse)
SetGadgetAttribute(1, #PB_Canvas_Image, *hImg2)
ImageGadget(2, 0, WinY-180, 180,180,0)
TreeGadget(3, 0,0, 180, WinY)

Repeat
  Define Event.i=WaitWindowEvent()
  Define EventType.i=EventType()
  Define EventGadget.i=EventGadget()
  
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget
        Case 1
          Select EventType
            Case #PB_EventType_MouseEnter
              SetGadgetAttribute(1, #PB_Canvas_Cursor, #PB_Cursor_Cross)
            Case #PB_EventType_MouseLeave
              SetGadgetAttribute(1, #PB_Canvas_Cursor, #PB_Cursor_Default)
            Case #PB_EventType_LeftButtonDown
              LMBDLoop()
          EndSelect
      EndSelect
  EndSelect
Until Event=#PB_Event_CloseWindow

Re: Canvas bei Linux in einer VM

Verfasst: 18.09.2012 10:34
von ts-soft
Lord hat geschrieben:Deshalb eine letzte Frage: Funktioniert der folgende
Code in einem "realen" Linux? Wird also auch hier der Maus-
Cursor auf das Canvas beschränkt, während die linke Taste
gedrückt wird?
Ja, während die linke Taste gedrückt wird, aber nicht mehr, wenn sie losgelassen wurde.
Ich dachte darum geht es hier?

PS: Hättest auch erwähnen können, das Du mit VMWare arbeitest, bzw. dann auch erwähnen sollen,
welche Version (Player, Server, Workstation oder Fusion), so geht jeder von VirtualBox aus, da es
von den kostenlosen Möglichkeiten das beste ist (VMWare Player ist lahm und sieht scheiße aus :mrgreen: , Server ist
alt und funktioniert nicht besonders gut)

Gruß
Thomas

Re: Canvas bei Linux in einer VM

Verfasst: 18.09.2012 11:47
von Lord
Hallo ts-soft!

Es kann sein, daß ich mich da nicht deutlich genug ausgedrückt habe.
Ich hätte besser statt "nach" "trotz" schreiben sollen.

Ich meinte tatsächlich die Situation, daß der Mauscursor das Canvas
nicht verlassen kann, während die linke Maustaste gedrückt ist.
Sobald die linke Maustaste losgelassen wird, "darf sie wieder raus".

Ansonsten hatt ich in meinem ersten Posting erwähnt, daß es sich bei
der VM um VMWare handelt. Es ist die Workstation-Version.
Lord hat geschrieben:Hallo!

Frage an die Linuxnutzer:

Wie verhält sich bei euch folgender Code:

Code: Alles auswählen

OpenWindow(0, 10, 10, 400, 400, "Canvas-Test")
CanvasGadget(0, 5, 5, 390, 390)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      Select EventType()
        Case #PB_EventType_LeftClick
          SetGadgetAttribute(0, #PB_Canvas_Clip, #True)
          SetWindowTitle(0, "Canvas-Test - LMB")
        Case #PB_EventType_RightClick
          SetGadgetAttribute(0, #PB_Canvas_Clip, #False)
           SetWindowTitle(0, "Canvas-Test - RMB")
     EndSelect
  EndSelect
ForEver
Ich habe Ubuntu 12.04 in VMWare laufen.
Bei obigem Code kann der Mauszeiger nach Drücken der
linken Maustaste das CanvasGadget verlassen.
Lasse ich das Programm auf Windows laufen, kann die
Maus das Gadget nicht verlassen.

Ist das jetzt die VM oder verhält sich das CanvasGadget
in Linux anders als in Windows?
Dank an alle Beteiligten für die Hilfe.

Re: Canvas bei Linux in einer VM

Verfasst: 18.09.2012 12:03
von ts-soft
Lord hat geschrieben:Ansonsten hatt ich in meinem ersten Posting erwähnt, daß es sich bei
der VM um VMWare handelt. Es ist die Workstation-Version.
Sorry, hab ich übersehen, bzw. wurde davon abgelenkt, da bobobo Virtualbox erwähnt hat,
habe irgendwie gedacht, Du würdest VirtualBox nutzen.

Re: Canvas bei Linux in einer VM

Verfasst: 18.09.2012 15:37
von bobobo
Die Mauzeigerintergration gibt es unter Vmware sicher auch.

DAS IST WENN MAN DIE MAUS IN CLIENT UND HOST GLEICHZEITIG BENUTZEN KANN
OHNE EIN EINFANGEN AUF DEM CLIENT.
Virtualbox macht das nach Installation der Gasterweiterungen
und dann ist das an und abschaltbar.


Es spricht überigens nichts ernsthaftes gegen den Einsatz von virtualbox statt vmware
(Mir erscheint es sogar für die Desktopvirtualisierung die bessere Lösung)

ich habe hier Barematell.VMWARE-Systeme und greife per rdp oder auch
über die Vsphere -konsole drauf zu.

Eine Einstellung für dir Mausintergarion finde ich auf die Schnelle auch nicht.

im Vmwareplayer kann das anders sein.

eventuell muss man auch die vmaretools deinstallieren. (mit allen Nachteilen die
sonst so hat)

Re: Canvas bei Linux in einer VM

Verfasst: 19.09.2012 10:46
von Lord
Hallo bobobo!
bobobo hat geschrieben:Die Mauzeigerintergration gibt es unter Vmware sicher auch.

DAS IST WENN MAN DIE MAUS IN CLIENT UND HOST GLEICHZEITIG BENUTZEN KANN
OHNE EIN EINFANGEN AUF DEM CLIENT.
Virtualbox macht das nach Installation der Gasterweiterungen
und dann ist das an und abschaltbar.
...
...
Eine Einstellung für dir Mausintergarion finde ich auf die Schnelle auch nicht.

im Vmwareplayer kann das anders sein.

eventuell muss man auch die vmaretools deinstallieren. (mit allen Nachteilen die
sonst so hat)
Am Anfang der Seite hatte ich geschrieben:
Lord hat geschrieben:...
Die Einstellungen in VMWare in den Preferences für den
Mousecursor führen auch zu keiner Veränderung des Ver-
haltens (und den Shortcut CTRL I gibt es auch nicht).
...
und im letzten Posting:
Lord hat geschrieben:...
Ansonsten hatt ich in meinem ersten Posting erwähnt, daß es sich bei
der VM um VMWare handelt. Es ist die Workstation-Version.
...
Ansonsten muß ich noch sagen, daß ich kein Programmier-Profi
bin so wie ihr. Ich bin froh, daß ich Linux überhaupt zum Laufen
bekommen habe. Da werde ich jetzt nicht nochmal anfangen mit
dem Rumgefummel und eine andere VM installieren um darin dann
wieder Linux zu installieren......

Mir reicht die Auskunft, daß auf einem nicht virtualisierten Linux
der Mauscursor das Canvagadget bei gedrückter linker Maustaste
nicht verlassen kann.