[已解决]如何解决桌面滚动文字遇到白色背景不清晰问题?
本帖最后由 lujd0429 于 2012-4-5 17:56 编辑如何解决桌面滚动文字遇到白色背景不清晰问题?谢了
AutoIt代码如下
#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
#Include <GDIPlusEx.au3>
#Include <WinAPIEx.au3>
#Include <WindowsConstants.au3>
;#include <array.au3>
Opt('MustDeclareVars', 1)
Global $left=@DesktopWidth
Local $hGUI, $hWnd, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout, $aInfo
Local $sString = "Hello world"&@CRLF&"滚动字幕测试,为了增加长度再来一次,不知道中英文混合的效果如何? this is a 测试!"&@CRLF&"abcdefghijklmnop"
$aInfo=_GetStringsize($sString,"微软雅黑",12,2,400);只需注意这里设置的字体设置与LABEL的字体一致
Local $W=DllStructGetData($aInfo,3)
Local $H=DllStructGetData($aInfo,4)
$hGUI = GUICreate("GDI+", $W,$H,0-$W,0,0x80000000+0x00000200,0x02000000+0x00080000+0x00000020)
GUISetBkColor(0x010101)
GUICtrlCreateLabel($sString,0,0,$W,$H)
GUICtrlSetFont(-1,12,400,2,"微软雅黑");控件ID, 大小 , 权值 , 属性 , 字体名
GUICtrlSetColor(-1,0x00FFFF)
GUICtrlSetBkColor(-1,-2)
_WinAPI_SetLayeredWindowAttributes($hGUI,0xff010101,255,0x03,True)
GUISetState()
AdlibRegister("time",50)
while GUIGetMsg()+3
WEnd
Func time()
if $left<0-$W then
AdlibUnRegister("time")
Exit
EndIf
WinMove($hGUI,"",$left,0)
$left-=1
EndFunc
#cs
Name :_GetStringsize
Description :返回字符串像素宽,高
Syntax :_GetStringsize($sString,$Font_Family,$Font_Size,$Font_iStyle)
Parameters: $sString - 输入的字符串
$Font_Family - 字体族
$Font_Size - 字体大小
$Font_iStyle - 字体样式. 可以结合下面的值:
0 - 正常重度或者浓度
2 - 斜体
4 - 下划线
8 - 删除线
$Font_weight - 字体权值
400 - (正常)
800 - (粗体)
Return values: 成功:返回下格式数组:
- 接收字符串矩形边界的 $tagGDIPRECTF 结构
- 矩形布局中实际适合的字符数量
- 矩形布局中实际适合的行数
失败 - 返回 0
#ce
Func _GetStringsize($sString,$Font_Family,$Font_Size,$Font_iStyle,$Font_weight)
if BitAND($Font_iStyle,1)=1 then $Font_iStyle=$Font_iStyle-1
if $Font_weight=400 Then
$Font_weight=0
Else
$Font_weight=1
EndIf
_GDIPlus_Startup ()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND (WinGetHandle(@ScriptFullPath))
$hBrush = _GDIPlus_BrushCreateSolid (0xFF00007F)
$hFormat = _GDIPlus_StringFormatCreate ()
$hFamily = _GDIPlus_FontFamilyCreate ($Font_Family)
$hFont = _GDIPlus_FontCreate ($hFamily, $Font_Size, BitOR($Font_iStyle,$Font_weight))
$tLayout = _GDIPlus_RectFCreate (0)
$aInfo = _GDIPlus_GraphicsMeasureString ($hGraphic, $sString, $hFont, $tLayout, $hFormat)
if $aInfo=0 then Return SetError(0)
_GDIPlus_FontDispose ($hFont)
_GDIPlus_FontFamilyDispose ($hFamily)
_GDIPlus_StringFormatDispose ($hFormat)
_GDIPlus_BrushDispose ($hBrush)
_GDIPlus_GraphicsDispose ($hGraphic)
_GDIPlus_Shutdown ()
return $aInfo
EndFunc
注:本代码转载自:3smile 个人思路:
降低透明度或者更换对应的文字的颜色! 回复 2# user3000
这也是一种思路,先尝试一下,多做做测试应该能够找到方法~{:1_413:} 第23行改为:
GUICtrlSetFont(-1,12,400,2,"微软雅黑",3);控件ID, 大小 , 权值 , 属性 , 字体名,字体质量 回复 4# 3mile
谢谢~ 3mile元老 ! 你的方法很管用!但是我想问一下,如何实现像播放器歌词显示一样在透明背景上滚动文字啊?我学习AutoIt快2个多月了,利用课余时间认真的看了一遍帮助文档,可是还是不太清楚如何来实现,请见谅!{:1_404:}
回复 5# lujd0429
这个AU3我还没能领悟这点 易语言我倒是会 回复 6# vason1019
太考验我的极限啦{:1_569:}
页:
[1]