26 (изменено: serzh82saratov, 2019-03-02 23:46:16)

Re: AHK: Бегущая строка

SleepDuration = 1?
Под производительностью я имею ввиду нагрузку на процессор.
Как то многовато 10%.

Вот мой вариант с битмапом, кроме цвета фона, в bFile можно указать картинку и её прозрачность.
За счёт чего по твоему большая разница в производительности (на одинаковых малых шрифтах)?


#SingleInstance Force
#Persistent  
#NoEnv
SetBatchLines -1
ListLines Off

If !pToken := Gdip_Startup()
{
	MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
	ExitApp
}

String = Бегущая строка

fTrans := 100
fColor := 0xffffff
fTrans := fTrans / 100 * 255
fColor := fTrans << 24 | fColor

bTrans := 100
bTrans := bTrans / 100 * 255
bColor := 0xFBD986
bColor := bTrans << 24 | bColor  ;	ARGB

bFileTrans = 10
bFileTrans := bFileTrans
bFile = logo.png

Margin = 20
Font = Arial 
fColor := Format("{1:08X}", fColor)

X := 111 
Y := 111 
W := 800
H := 300

Gui, -Caption +E0x80000 +HWNDhGui +AlwaysOnTop +ToolWindow +OwnDialogs +E0x08000000
Gui, Show, % "Na x" X " y" Y " w" W " h" H

pBmpBckg := Gdip_CreateBitmap(W, H)
GBckg := Gdip_GraphicsFromImage(pBmpBckg) 
Gdip_SetSmoothingMode(GBckg, 4)

pBrush := Gdip_BrushCreateSolid(bColor)
Gdip_FillRectangle(GBckg, pBrush, 0, 0, W, H)
Gdip_DeleteBrush(pBrush)

pBmpPic := Gdip_CreateBitmapFromFile(bFile)
Gdip_GetImageDimensions(pBmpPic, wPic, hPic)
Matrix := bFileTrans / 100
Gdip_DrawImage(GBckg, pBmpPic, 0, 0, W, H, 0, 0, wPic, hPic, Matrix)
Gdip_DisposeImage(pBmpPic)
Gdip_DeleteGraphics(GBckg)

FontSize := FontAreaH := H - Margin * 2

Loop  ;	Определение размера шрифта исходя из высоты зоны. Надо бы это перепилить.
{
	Options = s%FontSize% Italic c%fColor% vCenter Center r4 Font
	pBmpBuf := Gdip_CreateBitmap(1, 1)
	GBuf := Gdip_GraphicsFromImage(pBmpBuf)
	Gdip_DisposeImage(pBmpBuf)
	Data := Gdip_TextToGraphics(GBuf, String, Options, Font)
	Gdip_DeleteGraphics(GBuf)
	Arr := StrSplit(Data, "|")
	WText := Arr[3], HText := Arr[4]
	If (HText > FontAreaH) && FontSize--
		Continue
	Break
}

pBmpText := Gdip_CreateBitmap(WText, HText)
GText := Gdip_GraphicsFromImage(pBmpText) 
Gdip_SetSmoothingMode(GText, 4)
Data := Gdip_TextToGraphics(GText, String, Options, Font, WText, HText)
Gdip_DeleteGraphics(GText)


pBmpDest := Gdip_CreateBitmap(W, H)
GDest := Gdip_GraphicsFromImage(pBmpDest) 
Gdip_SetSmoothingMode(GDest, 4)
hDCDest := CreateCompatibleDC()

XPos := W + 1

Loop
{
	If (XPos < -WText)
		XPos := W + 1
	Else
		XPos -= 1
	Gdip_DrawImage(GDest, pBmpBckg, 0, 0, W, H, 0, 0, W, H)
	Gdip_DrawImage(GDest, pBmpText, XPos, Margin, WText, HText, 0, 0, WText, HText)
	hBmpDest := Gdip_CreateHBITMAPFromBitmap(pBmpDest, 0x00000000)
	SelectObject(hDCDest, hBmpDest)
	DeleteObject(hBmpDest)
	UpdateLayeredWindow(hGui, hDCDest, X, Y, W, H)
	DllCall("Sleep", UInt, 2)
}

~Esc::
GuiEscape: 
	ExitApp 

