Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] GUIConstants и GUICreate (http://forum.oszone.net/showthread.php?t=139631)

FlatX007 08-05-2009 20:07 1113916

GUIConstants и GUICreate
 
Может вопросы и простые но мне нужно узнать на них ответ, ибо сам я немогу найти решение.

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), что бы оно не отображалось в панели задачь ?

Creat0R 08-05-2009 20:54 1113940

Цитата:

Цитата FlatX007
Выдаёт ошибку, комбинации стилей любые не только эти »

Эти константы объявлены в WindowsConstants.au3.

Цитата:

Цитата FlatX007
Как можно создать 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

Цитата:

Цитата FlatX007
Как можно создать GUI окно (GUICreate), что бы оно не отображалось в панели задачь ? »

Только через стиль $WS_EX_TOOLWINDOW.

FlatX007 08-05-2009 23:05 1114051

Цитата:

Цитата Creat0R
Примерно так: »

Не неполучается ... у разных символов разная длинна (/\":<>) - буквы то нормально умещаются :)
я так тоже делал как ты предложил ... если былобы так просто то я бы неспрашивал ;)

я так полагаю надо отделить буквы и цифры от символов через StringRegExpReplace - но я к сожелению неумею пользоватся этой функцией .(количество не буквенных и не циферных символов известно например 10).

Я делал так : определял длинну строки, результат умножал на 10 потом из результата вычитал ранее извесное число небуквенных и нециферных символов ... это и будет ширина окна - примернооооо "точно" получалось...

что можно сделать ?

Creat0R 08-05-2009 23:12 1114056

Цитата:

Цитата FlatX007
Не неполучается ... у разных символов разная длинна (/\":<>) »

Пример где оно не получается.

FlatX007 09-05-2009 00:00 1114078

Вобщем выдрал из скрипта часть кода ...

Код:

#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) #
Разделитель=#


Creat0R 09-05-2009 11:46 1114249

Код:

#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

Можно тюнингом заниматься долго, всё ровно это неверное решение с программной точки зрения :) ...

Creat0R 09-05-2009 12:41 1114287

Вообщем вот грубая наброска того, как оно (вроде) должно быть:

Код:

#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



Время: 23:49.

Время: 23:49.
© OSzone.net 2001-