Seite 1 von 2

GadgetToolTip ... aktualisieren

Verfasst: 28.06.2007 12:57
von Xaby
http://www.purebasic.fr/german/viewtopi ... ip&start=0

Hallo Fans,

ich habe ein ImageGadget()
und ich habe dort ein kleines Koordinaten System auf mein Bild gemalt.
Ich möchte nun, dass an dem Mauszeiger die aktelle Position der Maus steht. Das Problem bei so einem Tooltip ist scheinbar, dass er sich nicht mit der Maus mitbewegt. Aber noch schlimmer ist, dass nach dem Klicken auf das ImageGadget() der Tooltip verschwindet.
Und erst wieder angezeigt wird, wenn man aus dem Gadget "rausfährt"

Hat jemand eine Idee, wie man das ganze einfach lösen kann?

Wenn ich was mit Draw mache, müsste ich wohl immer den Untergrund abspeichern und den dann auf mein eigenes Window wieder drauf packen, sobald die alte Mausposition nicht mehr der neuen entspricht.

Aber vielleicht geht es ja auch einfacher und schöner, bzw. sauberer.

Hat jemand eine Idee oder sogar den Link zu dem Code, wie sowas richtig gelöst wird?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Oder vielleicht den Mauszeiger verändern und den vorher beschrieben haben. Aber da weiß ich nicht, wie das geht.
Und 32 x 32 oder 16 x 16 wird für viel Text auch nicht ausreichen.

Dank euch. Gruß, Folker :allright:

Verfasst: 28.06.2007 14:20
von edel

Code: Alles auswählen

Macro LoWord( x ) : (x & $0000FFFF) : EndMacro
Macro HiWord( x ) : (x >> 16)       : EndMacro

;-
Procedure UpdateToolTipText(id,text.s)
  Protected hTP.l,hParent.l,ti.TOOLINFO
  !EXTRN _PB_Object_GetThreadMemory@4
  !EXTRN _PB_Gadget_Globals
  !MOV   Eax,[_PB_Gadget_Globals]
  !PUSH  Eax
  !CALL  _PB_Object_GetThreadMemory@4
  !MOV ecx,[Eax]
  !MOV [p.v_hParent],ecx
  !MOV Eax,[Eax+24]
  !MOV [p.v_hTP],Eax 
  ti\cbSize = SizeOf(TOOLINFO)
  ti\hWnd = hParent
  ti\uId = GadgetID(id)
  ti\lpszText = @text
  SendMessage_(hTP,#TTM_UPDATETIPTEXT,0,@ti) 
EndProcedure 

;-
Procedure main()
	
  hWnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,640,480,"leer",#WS_OVERLAPPEDWINDOW)

  CreateGadgetList(hWnd)
  ImageGadget(0,20,20,150,150,0,#PB_Image_Border)
  GadgetToolTip(0,"fdfg")
  
  Repeat
    event = WaitWindowEvent()
    
    If event = #WM_MOUSEMOVE 
      x = LoWord( EventlParam() )
      y = HiWord( EventlParam() ) 
      UpdateToolTipText(0,"x:"+Str(x)+" y:"+Str(y))
    EndIf
    
  Until event = #PB_Event_CloseWindow 
 
	
EndProcedure:main()

Verfasst: 28.06.2007 15:49
von Xaby
Klammer vergessen!

Und danach Assembler Error
>> !MOV [P.v_hParent],Ecx

/:->

Verfasst: 28.06.2007 16:16
von Kiffi
Xaby hat geschrieben:Klammer vergessen!

Und danach Assembler Error
>> !MOV [P.v_hParent],Ecx

/:->
kann ich nicht nachvollziehen. Funktioniert hier wunderprächtig.

Verfasst: 28.06.2007 16:19
von bobobo
was vermutlich an der wundersamen Eigenschaft des Boards liegt, dass man Beiträge editieren kann.

Verfasst: 28.06.2007 16:19
von edel
>> !MOV [P.v_hParent],Ecx
Das steht auch nicht so im Code.

@bobobo
Den ASM Fehler gibt es im Code nicht, das liegt an Xaby.

Verfasst: 28.06.2007 16:55
von Kiffi
bobobo hat geschrieben:was vermutlich an der wundersamen Eigenschaft des Boards liegt, dass man Beiträge editieren kann.
ich habe den Code relativ zeitnah ausprobiert. Ich denke, zu diesem
Zeitpunkt hat edel seinen Code noch nicht geändert.

Verfasst: 28.06.2007 18:25
von Xaby
Hab es an zwei Rechnern mit PB 4.1 und PB 4.02 getestet.
Beide XP.

Hab jaPBe für PB 4.

Hab es mal auf der PB-IDE versucht. Da funktioniert es herrlich.
Aber selbst beim aktivierten ASM funktioniert es mit jaPBe leider nicht.

mmm, muss ich wohl mal Gnozal um Rat bitten, oder hat jemand sonst eine Idee, wie der Code von Edel auch ordentlich mit jaPBe funktioniert?

Dank euch, lag dann wohl doch am Xaby. :freak:

Verfasst: 28.06.2007 18:31
von edel

Code: Alles auswählen

deins !MOV [P.v_hParent],Ecx 
meins !MOV [p.v_hParent],ecx
Siehst du den Unterschied ?

jaPBe -> strg + P -> Editor 2 -> 4. Option auschalten.

Verfasst: 28.06.2007 18:40
von Xaby
Stimmt, funktioniert.

Gibt es auch eine Möglichkeit, das nur für ASM-Code zu machen.
Denn sonst finde ich das gar nicht so übel.

Es ermöglicht eine einheitliche Schreibweise von Variablen.

Klar, man kann ja auch auf das Intellisense zurückgreifen oder muss eben etwas besser drauf achten, wann man wie schreibt ... :roll:

Dank dir. :allright: