Показать полную графическую версию : [решено] GUIConstants и GUICreate
FlatX007
08-05-2009, 20:07
Может вопросы и простые но мне нужно узнать на них ответ, ибо сам я немогу найти решение.
1. При создании GUI окна пример:
#include <GUIConstants.au3>
GUICreate ( "title" , 100 , 100, -1, -1, BitOr($GUI_SS_DEFAULT_GUI, $WS_EX_APPWINDOW))
.......
Выдаёт ошибку, комбинации стилей любые не только эти.
Заработало только вот так :
#include <GUIConstants.au3>
GUICreate ( "title" , 100 , 100, -1, -1, BitOr(0x00800000, 0x00000008))
.......
Файлы GUIConstants.au3 и GUIConstantsEx.au3 - на своём месте C:\Program Files\AutoIt3\Include\
2. Как можно создать GUI окно (GUICreate), что бы оно растягивалось взависимости от количества текста в заголовке окна?
3. Как можно создать GUI окно (GUICreate), что бы оно не отображалось в панели задачь ?
Выдаёт ошибку, комбинации стилей любые не только эти »
Эти константы объявлены в WindowsConstants.au3.
Как можно создать GUI окно (GUICreate), что бы оно растягивалось взависимости от количества текста в заголовке окна? »
Примерно так:
#include <GUIConstantsEx.au3>
$sApp_Title = 'Some Title'
;$sApp_Title = 'Or some long long long long long long long title'
$iGUI_Width = (StringLen($sApp_Title) * 5) + 130
$GUI = GUICreate($sApp_Title, $iGUI_Width, 320)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Как можно создать GUI окно (GUICreate), что бы оно не отображалось в панели задачь ? »
Только через стиль $WS_EX_TOOLWINDOW.
FlatX007
08-05-2009, 23:05
Примерно так: »
Не неполучается ... у разных символов разная длинна (/\":<>) - буквы то нормально умещаются :)
я так тоже делал как ты предложил ... если былобы так просто то я бы неспрашивал ;)
я так полагаю надо отделить буквы и цифры от символов через StringRegExpReplace - но я к сожелению неумею пользоватся этой функцией .(количество не буквенных и не циферных символов известно например 10).
Я делал так : определял длинну строки, результат умножал на 10 потом из результата вычитал ранее извесное число небуквенных и нециферных символов ... это и будет ширина окна - примернооооо "точно" получалось...
что можно сделать ?
Не неполучается ... у разных символов разная длинна (/\":<>) »
Пример где оно не получается.
FlatX007
09-05-2009, 00:00
Вобщем выдрал из скрипта часть кода ...
#include <GUIConstantsEx.au3>
$StatSetting_ini = @ScriptDir & '\' & "StatSetting.ini"
Global $rD1 = 0, $rD2 = 0, $rD3 = 0, $rD4 = 0, $rD5 = 0, $rD1 = 0, $rD6 = 0
$rD1 = IniRead($StatSetting_ini, "Длинна строки", "Баланс", 0)
$rD2 = IniRead($StatSetting_ini, "Длинна строки", "Израсходовано", 0)
$rD3 = IniRead($StatSetting_ini, "Длинна строки", "Предоплаченны", 0)
$rD4 = IniRead($StatSetting_ini, "Длинна строки", "Осталось", 0)
$rD5 = IniRead($StatSetting_ini, "Длинна строки", "Время", 0)
$rD6 = IniRead($StatSetting_ini, "Длинна строки", "Разделитель", 0)
$Sparam = ($rD1 & $rD2 & $rD3 & $rD4 & $rD5 & $rD6)
$iGUI_Width = (StringLen($Sparam) * 5) + 130
$Form2 = GUICreate($Sparam, $iGUI_Width, 10, 0, 0)
GUISetState(@SW_SHOW)
$f = 1
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
StatSetting.ini
[Длинна строки]
Баланс= # Баланс : 90.79руб. #
Израсходовано= # Израсх : 60.93 (Мб) #
Предоплаченны= # Предопл : 200 (Мб) #
Осталось= # Ост : 139.07 (Мб) #
Время= # Обновл : 23:54:15 (23:54:15) #
Разделитель=#
#include <GUIConstantsEx.au3>
$StatSetting_ini = @ScriptDir & '\' & "StatSetting.ini"
Global $rD1 = 0, $rD2 = 0, $rD3 = 0, $rD4 = 0, $rD5 = 0, $rD1 = 0, $rD6 = 0
$rD1 = IniRead($StatSetting_ini, "Длинна строки", "Баланс", 0)
$rD2 = IniRead($StatSetting_ini, "Длинна строки", "Израсходовано", 0)
$rD3 = IniRead($StatSetting_ini, "Длинна строки", "Предоплаченны", 0)
$rD4 = IniRead($StatSetting_ini, "Длинна строки", "Осталось", 0)
$rD5 = IniRead($StatSetting_ini, "Длинна строки", "Время", 0)
$rD6 = IniRead($StatSetting_ini, "Длинна строки", "Разделитель", 0)
$sTitle = _
"# Баланс : 90.79руб. ## Израсх : 60.93 (Мб) ## Предопл : 200 (Мб) ##" & _
"Ост : 139.07 (Мб) ## Обновл : 23:54:15 (23:54:15) ##"
;$sTitle = $rD1 & $rD2 & $rD3 & $rD4 & $rD5 & $rD6
$iGUI_Width = _GUIGetTitleWidth($sTitle)
$Form2 = GUICreate($sTitle, $iGUI_Width, 10, 0, 0)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _GUIGetTitleWidth($sTitle)
Local $aChars = StringSplit($sTitle, "")
Local $iLength = 0
For $i = 1 To $aChars[0]
If StringIsUpper($aChars[$i]) Or StringRegExp($aChars[$i], "[~!@#$%^&*\(\){}\[\]:;'""<>/\\]") Then
$iLength += 1.5
Else
$iLength += 1
EndIf
Next
Return (Int($iLength) * 5) + 120
EndFunc
Можно тюнингом заниматься долго, всё ровно это неверное решение с программной точки зрения :) ...
Вообщем вот грубая наброска того, как оно (вроде) должно быть:
#include <GUIConstantsEx.au3>
$StatSetting_ini = @ScriptDir & '\' & "StatSetting.ini"
Global $rD1 = 0, $rD2 = 0, $rD3 = 0, $rD4 = 0, $rD5 = 0, $rD1 = 0, $rD6 = 0
$rD1 = IniRead($StatSetting_ini, "Длинна строки", "Баланс", 0)
$rD2 = IniRead($StatSetting_ini, "Длинна строки", "Израсходовано", 0)
$rD3 = IniRead($StatSetting_ini, "Длинна строки", "Предоплаченны", 0)
$rD4 = IniRead($StatSetting_ini, "Длинна строки", "Осталось", 0)
$rD5 = IniRead($StatSetting_ini, "Длинна строки", "Время", 0)
$rD6 = IniRead($StatSetting_ini, "Длинна строки", "Разделитель", 0)
$sTitle = _
"# Баланс : 90.79руб. ## Израсх : 60.93 (Мб) ## Предопл : 200 (Мб) ##" & _
"Ост : 139.07 (Мб) ## Обновл : 23:54:15 (23:54:15) ##"
;$sTitle = $rD1 & $rD2 & $rD3 & $rD4 & $rD5 & $rD6
$hForm = GUICreate($sTitle, -1, 10, 0, 0)
$iGUI_Width = _GUIGetTitleWidthEx($hForm, $sTitle)
WinMove($hForm, "", 0, 0, $iGUI_Width[0])
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _GUIGetTitleWidthEx($hWnd, $s_Data)
Local Const $WM_GETFONT = 0x31
Local $hDC = DLLCall("user32.dll", "int", "GetDC", "hwnd", $hWnd)
Local $hFont = DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_GETFONT, "int", 0, "int", 0)
Local $hOld = DllCall("gdi32.dll", "Hwnd", "SelectObject", "int", $hDC[0], "ptr", $hFont[0])
Local $iStruct_size = DllStructCreate("int;int")
DllCall("gdi32.dll", "int", "GetTextExtentPoint32", _
"int", $hDC[0], "str", $s_Data, "long", _StringGetProperLen($s_Data), "ptr", DllStructGetPtr($iStruct_size))
$hOld = DllCall("gdi32.dll", "Hwnd", "SelectObject", "int", $hDC[0], "ptr", $hOld)
Local $a_RetLen[2] = [DllStructGetData($iStruct_size, 1), DllStructGetData($iStruct_size, 2)]
DLLCall("user32.dll","int", "ReleaseDC", "hwnd", $hWnd, "int", $hDC[0])
$iStruct_size = 0
Return $a_RetLen
EndFunc
Func _StringGetProperLen($sString)
;Here we increese the UPPER letters by 0.5 (length of one 'A' will be equel 1.5, not 1).
StringRegExpReplace($sString, "[A-ZА-Я]", "")
Local $iExtended = @extended ;The number of UPPER case letters
Local $iLength = Ceiling((StringLen($sString) - $iExtended) + ($iExtended + ($iExtended * 0.5)))
Switch $iLength
Case 1 To 10
$iLength += 30
Case 11 To 20
$iLength += 25
Case 21 To 40
$iLength += 20
Case 41 To 90
$iLength += 15
EndSwitch
Return $iLength
EndFunc
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.