ListIconGadget - ToolTip mit Zeilenumbruch

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

ListIconGadget - ToolTip mit Zeilenumbruch

Beitrag von RSBasic »

Hola,

ich habe ein ListIconGadget und möchte gerne ToolTips auf die Einträge setzen.
Es ist per WinAPI möglich, ToolTips bei langen Einträgen per Mouseover automatisch anzuzeigen:

Code: Alles auswählen

EnableExplicit

If OpenWindow(0, 0, 0, 250, 200, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(1, 0, 0, WindowWidth(0), WindowHeight(0), "", 200, 0)
  
  AddGadgetItem(1, -1, "Überall dieselbe alte Leier.  Das Layout ist fertig, der Text lässt auf sich warten.", 0, 0)
  AddGadgetItem(1, -1, "Überall dieselbe alte Leier. " + Chr(13) + " Das Layout ist fertig, der Text lässt auf sich warten.", 0, 0)
  
  SendMessage_(GadgetID(1), #LVM_SETEXTENDEDLISTVIEWSTYLE, 0, #LVS_EX_LABELTIP) 
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Nun möchte ich gerne Zeilenumbrüche in ToolTips einfügen, aber leider werden die Zeilenumbrüche nicht angezeigt. Weiß jemand, wie man trotzdem einen mehrzeiligen ToolTip-Text anzeigen lassen kann?

Alternativ gibt es auch: http://www.rsbasic.de/aktualisierung/wi ... umbruch.pb
Nur habe ich das Problem, dass ich die Item-ID vom ListIconGadget nicht kenne.

Ich hoffe, jemand kann mir helfen und vielen Dank im Voraus. :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ListIconGadget - ToolTip mit Zeilenumbruch

Beitrag von RSBasic »

Da ich wirklich keine Lösung fand, erstelle ich nun mein eigenes ToolTip-Fenster. So geht es aus:

Code: Alles auswählen

EnableExplicit

Global ListIconProc
Global ToolTipWindow
Global LastListIconItemX
Global LastListIconItemY

Procedure CreateToolTipWindow(Window, Gadget)
  Protected TOOLINFO.TOOLINFO
  
  ToolTipWindow = CreateWindowEx_(0, #TOOLTIPS_CLASS, 0, #WS_POPUP | #TTS_ALWAYSTIP, 0, 0, 0, 0, WindowID(Window), 0, GetModuleHandle_(0), 0)
  
  TOOLINFO.TOOLINFO\cbSize = SizeOf(TOOLINFO)
  TOOLINFO\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
  TOOLINFO\hwnd = WindowID(Window)
  TOOLINFO\uId = GadgetID(Gadget)
  TOOLINFO\lpszText = @""
  SendMessage_(ToolTipWindow, #TTM_ADDTOOL, 0, TOOLINFO)
  SendMessage_(ToolTipWindow, #TTM_ACTIVATE, 0, 0)
  SendMessage_(ToolTipWindow, #TTM_SETMAXTIPWIDTH, 0, 1024)
  SendMessage_(ToolTipWindow, #TTM_SETDELAYTIME, #TTDT_INITIAL, 0)
  SendMessage_(ToolTipWindow, #TTM_SETDELAYTIME, #TTDT_AUTOPOP, 30000)
  SendMessage_(ToolTipWindow, #TTM_SETMAXTIPWIDTH, 0, 500)
  
EndProcedure

Procedure ChangeToolTipWindow(Window, Gadget, Text.s)
  Protected TOOLINFO.TOOLINFO
  
  TOOLINFO.TOOLINFO\cbSize = SizeOf(TOOLINFO)
  TOOLINFO\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
  TOOLINFO\hWnd = WindowID(Window)
  TOOLINFO\uId = GadgetID(Gadget)
  TOOLINFO\lpszText = @Text
  SendMessage_(ToolTipWindow, #TTM_SETTOOLINFO, 0, TOOLINFO)
  
EndProcedure

Procedure ListIconProc(hWnd, uMsg, wParam, lParam)
  Protected LVHITTESTINFO.LVHITTESTINFO
  
  Select uMsg
    Case #WM_MOUSELEAVE
      SendMessage_(ToolTipWindow, #TTM_ACTIVATE, 0, 0)
      LastListIconItemX = -1
    Case #WM_MOUSEMOVE
      LVHITTESTINFO\pt\x = lparam & $FFFF
      LVHITTESTINFO\pt\y = lparam >> 16
      SendMessage_(hwnd, #LVM_SUBITEMHITTEST, 0, LVHITTESTINFO)
      
      If LVHITTESTINFO\iItem = -1
        SendMessage_(ToolTipWindow, #TTM_ACTIVATE, 0, 0)
        LastListIconItemX = -1
      Else
        If LastListIconItemX <> LVHITTESTINFO\iItem Or LastListIconItemY <> LVHITTESTINFO\iSubItem
          SendMessage_(ToolTipWindow, #TTM_ACTIVATE, 1, 0)
          SendMessage_(ToolTipWindow, #TTM_POPUP, 0, 0)
          ChangeToolTipWindow(0, GetProp_(hWnd, "PB_ID"), GetGadgetItemText(GetProp_(hWnd, "PB_ID"), LVHITTESTINFO\iItem, LVHITTESTINFO\iSubItem))
          
          LastListIconItemX = LVHITTESTINFO\iItem
          LastListIconItemY = LVHITTESTINFO\iSubItem
        EndIf
      EndIf
      
  EndSelect
  
  ProcedureReturn CallWindowProc_(ListIconProc, hWnd, uMsg, wParam, lParam)
EndProcedure

If OpenWindow(0, 0, 0, 250, 200, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(1, 0, 0, WindowWidth(0), WindowHeight(0), "Spalte", 200, 0)
  
  AddGadgetItem(1, -1, "Überall dieselbe alte Leier. " + Chr(13) + "Das Layout ist fertig, der Text lässt auf sich warten.", 0, 0)
  AddGadgetItem(1, -1, "Das Layout ist fertig, der Text lässt auf sich warten. " + Chr(13) + "Überall dieselbe alte Leier.", 0, 0)
  
  CreateToolTipWindow(0, 1)
  ListIconProc = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @ListIconProc())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: ListIconGadget - ToolTip mit Zeilenumbruch

Beitrag von Nino »

Cool. 8)
Vielen Dank, dass Du die Lösung hier gepostet hast!
Antworten