Exit() { 
	Global
	Gdip_DisposeImage(pBmpBckg)
	Gdip_DisposeImage(pBmpBckg)
	Gdip_DisposeImage(pBmpDest) 
	Gdip_DeleteGraphics(GDest)
	DeleteDC(hdcDest)
	Gdip_Shutdown(pToken)
	ExitApp
}

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

27

Re: AHK: Бегущая строка

А, нет, не так.

Options := "x" W - mod(A_Index*2, wt ? wt : 100000) " y" Margin " cFFFFAA00 r4 s" Size
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

28

Re: AHK: Бегущая строка

serzh82saratov пишет:

За счёт чего по твоему большая разница в производительности (на одинаковых малых шрифтах)?

Спроси что-нибудь полегче.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

29

Re: AHK: Бегущая строка

teadrinker пишет:

A_Index*2

Это понятно, можно увеличивать шаг для скорости и ухудшения плавности.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

30

Re: AHK: Бегущая строка

Без timeBeginPeriod использовать DllCall("Sleep", UInt, 2) не имеет смысла, будет 10-15.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

31

Re: AHK: Бегущая строка

Да, я знаю, большая скорость перемещения строки сейчас не нужна, главный вопрос слишком большая нагрузка. Видимо - "не тем путём идём товарищи".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

32

Re: AHK: Бегущая строка

Перемещение окна не грузит проц не зависимо от размеров. Но встаёт вопрос ограничения показа строки по краям.


#SingleInstance Force
#Persistent  
#NoEnv
SetBatchLines -1
ListLines Off

If !pToken := Gdip_Startup()
{
	MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
	ExitApp
}

String = Бегущая строка

FontSize := 1111

Sleep := 1
BeginPeriod := 7

fTrans := 50
fColor := 0xF3D284
fTrans := fTrans / 100 * 255
fColor := fTrans << 24 | fColor

Margin = 20
Font = Arial 
fColor := Format("{1:08X}", fColor)

W := A_ScreenWidth

Gui, -Caption +E0x80000 +HWNDhGui +AlwaysOnTop +ToolWindow +OwnDialogs +E0x08000020
Gui, Show, Na

Options = s%FontSize% Italic c%fColor% vCenter Center r4 Font
pBmpBuf := Gdip_CreateBitmap(1, 1)
GBuf := Gdip_GraphicsFromImage(pBmpBuf)
Gdip_DisposeImage(pBmpBuf)
Data := Gdip_TextToGraphics(GBuf, String, Options, Font)
Gdip_DeleteGraphics(GBuf)
Arr := StrSplit(Data, "|")
WText := Arr[3], HText := Arr[4]

pBmpText := Gdip_CreateBitmap(WText, HText)
GText := Gdip_GraphicsFromImage(pBmpText) 
Gdip_SetSmoothingMode(GText, 4)

Gdip_TextToGraphics(GText, String, Options, Font, WText, HText)
Gdip_DeleteGraphics(GText)

pBmpDest := Gdip_CreateBitmap(WText, HText)
GDest := Gdip_GraphicsFromImage(pBmpDest)
Gdip_SetSmoothingMode(GDest, 4)
hDCDest := CreateCompatibleDC()

Gdip_DrawImage(GDest, pBmpText, 0, 0, WText, HText, 0, 0, WText, HText)
hBmpDest := Gdip_CreateHBITMAPFromBitmap(pBmpDest, 0x00000000)
SelectObject(hDCDest, hBmpDest)
DeleteObject(hBmpDest)

DllCall("Winmm\timeBeginPeriod", UInt, BeginPeriod)

uFlags := 0x0001|0x0400|0x0008|0x0100|0x0010|0x2000
XPos := W + 1
YPos := (A_ScreenHeight - HText) / 2

UpdateLayeredWindow(hGui, hDCDest, XPos, YPos, WText, HText)

Loop
{
	If (XPos < -WText)
		XPos := W + 1
	Else
		XPos -= 1 
	; WinMove, % "ahk_id " hGui, , XPos 
	DllCall("SetWindowPos", "Ptr", hGui, "UInt", 0
	, "Int", XPos, "Int", YPos
	, "Int", 0, "Int", 0, "UInt", uFlags)
	DllCall("Sleep", UInt, Sleep)
}

~Esc::
GuiEscape: 
	ExitApp 

