Author Topic: Порисуем на экране?  (Read 6750 times)

0 Members and 1 Guest are viewing this topic.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Порисуем на экране?
« on: February 12, 2019, 02:01:04 AM »
Может стоит уже внести функционал рисования прямо на рабочем столе? Примитивно - окружности, прямоугольники, ... ну и по нарастающей вплоть до Моны Лизы. ;D 

 Иногда требуется подсветить какойто обьект, обозначить его какойто фигурой, возможно наисать на весь экран плохое слово и так далее. Плюс эксперименты с графикой приходится проводить в том же паинте, а почему бы не сразу там где курсор затерялся и в реальном времени (не задумываясь что там выйдет)?

 В данный момент мы можем рисовать только в графическом буфере, и только после сохранения скрина увидеть что там, а хотелось бы видеть это  прям перед глазами.

 К примеру играет у меня какойто бот, чтото там жмякает, чтото дергает, в логе много текста.... А было бы так- показана стрелка красная, туда не пойдем, появился желтый кружок, там кликнем и результат игры в цифрах на пол экрана ... Прям сказка... ;D




Почему то вспомнилась игра "найди различия  между двух картинок". Гдето в вк вроде видел реализацию на кмане. Так там же пришлось писать еще какойто просмотршик картинок... геморно. Кликерман сам должен все это уметь делать  ::).

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Порисуем на экране?
« Reply #1 on: February 12, 2019, 02:37:26 AM »
Gdiplus :D
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
Re: Порисуем на экране?
« Reply #2 on: February 12, 2019, 10:14:53 AM »
Если Джонни в CALL на вход и выход массивы прикрутит, то народ сам большинство недостающих функций наклепает. А один разработчик объять необъятное не сможет.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Порисуем на экране?
« Reply #3 on: February 12, 2019, 05:57:39 PM »
Во я бездельник, почти день проигрался с рисовалками на кликермане  ;D И какой в этом смысл был  ???

Написал подпрограмму для рисования элипсов любой толщины и цвета и размера, с возможностью закрашивания его в любой цвет.

Потом решил нарисовать в этом овале  чтонибудь, взял готовые бмп-шки и подсунул к ним цвет игнорирования. написал подпрограмму переноса бмп в буфер с учетом игнорируемого цвета.

