GadgetToolTip ... aktualisieren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

GadgetToolTip ... aktualisieren

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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()
Zuletzt geändert von edel am 28.06.2007 16:00, insgesamt 1-mal geändert.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Klammer vergessen!

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

/:->
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Xaby hat geschrieben:Klammer vergessen!

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

/:->
kann ich nicht nachvollziehen. Funktioniert hier wunderprächtig.
a²+b²=mc²
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

was vermutlich an der wundersamen Eigenschaft des Boards liegt, dass man Beiträge editieren kann.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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.
a²+b²=mc²
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Antworten