Exit() { 
	Global 
	DllCall("Winmm\timeEndPeriod", UInt, BeginPeriod)
	Gdip_DisposeImage(pBmpDest) 
	Gdip_DeleteGraphics(GDest)
	DeleteDC(hdcDest)
	Gdip_Shutdown(pToken)
	ExitApp
}

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

33

Re: AHK: Бегущая строка

serzh82saratov пишет:

Но встаёт вопрос ограничения показа строки по краям.

Можно перемещать дочернее окно внутри родительского.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

34

Re: AHK: Бегущая строка

Как здесь? Тогда оно не будет прозрачным для фона, это только если текст с фоном двигать.

Это как бы тоже подходит под "перемещать дочернее", но качество перемещения тут не на отлично. И главное при больших шрифтах резко поднимается нагрузка.

#SingleInstance Force
#NoEnv 
ListLines Off
SetBatchLines -1
OnExit, Exit

WS_EX_COMPOSITED := 0x02000000, WS_EX_LAYERED := 0x00080000

Pic = Pic1.jpg
String = Бегущая строка
MinPeriod := 3
Sleep := 5
Step := 1
FontSize := 82

Width := 640
Height := 480
Gui, +AlwaysOnTop +HWNDHWND +E%WS_EX_COMPOSITED% +E%WS_EX_LAYERED%  
Gui, Font, s%FontSize% q4 Italic, Arial
Gui, Margin, 0, 0
Gui, Color, 0xFFFF80
Gui, Add, Text, cFFFF80 x0 y50 +0x201 +BackgroundTrans hwndhText, % String
Gui, Add, Pic, x0 y0 w%Width% h%Height%, % Pic

DllCall("Winmm\timeBeginPeriod", UInt, MinPeriod)

GuiControlGet, Pos, Pos, %hText%

XPos := PosX + PosW + Step
YPos := (Height - PosH) / 2
DllCall("MoveWindow", "Ptr", hText, UInt, XPos, UInt, YPos, UInt, PosW, UInt, PosH, Int, 1)
Gui, Show, w%Width% h%Height%

Loop
{
	If (XPos < -PosW)
		XPos := PosX + PosW + Step
	Else
		XPos -= Step
	DllCall("MoveWindow", "Ptr", hText, UInt, XPos, UInt, YPos, UInt, PosW, UInt, PosH, Int, 1)
	DllCall("Sleep", UInt, Sleep)
}

Escape:: 
Exit: 
	DllCall("Winmm\timeEndPeriod", UInt, MinPeriod)
	ExitApp
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

35

Re: AHK: Бегущая строка

Можешь поизучать:
https://www.codeproject.com/Articles/44 … g-with-GDI

36

Re: AHK: Бегущая строка

А ты пробовал? Как то сомнительно выглядит попадать в vsync по таймеру.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

37

Re: AHK: Бегущая строка

У меня экзешник в архиве идет плавно и память не съедается.

38

Re: AHK: Бегущая строка

Можешь скинуть.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

39

Re: AHK: Бегущая строка

https://ru.files.fm/u/mfsyzjmd

40 (изменено: serzh82saratov, 2019-03-03 18:32:05)

Re: AHK: Бегущая строка

У меня постоянные как бы дрожания на шрифте, в общем ужас.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

41

Re: AHK: Бегущая строка

А галочки все включены в визуальных эффектах в Perfomance options?

42

Re: AHK: Бегущая строка

Это где?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

43

Re: AHK: Бегущая строка

В винде?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

44

Re: AHK: Бегущая строка

https://www.sevenforums.com/attachments/tutorials/118204d1290882436-visual-effects-settings-change-starter_basic.jpg

45

Re: AHK: Бегущая строка

Винду трогать не надо.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

46 (изменено: Malcev, 2019-03-03 17:20:44)

Re: AHK: Бегущая строка

Тогда вряд ли что-то путное выйдет.
Классическая тема не для эффектов предназначена.

47

Re: AHK: Бегущая строка

Просьба не употреблять вобщем и вообщем.

48 (изменено: serzh82saratov, 2019-03-03 19:07:43)

Re: AHK: Бегущая строка

ypppu
Извиняюсь, поправил. Уже не первый раз, прилипло.

