Jump to content

WINAPI_DrawText


Recommended Posts

In this script, I have successfully got it to display the text on screen. The only thing I cannot get it to do is remove the text. The text remains onscreen after the script exits. It does not disappear until I refresh the screen or open a new window. I thought the Redraw line would do this for me but is not working. I hope someone can tell me how to remove the text from the screen without having to refresh or open a new window.

Thanks.

#Include<StructureConstants.au3>

#Include <WinAPI.au3>

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

#include <FontConstants.au3>

$hDC = _WinAPI_GetDC(0);Gets handle of entire screen

_WinAPI_SetTextColor($hDC, "0x0000FF");Sets color of text

$bkmode = DllCall("GDI32.dll", "int", "SetBkMode", "hwnd", $hDC, "int", "TRANSPARENT");Sets background of text to Transparent

$font = _WinAPI_CreateFont(50,15);Creates a font 50 pixels high and 15 pixels/character wide

_WinAPI_SelectObject($hDC, $font);Selects newly created font

$sText = "Hello world, this is my test message!";Sets actual message to be displayed.

$rect = DllStructCreate($tagRECT);Creates region where text is to be displayed.

DllStructSetData($rect,1,0)

DllStructSetData($rect,2,0)

DllStructSetData($rect,3,1280)

DllStructSetData($rect,4,50)

$iFlags = "$DT_CENTER";Sets how text is positioned in region.

_WinAPI_DrawText($hDC, $sText, $rect, $DT_RIGHT);Draws the text

sleep(1000);Waits 1 second

_WinAPI_RedrawWindow("","","",$RDW_UPDATENOW);Should repaint the entire screen to remove the text but does not work.

Link to comment
Share on other sites

Just use _WinAPI_GetDesktopWindow() and some more flags :P

_WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(),"","",BitOR($RDW_INVALIDATE,$RDW_UPDATENOW,$RDW_FRAME,$RDW_ALLCHILDREN))

*GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes

Link to comment
Share on other sites

Awesome, thank you very much.

Hi, you helped me with my DrawText problem and clearing it off the screen. I now have a new problem. I can't seem to get drawtext to show up over video. Here is my script again. I am just using it to display date and time while watching movies. Do you know how I can get it to work when full screen video is playing?

Thank you again.

#Include<StructureConstants.au3>

#Include <WinAPI.au3>

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

#include <FontConstants.au3>

#include <date.au3>

Opt("TrayIconHide", 1)

$hDC = _WinAPI_GetDC(0);Gets handle of entire screen

_WinAPI_SetTextColor($hDC, "0x0000FF");Sets color of text

$bkmode = DllCall("GDI32.dll", "int", "SetBkMode", "hwnd", $hDC, "int", "TRANSPARENT");Sets background of text to Transparent

$font = _WinAPI_CreateFont(80,25,0,0,1500);Creates a font 50 pixels high and 15 pixels/character wide

_WinAPI_SelectObject($hDC, $font);Selects newly created font

$sText = _Now ( );Sets actual message to be displayed.

$rect = DllStructCreate($tagRECT);Creates region where text is to be displayed.

DllStructSetData($rect,1,1340)

DllStructSetData($rect,2,20)

DllStructSetData($rect,3,2440)

DllStructSetData($rect,4,100)

$iFlags = $DT_LEFT;Sets how text is positioned in region.

_WinAPI_DrawText($hDC, $sText, $rect, $iFlags);Draws the text

sleep(10000);Waits 1 second

$hwnd = _WinAPI_GetDesktopWindow();Gets Desktop Handle

_WinAPI_RedrawWindow($hwnd,"","",BitOR($RDW_INVALIDATE,$RDW_UPDATENOW,$RDW_FRAME,$RDW_ALLCHILDREN)) ;Clears the TEXT

Link to comment
Share on other sites

dwhiting

Example:

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

Global Const $TRANSPARENT = 1
Global Const $OPAQUE = 2

HotKeySet("{ESC}", "_Exit")

$string = "Hello world!"

$hDC = DllCall("User32.dll", "hwnd", "GetDC", "hwnd", 0)
$hDC = $hDC[0]

$tRECT = DllStructCreate("dword[4]")

DllStructSetData($tRECT, 1, 5, 1)
DllStructSetData($tRECT, 1, 5, 2)
DllStructSetData($tRECT, 1, 250, 3)
DllStructSetData($tRECT, 1, 50, 4)

Global $hFont = DllCall("gdi32.dll", "hwnd", "CreateFont", "int", 50, "int", 0, _
                       "int", 0, "int", 0, "int", 400, "dword", BitAND(0, 2), _
                       "dword", BitAND(0, 4), "dword", BitAND(0, 8), "int", $DEFAULT_CHARSET, _
                       "int", $OUT_DEFAULT_PRECIS, "int", $CLIP_DEFAULT_PRECIS, "int", $DEFAULT_QUALITY, "int", 0, _
                       "str", "Arial")
                       
$hFont = $hFont[0]

DllCall("gdi32.dll", "int", "SetTextColor", "hwnd", $hDC, "int", 0x0000FF)

DllCall("gdi32.dll", "int", "SetBkColor", "hwnd", $hDC, "int", 0x000000)

Local $OldFont = _WinAPI_SelectObject($hDC, $hFont)

While 1
    _DrawText()
    Sleep(10)
WEnd

_Exit()

Func _DrawText()
    ;DllCall("gdi32.dll", "int", "SetBkMode", "hwnd", $hDC, "int", $TRANSPARENT)
    
    DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "str", $string, "int", StringLen($string), _
            "ptr", DllStructGetPtr($tRECT), "int", $DT_CENTER)
EndFunc
    
Func _Exit()
    _WinAPI_SelectObject($hDC, $OldFont)
    _WinAPI_DeleteObject($hFont)
    _WinAPI_ReleaseDC("", $hDC)
    _WinAPI_InvalidateRect(0, 0)
    Exit
EndFunc
Link to comment
Share on other sites

dwhiting

Example:

rasim I converted your example to use all possible standard WinAPI functions:

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

Global Const $TRANSPARENT = 1
Global Const $OPAQUE = 2

Global $tRECT, $hFont, $OldFont, $hDC 

HotKeySet("{ESC}", "_Exit")

$tRECT = DllStructCreate("dword[4]")
DllStructSetData($tRECT, 1, 5, 1)
DllStructSetData($tRECT, 1, 5, 2)
DllStructSetData($tRECT, 1, 250, 3)
DllStructSetData($tRECT, 1, 50, 4)

$hDC = _WinAPI_GetDC(0)
$hFont = _WinAPI_CreateFont(50, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
            $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial')
$OldFont = _WinAPI_SelectObject($hDC, $hFont)

_WinAPI_SetTextColor($hDC, 0x0000FF)
_WinAPI_SetBkColor($hDC, 0x000000)

While 1
    _DrawText("Hello world!")
    Sleep(100)
WEnd

Func _DrawText($string)
    ;DllCall("gdi32.dll", "int", "SetBkMode", "hwnd", $hDC, "int", $TRANSPARENT)
    _WinAPI_DrawText($hDC, $string, $tRECT, $DT_CENTER)
EndFunc
    Func _Exit()
    _WinAPI_SelectObject($hDC, $OldFont)
    _WinAPI_DeleteObject($hFont)
    _WinAPI_ReleaseDC(0, $hDC)
    _WinAPI_InvalidateRect(0, 0)
    Exit
EndFunc
Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...