Весь функционал для творчества в км есть, не хватает вывода этого творчества на экран в реальном времени  :(

И вот что смог кликерманн  ;D



Даже и не знаю, нужен такой функционал кликерману или нет, но видел как в хороших аимботах программа подсвечивает противника который в данный момент в таргете.... уже солиднее выглядит.


Код, если вдруг кому пригодится (для в 4.14, не ниже):

Code: (clickermann) [Select]
//рисуем элипс (любого размера)   С отбортовкой (нужной толщины) и с нужными цветами

SUB(elipse, $a, $b , $centr_x,$centr_y, $col1, $col2,$th)
   
   FOR($x=-$a,$x < $a)
      $y = int(SQRT ( (1 - (pow($x,2)/pow($a,2))) * pow($b,2) ))
      PXLREPLACE ($x+$centr_x, $y+$centr_y, $x+$centr_x, $y+$centr_y, -1, $col1)
   END_CYC
   
   FOR($x=-$a,$x < $a)
      $y = -  int(SQRT ( (1 - (pow($x,2)/pow($a,2))) * pow($b,2) ))
      PXLREPLACE ($x+$centr_x, $y+$centr_y, $x+$centr_x, $y+$centr_y, -1, $col1)
   END_CYC
   
   FOR($y=-$b,$y < $b)
      $x =  int(SQRT ( (1 - (pow($y,2)/pow($b,2))) * pow($a,2) ))
      PXLREPLACE ($x+$centr_x, $y+$centr_y, $x+$centr_x, $y+$centr_y, -1, $col1)
   END_CYC
   
   FOR($y=-$b,$y < $b)
      $x = - int(SQRT ( (1 - (pow($y,2)/pow($b,2))) * pow($a,2) ))
      PXLREPLACE ($x+$centr_x, $y+$centr_y, $x+$centr_x, $y+$centr_y, -1, $col1)
   END_CYC
   
   $n1 = $centr_x-$a
   $n2 = $centr_x+$a
   $g1 = $centr_y-$b
   $g2 = $centr_y+$b
   FOR($n1 ,$n1 < $n2)
      SCANPXL ($var, $n1, $g1, $n1, $g2, $col1)
      IF(arrsize($var)> 3)
         PXLREPLACE($var[0],$var[1],$var[arrsize($var)-2],$var[arrsize($var)-1],-1,$col2 )
      END_IF
      undefine($var)
   END_CYC
   
   
   FOR($th_l=1,$th_l<$th)
     
      FOR($x=-$a,$x < $a)
         $y = int(SQRT ( (1 - (pow($x,2)/pow($a,2))) * pow($b,2) ))
         PXLREPLACE ($x+$centr_x-1, $y+$centr_y-1, $x+$centr_x, $y+$centr_y, -1, $col1)
      END_CYC
     
      FOR($x=-$a,$x < $a)
         $y = -  int(SQRT ( (1 - (pow($x,2)/pow($a,2))) * pow($b,2) ))
         PXLREPLACE ($x+$centr_x-1, $y+$centr_y-1, $x+$centr_x, $y+$centr_y, -1, $col1)
      END_CYC
     
      FOR($y=-$b,$y < $b)
         $x =  int(SQRT ( (1 - (pow($y,2)/pow($b,2))) * pow($a,2) ))
         PXLREPLACE ($x+$centr_x-1, $y+$centr_y-1, $x+$centr_x, $y+$centr_y, -1, $col1)
      END_CYC
     
      FOR($y=-$b,$y < $b)
         $x = - int(SQRT ( (1 - (pow($y,2)/pow($b,2))) * pow($a,2) ))
         PXLREPLACE ($x+$centr_x-1, $y+$centr_y-1, $x+$centr_x+1, $y+$centr_y, -1, $col1)
         
      END_CYC
     
      $a = $a - 1
      $b = $b - 1     
   END_CYC   
END_SUB


//сунем бмп-шки и возможносттью игнора ненужного цвета
SUB(bmpToClip, $name, $x_in, $y_in, $ignor,$bag) //параметры - имя файла, координаты вставки картинки (верхний левый угол) $bag подбираем наугад, пока не понял как он работает, от 0 до 3
   UNDEFINE($arr_bmp)
   FREADDATA ($name, $arr_bmp)
   $pix_data = $arr_bmp[10]  //начало пиксельных данных
   $Width = $arr_bmp[18]+$arr_bmp[19]*256 //ширина
   $Height = $arr_bmp[22]+$arr_bmp[23]*256 //высота
   $ByteCount = $arr_bmp[28]/8 //байт на пиксель. 24бит или 32бит
   
   
   FOR($y=$y_in+$Height-1, $y > $y_in-1, -1)
      FOR($x=$x_in,$x<$Width+$x_in)
         $newpix = COLORGEN($arr_bmp[$pix_data+2],$arr_bmp[$pix_data+1],$arr_bmp[$pix_data])
         
         
         IF($newpix ! $ignor)
            PXLREPLACE ($x,$y,$x,$y,-1,$newpix)
         END_IF
         inc($pix_data,$ByteCount)
      END_CYC
      //паинт.нет после каждой линии по Y добавляет ненужный байт :/
      //возможно это у всех 24битных бмп-шек
      inc($pix_data,$bag)//убираем его вот этим
   END_CYC
END_SUB


GETSCREEN
elipse(250, 150 , 400, 400, 6291601,10015816, 6)
bmpToClip("monstr1.bmp", 200, 300,7864064,2)
bmpToClip("monstr2.bmp", 280, 300,7864064,3)
bmpToClip("monstr3.bmp", 400, 300,7864064,2)
bmpToClip("monstr4.bmp", 500, 325,7864064,3)



SCREENSHOTEX (0,0, 750,750)
halt





open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Порисуем на экране?
« Reply #4 on: February 12, 2019, 10:08:46 PM »
Почему то вспомнилась игра "найди различия  между двух картинок". Гдето в вк вроде видел реализацию на кмане. Так там же пришлось писать еще какойто просмотровшик картинок... геморно. Кликерман сам должен все это уметь делать  ::).
В данном случае автор того скрипта виноват, вместо городы с просмотровщиком достаточно было просто делать клики по местам где найдены отличия.
"5 Отличий онлайн" игра называется. И самое главное что вся эта "города" бесполезна. Она не поможет добиться высоких результатов в игре. В ОК целая группа людей считающих себя полубогами лишь потому, что могут сводить глаза и видеть стереопары. Некоторые из них находят от 7-ми до 10-ти отличий за две секунды. Я писал бота для этой игры и долгое время находился на первом месте в списке лидеров. Меня вычислили (просто догадались), и разработчики приняли меры по борьбе со мной и подобными ботоводами, но эти меры оказалось не трудно обойти. А автор "того скрипта" еще и продавал его. И были покупатели.