Так вроде ничего работает.
Костыль конечно, но надежд на то что можно быстро менять графику уже почти не осталось.
Ну и конечно это только с аеро.


#SingleInstance Force
#Persistent  
#NoEnv
SetBatchLines -1
ListLines Off
OnExit("Exit")
; Process, Priority, , High

If !pToken := Gdip_Startup()
{
	MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
	ExitApp
}

String = Бегущая строка
FontSize := 244

Sleep := 2
BeginPeriod := 3
Step := 1

SleepNew := 200

fTrans := 40
fColor := 0x000000
fTrans := fTrans / 100 * 255
fColor := fTrans << 24 | fColor

Margin = 20
Font = Arial 
fColor := Format("{1:08X}", fColor)

Pic = Pic1.jpg

Width := A_ScreenWidth - 100
Height := 480

Options = s%FontSize% Italic c%fColor% vCenter Center r4 Font

Gui, +AlwaysOnTop +HWNDHWND -Caption +ToolWindow +E0x08000000
Gui, Margin, 0, 0
Gui, Color, 0xFFFF80
Gui, Add, Pic, x0 y0 w%Width% h%Height%, % Pic
Gui, Show, Na
WinGetPos, WinX, WinY, WinWidth, WinHeight, % "ahk_id" HWND
WinX2 := WinX + WinWidth

Gui, New
Gui, -Caption +E0x80000 +HWNDhGui +AlwaysOnTop +ToolWindow +OwnDialogs +E0x08000020
Gui, Show, Na

pBmpBuf := Gdip_CreateBitmap(1, 1)
GBuf := Gdip_GraphicsFromImage(pBmpBuf)
Gdip_DisposeImage(pBmpBuf)
Data := Gdip_TextToGraphics(GBuf, String, Options, Font)
Gdip_DeleteGraphics(GBuf)
Arr := StrSplit(Data, "|")
WText := Arr[3], HText := Arr[4]

pBmpText := Gdip_CreateBitmap(WText, HText)
GText := Gdip_GraphicsFromImage(pBmpText) 
Gdip_SetSmoothingMode(GText, 4)
Gdip_TextToGraphics(GText, String, Options, Font, WText, HText)
Gdip_DeleteGraphics(GText)
hDCDest := CreateCompatibleDC()
hBmpDest := Gdip_CreateHBITMAPFromBitmap(pBmpText, 0x00000000)
Gdip_DisposeImage(pBmpText)
SelectObject(hDCDest, hBmpDest)
DeleteObject(hBmpDest)
UpdateLayeredWindow(hGui, hDCDest, 0, 0, WText, HText)
DeleteDC(hdcDest)

DllCall("Winmm\timeBeginPeriod", UInt, BeginPeriod) 

uFlags := 0x0001|0x0400|0x0008|0x0100|0x0010|0x2000

XPos := WinX2 + Step
YPos := WinY + (WinHeight - HText) / 2
XEnd := -(WText - WinX)

Loop
{
	If (XPos < XEnd)
	{ 
		XPos := WinX2 + Step
		If SleepNew
			DllCall("Sleep", UInt, SleepNew)  
	}
	Else
		XPos -= Step
	
	DllCall("SetWindowPos", "Ptr", hGui, "UInt", 0
		, "Int", XPos, "Int", YPos
		, "Int", 0, "Int", 0, "UInt", uFlags)
		
	WStr := XPos > WinX2 ? 0 : XPos < WinX ? WinWidth : WinX2 - XPos
	XStr := XPos > WinX ? 0 : WinX - XPos
	
	WinSet, Region, % XStr + Step "-" 0 " W" WStr - Step " H" HText, ahk_id %hGui%
	
	DllCall("Sleep", UInt, Sleep) 
}

~Esc::
GuiEscape: 
	ExitApp  

Exit() { 
	Global 
	DllCall("Winmm\timeEndPeriod", UInt, BeginPeriod) 
	Gdip_Shutdown(pToken)
	ExitApp
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

49

Re: AHK: Бегущая строка

serzh82saratov пишет:

Костыль конечно, но надежд на то что можно быстро менять графику уже почти не осталось.

А пробовал скомпилировать пример с кодпроджекта с увеличенным шрифтом - память съедает, дергается?

50

Re: AHK: Бегущая строка

Не, не пробовал. А ты?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui