Sign in to follow this  
Followers 0
Chefito

Change the color and the size of font of a object Edit

12 posts in this topic

Hello people.

How do I change the color of the control Edit (background color), and the size and color of the font in a control Edit created with the function _GUICtrlEdit_Create?

Thank you.

Share this post


Link to post
Share on other sites



Wow, very pretty :P .

I Look up the RichEdit.

Picasso is a machine :) .

Thank you very much.

Share this post


Link to post
Share on other sites

Another simpler approach:

#include <GuiConstantsEx.au3>
#include <FontConstants.au3>
#include <WindowsConstants.au3>

GUICreate("Test", 300, 200)

$edit = GUICtrlCreateEdit("Hello world!", 10, 10, 280, 180)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor(-1, 0x9BFF9B)
GUICtrlSetState(-1, $GUI_FOCUS)

_SetFont(GUICtrlGetHandle($edit), 12, 800, 2, "Arial")

GUISetState()

Do
Until GUIGetMsg() = -3

Func _SetFont($hWnd, $nFontSize, $nFontWeight, $nFontAtrribute, $nFont)
    Local $hDc = DllCall("user32.dll", "hwnd", "GetDC", "hwnd", $hWnd)
    Local $nPixel = DllCall("gdi32.dll", "int", "GetDeviceCaps", "hwnd", $hDc[0], "int", $LOGPIXELSY)
    Local $nHeight = DllCall("kernel32.dll", "int", "MulDiv", "int", $nFontSize, "int", $nPixel[0], "int", 72)

    Local $hFont = DllCall("gdi32.dll", "hwnd", "CreateFont", "int", $nHeight[0], "int", 0, _
                           "int", 0, "int", 0, "int", $nFontWeight, "dword", BitAND($nFontAtrribute, 2), _
                           "dword", BitAND($nFontAtrribute, 4), "dword", BitAND($nFontAtrribute, 8), "int", $DEFAULT_CHARSET, _
                           "int", $OUT_DEFAULT_PRECIS, "int", $CLIP_DEFAULT_PRECIS, "int", $DEFAULT_QUALITY, "int", 0, _
                           "str", $nFont)

    DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, "int", $WM_SETFONT, "int", $hFont[0], "int", 1)
    
    DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $hWnd, "hwnd", $hDc[0])
    DllCall("user32.dll", "int", "DeleteObject", "hwnd", $hFont[0])
EndFunc
muttley

Share this post


Link to post
Share on other sites

Thank you all for your responses.

Especially to rasim. That function is what needed.

Very good work rasim. You have me saved muttley

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

Hi again.

I tested this code and does not work the backcolor control and the color of font:

#include <GuiConstantsEx.au3>
#include <FontConstants.au3>
#include <WindowsConstants.au3>
#Include <GuiEdit.au3>

$gui=GUICreate("Test", 300, 200)
$edit = _GUICtrlEdit_Create($gui,"Hello world!", 10, 10, 280, 180)
GUICtrlSetColor(-1, 0xFF0000);not work
GUICtrlSetBkColor(-1, 0x9BFF9B);not work
_SetFont($edit, 16, 800, 2, "Arial")

GUISetState()

Do
Until GUIGetMsg() = -3

Func _SetFont($hWnd, $nFontSize, $nFontWeight, $nFontAtrribute, $nFont)
Local $hDc = DllCall("user32.dll", "hwnd", "GetDC", "hwnd", $hWnd)
Local $nPixel = DllCall("gdi32.dll", "int", "GetDeviceCaps", "hwnd", $hDc[0], "int", $LOGPIXELSY)
Local $nHeight = DllCall("kernel32.dll", "int", "MulDiv", "int", $nFontSize, "int", $nPixel[0], "int", 72)

Local $hFont = DllCall("gdi32.dll", "hwnd", "CreateFont", "int", $nHeight[0], "int", 0, _
"int", 0, "int", 0, "int", $nFontWeight, "dword", BitAND($nFontAtrribute, 2), _
"dword", BitAND($nFontAtrribute, 4), "dword", BitAND($nFontAtrribute, 8), "int", $DEFAULT_CHARSET, _
"int", $OUT_DEFAULT_PRECIS, "int", $CLIP_DEFAULT_PRECIS, "int", $DEFAULT_QUALITY, "int", 0, _
"str", $nFont)

DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, "int", $WM_SETFONT, "int", $hFont[0], "int", 1)

DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $hWnd, "hwnd", $hDc[0])
DllCall("user32.dll", "int", "DeleteObject", "hwnd", $hFont[0])
EndFunc

This only works with the function GUICtrlCreateEdit (controlID).

Is there a way to solve this? Did you call SendMessage? How?

My problem is I made a counter that looked very fast in a control label, but failed the refresh, and saw a flickering effect.