Иллидан

  • Освоившийся
  • **
  • Posts: 40
  • Дзен-Мастер
    • View Profile
Re: Порисуем на экране?
« Reply #5 on: March 25, 2019, 11:01:16 AM »
дай код на пустой прямоугольник на экране 1024x768 чтоб игроки видели границы скрипта, что для браузеров ваще кстати - в них же нет настроек разрешения ;D
или может можно как то изменять размер окна приложения через км помимо установки его в координаты экрана? :P

Иллидан

  • Освоившийся
  • **
  • Posts: 40
  • Дзен-Мастер
    • View Profile
Re: Порисуем на экране?
« Reply #6 on: March 26, 2019, 08:40:18 AM »
так это просто скрины что ли а я думал что это вывод на экран)
как обычно пользуясь справкой в которой нет и никогда не будет так сильно нужного тем кто в ней не разбирается обычного поиска не по указателям о которых тупо никто не помнит я нашёл вот такую зверушку для изменения размеров определённого окна)
Code: [Select]
wndsize( wndfind("не Блокнот"), 300, 300)

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Порисуем на экране?
« Reply #7 on: March 26, 2019, 12:03:59 PM »
так это просто скрины что ли а я думал что это вывод на экран)

Это раздел предложения. Это покачто только мечты о выводе на экран.  :D

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Порисуем на экране?
« Reply #8 on: April 16, 2019, 05:16:47 PM »
Делал в автоите через GDIPlus. И чистые и в комбинации с кликером.
Вот старый скрипт: http://crapware.aidf.org/forum/index.php?topic=923.msg10383#msg10383
И там же ссылка на видео с него http://youtu.be/WqGgjVKVICs

Выводилась нужная сетка (с разным шагом и переменным размером) и справа внизу подсказка из png картинки. Скрины во вложении (TreePlant).

Была ещё утилита find_pic помогающая в настройке поиска http://crapware.aidf.org/forum/index.php?topic=42.msg9427#msg9427
Там делал подсветку крестиками найденные координаты. Цвет крестиков можно переключать или включить "переливание".

Я это к чему, была мысль тупо пробросить основные инструменты из автоита в кликер. Опять же никого не заинтересовало.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Порисуем на экране?
« Reply #9 on: April 17, 2019, 10:13:51 AM »
А исходный код "TreePlant" можно? Интересует построение вот этой графической сетки и последующие клики по ней.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Порисуем на экране?
« Reply #10 on: April 17, 2019, 11:10:27 AM »
Code: (php) [Select]
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIEx.au3>
#include <Sound.au3>

Global $aPoints[5][2], $MouseOldX = -10, $MouseOldY = -10, $Poly = 0, $freeze = False
Global $baseX, $baseY, $SetX = -10, $SetY = -10, $dh, $dw, $field_1x, $field_1y, $field_2x, $field_2y, $nx, $ny, $ncx, $ncy, $tree
Global $hGUI, $hGraphic, $hPenRed, $hPenMagentaBold, $hBrushBlue, $hFormat, $hFamily, $hFont
Global $wait = 200, $section, $music, $sSound, $aVual[4][2], $speed, $colortext, $hShem
Global $dl = 5 ; размер "плюсика" прицела +-
Global $corX = 0, $corY = 0 ; коррекция начала от курсора


