GELÖSCHT
Re: HyperLinkGadget - Keine fixe Breite?
Ich würde sagen den gleichen Text mit gleichem Font mit TextWidth() aus den 2DDrawing-Funktionen ausmessen.
Ne Krücke, temporär über nen Image, ich weis, müßte aber gehen.
Ne Krücke, temporär über nen Image, ich weis, müßte aber gehen.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Re: HyperLinkGadget - Keine fixe Breite?
Alternativ wäre es, ein SysLink-API-Control zu verwenden:
Code: Alles auswählen
;Autor: nico
;Nur mit XP-Skin
EnableExplicit
Define EventID
Define LinkHTML$="<a href="+Chr(34)+"http://www.purebasic.fr/german/index.php"+Chr(34)+">PureBoard</a>"
Define SysLinkHandle
#MAX_LINKID_TEXT=48
#L_MAX_URL_LENGTH=2083
Structure LITEM
mask.l
iLink.l
state.l
stateMask.l
szID.w[#MAX_LINKID_TEXT]
szUrl.w[#L_MAX_URL_LENGTH]
EndStructure
Structure NMLINK
hdr.NMHDR
item.LITEM
EndStructure
Procedure.s Uni2Ansi(*Unicode.l)
Protected size.l
Protected ansi.s
size.l = WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, #Null, #Null, #Null, #Null)
ansi.s=Space(size)
WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, @ansi, size, #Null, #Null)
ProcedureReturn ansi
EndProcedure
Procedure WindowCallback(hwnd,msg,wparam,lparam)
Protected result
Protected *nmhdr.NMHDR
Protected *LINK.NMLINK
Protected *pointeur
Protected chaine.s
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_NOTIFY
*nmhdr.NMHDR=lParam
Select *nmhdr\code
Case #NM_CLICK
*LINK.NMLINK = lParam
*pointeur=AllocateMemory(100)
CopyMemory(@*LINK\item\szUrl[0],*pointeur,100)
chaine=Uni2Ansi(*pointeur)
Debug chaine
FreeMemory(*pointeur)
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SysLinkHandle = CreateWindowEx_(0, "SysLink", LinkHTML$, #WS_CHILD | #WS_VISIBLE, 10, 10, 100, 20, WindowID(0), 2, 0, 0)
SetWindowCallback(@WindowCallback())
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIf
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: HyperLinkGadget - Keine fixe Breite?
Die von RSBasic gepostete Alternative, geändert, so das wirklich Unicode und ASCII funktionieren
Außerdem wurde dabei gleich dieser seit ewigen Zeiten unnötige Uni2Ascii Quatsch entfernt.
Gruß
Thomas

Außerdem wurde dabei gleich dieser seit ewigen Zeiten unnötige Uni2Ascii Quatsch entfernt.
Code: Alles auswählen
;Autor: nico
;Nur mit XP-Skin
EnableExplicit
Define EventID
Define LinkHTML$="<a href=" + Chr(34) + "http://www.purebasic.fr/german/index.php" + Chr(34) + ">PureBoard</a>"
Define SysLinkHandle
#MAX_LINKID_TEXT = 48
#L_MAX_URL_LENGTH = 2083
Structure LITEM
mask.l
iLink.l
state.l
stateMask.l
szID.w[#MAX_LINKID_TEXT]
szUrl.w[#L_MAX_URL_LENGTH]
EndStructure
Structure NMLINK
hdr.NMHDR
item.LITEM
EndStructure
Procedure WindowCallback(hwnd, msg, wparam, lparam)
Protected result
Protected *nmhdr.NMHDR
Protected *LINK.NMLINK
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_NOTIFY
*nmhdr.NMHDR = lParam
Select *nmhdr\code
Case #NM_CLICK
*LINK.NMLINK = lParam
Debug PeekS(@*LINK\item\szUrl[0], -1, #PB_Unicode)
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SysLinkHandle = CreateWindowEx_(0, "SysLink", LinkHTML$, #WS_CHILD | #WS_VISIBLE, 10, 10, 100, 20, WindowID(0), 2, 0, 0)
SetWindowCallback(@WindowCallback())
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIf
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: HyperLinkGadget - Keine fixe Breite?
Danke Thomas für die Anpassung. 