This happened with the function GUICtrlCreateLabel and with the function GUICtrlCreateEdit, but it don´t happen with _GUICtrlEdit_Create.

Another thing, can we create a control label with apis?

It is this option in the UDF.

If this can not with a control label, this will do with a control Edit blocked.

thanks.

Edited by Chefito

Share this post


Link to post
Share on other sites

#9 ·  Posted (edited)

Chefito

Try this:

#include <FontConstants.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>

$hGUI = GUICreate("Test", 300, 200)

$hEdit = _GUICtrlEdit_Create($hGUI, "Hello world!", 10, 10, 280, 180)

_SetFont($hEdit, 12, 800, 2, "Arial")

GUIRegisterMsg($WM_CTLCOLOREDIT, "WM_CTLCOLOREDIT")

GUISetState()

Do
Until GUIGetMsg() = -3

Func _SetFont($hWnd, $nFontSize, $nFontWeight, $nFontAtrribute, $nFont)
    Local $hDc = DllCall("user32.dll", "hwnd", "GetDC", "hwnd", $hWnd)
    Local $nPixel = DllCall("gdi32.dll", "int", "GetDeviceCaps", "hwnd", $hDc[0], "int", $LOGPIXELSY)
    Local $nHeight = DllCall("kernel32.dll", "int", "MulDiv", "int", $nFontSize, "int", $nPixel[0], "int", 72)

    Local $hFont = DllCall("gdi32.dll", "hwnd", "CreateFont", "int", $nHeight[0], "int", 0, _
                           "int", 0, "int", 0, "int", $nFontWeight, "dword", BitAND($nFontAtrribute, 2), _
                           "dword", BitAND($nFontAtrribute, 4), "dword", BitAND($nFontAtrribute, 8), "int", $DEFAULT_CHARSET, _
                           "int", $OUT_DEFAULT_PRECIS, "int", $CLIP_DEFAULT_PRECIS, "int", $DEFAULT_QUALITY, "int", 0, _
                           "str", $nFont)

    DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, "int", $WM_SETFONT, "int", $hFont[0], "int", 1)
    
    DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $hWnd, "hwnd", $hDc[0])
    DllCall("user32.dll", "int", "DeleteObject", "hwnd", $hFont[0])
EndFunc

Func WM_CTLCOLOREDIT($hWnd, $Msg, $wParam, $lParam)
    DllCall("gdi32.dll", "int", "SetBkColor", "hwnd", $wParam, "int", 0xFF0000)
    DllCall("gdi32.dll", "int", "SetTextColor", "hwnd", $wParam, "int", 0x0000FF)
    Return True
EndFunc

Edit: also you may to use GUICtrlCreateEdit() function with GuiEdit.au3 UDF functions.

Edited by rasim

Share this post


Link to post
Share on other sites

Forgive it has taken so long to respond.

Thank you for your reply. It is very interesting. But is not exactly what I want. Do not paint the background of control, only the background of the text.

And moreover, affects all edit controls.

I think I'll have to watch the GuiEdit.au3 UDF functions.

Thank you very much.

Share this post


Link to post
Share on other sites

Chefito

Do not paint the background of control, only the background of the text.

OK! Try this:

#include <FontConstants.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>

Global Const $TRANSPARENT = 1

$hGUI = GUICreate("Test", 300, 200)

$hEdit = _GUICtrlEdit_Create($hGUI, "", 10, 10, 280, 180)

_SetFont($hEdit, 12, 800, 1, "MS Sans Serif")

GUIRegisterMsg($WM_CTLCOLOREDIT, "WM_CTLCOLOREDIT")

GUISetState()

Do
Until GUIGetMsg() = -3

Func _SetFont($hWnd, $nFontSize, $nFontWeight, $nFontAtrribute, $nFont)
    Local $hDc = DllCall("user32.dll", "hwnd", "GetDC", "hwnd", $hWnd)
    Local $nPixel = DllCall("gdi32.dll", "int", "GetDeviceCaps", "hwnd", $hDc[0], "int", $LOGPIXELSY)
    Local $nHeight = DllCall("kernel32.dll", "int", "MulDiv", "int", $nFontSize, "int", $nPixel[0], "int", 72)

    Local $hFont = DllCall("gdi32.dll", "hwnd", "CreateFont", "int", $nHeight[0], "int", 0, _
                           "int", 0, "int", 0, "int", $nFontWeight, "dword", BitAND($nFontAtrribute, 2), _
                           "dword", BitAND($nFontAtrribute, 4), "dword", BitAND($nFontAtrribute, 8), "int", $DEFAULT_CHARSET, _
                           "int", $OUT_DEFAULT_PRECIS, "int", $CLIP_DEFAULT_PRECIS, "int", $DEFAULT_QUALITY, "int", 0, _
                           "str", $nFont)

    DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, "int", $WM_SETFONT, "int", $hFont[0], "int", 1)
    
    DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $hWnd, "hwnd", $hDc[0])
    DllCall("user32.dll", "int", "DeleteObject", "hwnd", $hFont[0])