FileInstall("Vint_avatar_11_64x64.jpg", @TempDir & "\Vint_avatar_11_64x64.jpg")
FileInstall("Схема.bmp", @TempDir & "\Схема.bmp")
If _WinAPI_GetAsyncKeyState(0x41) = True Then $MouseOldX = -10

If @Compiled Then
If $CmdLine[0] = 0 Then Exit(1)
$section = $CmdLine[1]
Else
$section = 'TreePlant'
EndIf

HotKeySet('{ESC}', '_EndProgramm')
ReadingIni()

Vual()
Shem()
If $music Then
FileInstall("Kin-dza-dza.mp3", @TempDir & "\Kin-dza-dza.mp3")
$sSound = _SoundOpen (@TempDir & "\Kin-dza-dza.mp3")
_SoundPlay($sSound,0)
EndIf

$hGUI = GUICreate('', $field_2x-$field_1x, $field_2y-$field_1y, $field_1x, $field_1y, BitOR($WS_DISABLED, $WS_POPUP), BitOR($WS_EX_TRANSPARENT, $WS_EX_LAYERED, $WS_EX_TOPMOST)) ; BitOR($WS_EX_TRANSPARENT, $WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)
GUISetBkColor(0xABABAB)
GUISetState(@SW_SHOWNOACTIVATE)
_WinAPI_SetLayeredWindowAttributes($hGUI, '0xABABAB', 0, $LWA_COLORKEY)
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hPenRed = _GDIPlus_PenCreate(0xFFFF0000) ; ручка для красной линии
$hPenMagentaBold = _GDIPlus_PenCreate(0xFFFF00FF, 2) ; ручка для красной точки
$hBrushBlue = _GDIPlus_BrushCreateSolid($colortext) ; синяя кисть
$hFormat = _GDIPlus_StringFormatCreate() ; формат текста
$hFamily = _GDIPlus_FontFamilyCreate('Tahoma') ; шрифт текста
$hFont = _GDIPlus_FontCreate($hFamily, 14) ; размер шрифта
$aPoints[0][0] = 4

Do
$pos = MouseGetPos() ; получить текущие координыты указателя мыши
$baseX = $pos[0] - $field_1x + $corX
$baseY = $pos[1] - $field_1y + $corY

If $freeze Then
If _WinAPI_GetAsyncKeyState(0x02) = True Then _EndProgramm() ; Нажата правая кнопка мыши - выход

If _WinAPI_GetAsyncKeyState(0x01) = False Then        ; Отпущена левая кнопка мыши
If ($SetX = $baseX) And ($SetY = $baseY) Then
ProClick()
Sleep(300)
EndIf
$freeze = False
EndIf
EndIf

If Not ($MouseOldX = $baseX And $MouseOldY = $baseY) Then
$MouseOldX = $baseX
$MouseOldY = $baseY
If $Poly = 1 Then
_WinAPI_RedrawWindow( $hGUI )
Else
$Poly = 1
EndIf
Draw()
EndIf

; проверяем нажатие клавы
If _WinAPI_GetAsyncKeyState(0x02) = True Then _EndProgramm() ; Нажата правая кнопка мыши - выход

If _WinAPI_GetAsyncKeyState(0x53) = True And Not $freeze Then IncX() ; Нажата S
If _WinAPI_GetAsyncKeyState(0x57) = True And Not $freeze Then DecX() ; Нажата W
If _WinAPI_GetAsyncKeyState(0x44) = True And Not $freeze Then IncY() ; Нажата D
If _WinAPI_GetAsyncKeyState(0x41) = True And Not $freeze Then DecY() ; Нажата A
If _WinAPI_GetAsyncKeyState(0x58) = True And Not $freeze Then Tree() ; Нажата X

; проверяем нажатие мыши
If _WinAPI_GetAsyncKeyState(0x01) = True And Not $freeze Then        ; Зажата левая кнопка мыши
$SetX = $baseX
$SetY = $baseY
$freeze = True
EndIf

Until Not Sleep(20)

_EndProgramm()

Func ProClick()
Local $iX, $iY, $clX, $clY

For $iY = 0 To $ncy
For $iX = 0 To $ncx
$clX = $baseX + ($iY-$iX)*$dw + $field_1x - $corX
$clY = $baseY + ($iY+$iX)*$dh + $field_1y - $corY
If $clX > $field_1x And $clX < $field_2x And $clY > $field_1y And $clY < $field_2y Then
MouseClick("left", $clX, $clY, 1, $speed) ; клик ЛКМ
EndIf
Next
Next
EndFunc   ;==>ProClick

Func ReadingIni()
$field_1x = IniRead ('TreePlant.ini', $section, 'field_1x', '100')
$field_1y = IniRead ('TreePlant.ini', $section, 'field_1y', '100')
$field_2x = IniRead ('TreePlant.ini', $section, 'field_2x', '0')
$field_2y = IniRead ('TreePlant.ini', $section, 'field_2y', '0')
$tree = IniRead ('TreePlant.ini', $section, 'tree', 'small')
$nx = IniRead ('TreePlant.ini', $section, 'nx', '3')
$ny = IniRead ('TreePlant.ini', $section, 'ny', '4')
$colortext = IniRead ('TreePlant.ini', $section, 'colortext', 0xFF0000FF)

$speed = IniRead ('TreePlant.ini', $section, 'speed', '5')
If $speed < 0 Then $speed = 0
If $speed > 100 Then $speed = 100

$run_count = IniRead ('TreePlant.ini', $section, 'run_count', '0')
$run_count += 1
IniWrite ('TreePlant.ini', $section, 'run_count', $run_count)
$music = IniRead ('TreePlant.ini', $section, 'music', 'True')
If $music And ($run_count/10 - Int($run_count/10) = 0) Then
$music = True
Else
$music = False
EndIf

If $field_2x = 0 Then $field_2x = @DesktopWidth-100
If $field_2y = 0 Then $field_2y = @DesktopHeight-100

Nc()
If $tree = 'big' Then
$dh = 24
$dw = 48
Else
$dh = 16
$dw = 32
EndIf
EndFunc   ;==>ReadingIni

Func Tree()
If $tree = 'small' Then
$tree = 'big'
$dh = 24
$dw = 48
Else
$tree = 'small'
$dh = 16
$dw = 32
EndIf
$MouseOldX = -10
$MouseOldY = -10
IniWrite ('TreePlant.ini', $section, 'tree', $tree)
Sleep($wait)
EndFunc   ;==>Tree

Func IncX()
If $nx < 18 Then
$nx += 1
Nc()
IniWrite ('TreePlant.ini', $section, 'nx', $nx)
Sleep($wait)
EndIf
EndFunc   ;==>IncX

Func IncY()
If $ny < 38 Then
$ny += 1
Nc()
IniWrite ('TreePlant.ini', $section, 'ny', $ny)
Sleep($wait)
EndIf
EndFunc   ;==>IncY

Func DecX()
If $nx > 1 Then
$nx -= 1
Nc()
IniWrite ('TreePlant.ini', $section, 'nx', $nx)
Sleep($wait)
EndIf
EndFunc   ;==>DecX

Func DecY()
If $ny  > 1 Then
$ny -= 1
Nc()
IniWrite ('TreePlant.ini', $section, 'ny', $ny)
Sleep($wait)
EndIf
EndFunc   ;==>DecY

Func Nc()
$ncx = $nx-1
$ncy = $ny-1
If $ncx < 0 Then
$ncx = 0
$nx = 1
EndIf
If $ncy < 0 Then
$ncy = 0
$ny = 1
EndIf
$MouseOldX = -10
$MouseOldY = -10
EndFunc   ;==>Nc

Func Draw()
Local $iX, $iY, $tLayout

$aPoints[1][0] = $baseX
$aPoints[1][1] = $baseY
$aPoints[2][0] = $baseX - $ncx*$dw
$aPoints[2][1] = $baseY + $ncx*$dh
$aPoints[3][0] = $baseX + ($ncy-$ncx)*$dw
$aPoints[3][1] = $baseY + ($ncx+$ncy)*$dh
$aPoints[4][0] = $baseX + $ncy*$dw
$aPoints[4][1] = $baseY + $ncy*$dh
_GDIPlus_GraphicsDrawPolygon($hGraphic, $aPoints, $hPenRed)