EndFunc

Func WM_CTLCOLOREDIT($hWnd, $Msg, $wParam, $lParam)
    Switch $lParam
        Case $hEdit
            DllCall("gdi32.dll", "int", "SetBkMode", "hwnd", $wParam, "int", $TRANSPARENT)
            DllCall("gdi32.dll", "int", "SetTextColor", "hwnd", $wParam, "int", 0x0000FF)
            $aResult = DllCall("GDI32.dll", "hwnd", "GetStockObject", "int", 0)
            Return $aResult[0]
    EndSwitch
    
    Return "GUI_RUNDEFMSG"
EndFunc

Share this post


Link to post
Share on other sites

#12 ·  Posted (edited)

Nothing. It does not work the background color control Edit.

I have done this, but the refresh is bad. It seems that it is a great defect of AutoIt.

#include <FontConstants.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#include <winapi.au3>
#include <GuiConstantsEx.au3>


$hGUI = GUICreate("Test", 300, 200)
GUISetBkColor(0x0a0a0a)
$hEdit = _GUICtrlEdit_Create($hGUI, "", 10, 10, 100, 24,$ES_MULTILINE+$ES_READONLY+$ES_CENTER,0)
;ControlDisable("Test","","Edit1")
_SetFont($hEdit, 18, 800, 1, "MS Sans Serif")
GUIRegisterMsg($WM_CTLCOLORSTATIC, "WM_CTLCOLORSTATIC")
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUISetState()
;_GUICtrlEdit_SetText($hEdit,"0")
Global $cont=0
Do
    Sleep(30)
    _GUICtrlEdit_SetText($hEdit,$cont)
    $cont=$cont+1
Until GUIGetMsg() = -3

Func _SetFont($hWnd, $nFontSize, $nFontWeight, $nFontAtrribute, $nFont)
Local $hDc = DllCall("user32.dll", "hwnd", "GetDC", "hwnd", $hWnd)
Local $nPixel = DllCall("gdi32.dll", "int", "GetDeviceCaps", "hwnd", $hDc[0], "int", $LOGPIXELSY)
Local $nHeight = DllCall("kernel32.dll", "int", "MulDiv", "int", $nFontSize, "int", $nPixel[0], "int", 72)

Local $hFont = DllCall("gdi32.dll", "hwnd", "CreateFont", "int", $nHeight[0], "int", 0, _
"int", 0, "int", 0, "int", $nFontWeight, "dword", BitAND($nFontAtrribute, 2), _
"dword", BitAND($nFontAtrribute, 4), "dword", BitAND($nFontAtrribute, 8), "int", $DEFAULT_CHARSET, _
"int", $OUT_DEFAULT_PRECIS, "int", $CLIP_DEFAULT_PRECIS, "int", $DEFAULT_QUALITY, "int", 0, _
"str", $nFont)

DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, "int", $WM_SETFONT, "int", $hFont[0], "int", 1)

DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $hWnd, "hwnd", $hDc[0])
DllCall("user32.dll", "int", "DeleteObject", "hwnd", $hFont[0])
EndFunc

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
    If Not IsHWnd($hEdit) Then $hWndEdit = GUICtrlGetHandle($hEdit)
    $hWndFrom = $ilParam
    $iIDFrom = _WinAPI_LoWord($iwParam)
    $iCode = _WinAPI_HiWord($iwParam)
    Switch $hWndFrom
        Case $hEdit, $hWndEdit
            Switch $iCode
                Case $EN_SETFOCUS; Sent when an edit control receives the keyboard focus
                    _WinAPI_SetFocus($hGUI)
                 ; no return value
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc;==>WM_COMMAND

Func WM_CTLCOLORSTATIC($hWnd, $Msg, $wParam, $lParam)
Switch $lParam
    Case $hEdit
        SetTextColor($wParam,0x00ff00)
        SetBkColor($wParam,0xff0000)
    Return 1
EndSwitch

Return $GUI_RUNDEFMSG
EndFunc

Func SetBkColor($hDC, $nColor)
    $h=_WinAPI_SetBkColor($hDC,$nColor)
    Return $h
EndFunc 


Func SetTextColor($hDC, $nColor)
    $h=_WinAPI_SetTextColor($hDC,$nColor)
    Return $h
EndFunc

Overall, I'm having a lot of problems with the refresh of the gui.

In my program, when I load a page web, It do a small flickering the window (disappears for a moment).

My code is very big. It may be by this. I don´t Know.

I load the page web in a control IE.

Edited by Chefito

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0