For $iY = 0 To $ncy
For $iX = 0 To $ncx
_GDIPlus_GraphicsDrawEllipse($hGraphic, ($baseX + ($iY-$iX)*$dw)-2, ($baseY + ($iY+$iX)*$dh)-2, 4, 4, $hPenMagentaBold) ; точка
Next
Next

_GDIPlus_GraphicsDrawLine($hGraphic, $baseX, $baseY-$dl-$dh*2, $baseX, $baseY+$dl-$dh*2, $hPenRed)
_GDIPlus_GraphicsDrawLine($hGraphic, $baseX-$dl, $baseY-$dh*2, $baseX+$dl, $baseY-$dh*2, $hPenRed)

_GDIPlus_GraphicsDrawLine($hGraphic, $baseX-$dw, $baseY-$dl-$dh, $baseX-$dw, $baseY+$dl-$dh, $hPenRed)
_GDIPlus_GraphicsDrawLine($hGraphic, $baseX-$dl-$dw, $baseY-$dh, $baseX+$dl-$dw, $baseY-$dh, $hPenRed)

_GDIPlus_GraphicsDrawLine($hGraphic, $baseX+$dw, $baseY-$dl-$dh, $baseX+$dw, $baseY+$dl-$dh, $hPenRed)
_GDIPlus_GraphicsDrawLine($hGraphic, $baseX-$dl+$dw, $baseY-$dh, $baseX+$dl+$dw, $baseY-$dh, $hPenRed)

; координаты для надписи с длиной отрезка
$tLayout = _GDIPlus_RectFCreate($baseX + 25, $baseY - 12, 0, 0)
; вывод надписи с размерами
_GDIPlus_GraphicsDrawStringEx($hGraphic, $nx & ' x ' & $ny & ' ' & $tree, $hFont, $tLayout, $hFormat, $hBrushBlue)
EndFunc   ;==>Draw

Func Vual()
$aVual[0][0] = False
$aVual[1][0] = False
$aVual[2][0] = False
$aVual[3][0] = False
If $field_1y > 0 Then
$aVual[0][0] = True
EndIf
If $field_2y < @DesktopHeight Then
$aVual[1][0] = True
EndIf
If $field_1x > 0 Then
$aVual[2][0] = True
EndIf
If $field_2x < @DesktopWidth Then
$aVual[3][0] = True
EndIf

; MsgBox(4096,'@DesktopWidth', '@DesktopWidth  '&@DesktopWidth &@CRLF& '@DesktopHeight  '&@DesktopHeight)
; BitOR($WS_EX_TRANSPARENT, $WS_EX_LAYERED, $WS_EX_TOPMOST)
If $aVual[0][0] Then
$aVual[0][1] = GUICreate("", @DesktopWidth, $field_1y, 0, 0, BitOR($WS_DISABLED, $WS_POPUP), BitOR($WS_EX_TRANSPARENT, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
GUISetBkColor(0x000000, $aVual[0][1])
WinSetTrans($aVual[0][1], '', 100)
GUISetState(@SW_SHOWNOACTIVATE, $aVual[0][1])
EndIf
If $aVual[1][0] Then
$aVual[1][1] = GUICreate("", @DesktopWidth, @DesktopHeight-$field_2y, 0, $field_2y, BitOR($WS_DISABLED, $WS_POPUP), BitOR($WS_EX_TRANSPARENT, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
GUISetBkColor(0x000000, $aVual[1][1])
WinSetTrans($aVual[1][1], '', 100)
GUISetState(@SW_SHOWNOACTIVATE, $aVual[1][1])
EndIf
If $aVual[2][0] Then
$aVual[2][1] = GUICreate("", $field_1x, $field_2y-$field_1y, 0, $field_1y, BitOR($WS_DISABLED, $WS_POPUP), BitOR($WS_EX_TRANSPARENT, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
GUISetBkColor(0x000000, $aVual[2][1])
WinSetTrans($aVual[2][1], '', 100)
GUISetState(@SW_SHOWNOACTIVATE, $aVual[2][1])
EndIf
If $aVual[3][0] Then
$aVual[3][1] = GUICreate("", @DesktopWidth-$field_2x, $field_2y-$field_1y, $field_2x, $field_1y, BitOR($WS_DISABLED, $WS_POPUP), BitOR($WS_EX_TRANSPARENT, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
GUISetBkColor(0x000000, $aVual[3][1])
WinSetTrans($aVual[3][1], '', 100)
GUISetState(@SW_SHOWNOACTIVATE, $aVual[3][1])
EndIf
; MsgBox(4096,"Окна затемнения", @DesktopWidth&'  '&$field_1y&'  '&0&'  '&0 &@CRLF& @DesktopWidth&'  '&@DesktopHeight-$field_2y&'  '&0&'  '&$field_2y &@CRLF& $field_1x&'  '&$field_2y-$field_1y&'  '&0&'  '&$field_1y &@CRLF& @DesktopWidth-$field_2x&'  '&$field_2y-$field_1y&'  '&$field_2x&'  '&$field_1y)
EndFunc   ;==>Vual

Func Shem()
;If @DesktopWidth-$field_2x < 130 Then Return
$hShem = GUICreate("", 274, 130, @DesktopWidth-274, @DesktopHeight-130-30, BitOR($WS_DISABLED, $WS_POPUP), BitOR($WS_EX_TRANSPARENT, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
WinSetTrans($hShem, '', 250)
GUICtrlCreatePic(@TempDir & "\\Схема.bmp", 0, 0, 0, 0)
GUISetState(@SW_SHOWNOACTIVATE, $hShem)
EndFunc   ;==>Shem

Func _EndProgramm()
Local $FormEnd, $i, $hParent, $SoundCancel

; Стоп и удаляем музыку
If $music Then
_SoundStop($sSound)
_SoundClose($sSound)
FileDelete(@TempDir & "\Kin-dza-dza.mp3")
EndIf
GUIDelete($hShem)
FileInstall("Схема.bmp", @TempDir & "\Схема.bmp")

; Удаляем затемнения
For $i = 0 To 3
If $aVual[$i][0] Then GUIDelete($aVual[$i][1])
Next

; удаление ресурсов
FileDelete(@TempDir & "\Схема.bmp")
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrushBlue)
_GDIPlus_PenDispose($hPenMagentaBold)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
GUIDelete($hGUI)

$hParent  = GUICreate('')
$FormEnd = GUICreate("О программе", 200, 160, -1, -1, BitOR($WS_DISABLED, $WS_POPUP), $WS_EX_TOPMOST, $hParent)
GUICtrlCreatePic(@TempDir & "\Vint_avatar_11_64x64.jpg", 68, 8, 64, 64)
GUICtrlCreateLabel("Autor Vint", 68, 80, 70, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800080)
GUICtrlCreateLabel("version 3.0.3 of 13.02.2015", 46, 95, 125, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Tahoma")
GUICtrlCreateLabel("Посадка деревьев", 54, 116, 100, 17)
GUICtrlCreateLabel("для ZF", 84, 130, 82, 17)
WinSetTrans($FormEnd, '', 0) ; прозрачность 30
GUISetBkColor(0xDCF2CA, $FormEnd)
GUISetState(@SW_SHOW)

For $i = 0 To 255 Step 8
WinSetTrans($FormEnd, '', $i)
Sleep(1)
Next
$i = 1024
While $i >= 0
If $i < 256 Then WinSetTrans($FormEnd, '', $i)

$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Sleep(1)
$i -= 8
WEnd

; удаление оставшихся ресурсов
$SoundCancel = _SoundOpen (@TempDir & "\cancel4.mp3")
_SoundPlay($SoundCancel,1)
_SoundClose($SoundCancel)
FileDelete(@TempDir & "\cancel4.mp3")
FileDelete(@TempDir & "\Vint_avatar_11_64x64.jpg")

Exit
EndFunc ;==>_EndProgramm

« Last Edit: April 17, 2019, 11:12:04 AM by Vint »