Автор Тема: Порисуем на экране?  (Прочитано 2775 раз)

0 Пользователей и 1 Гость просматривают эту тему.

dramster

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

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

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

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




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

Космич

  • Активный участник
  • ***
  • Сообщений: 265
    • Просмотр профиля
Re: Порисуем на экране?
« Ответ #1 : Февраль 12, 2019, 02:37:26 am »
Gdiplus :D
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

ya12

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

dramster

  • Герой форума
  • *****
  • Сообщений: 1130
    • Просмотр профиля
Re: Порисуем на экране?
« Ответ #3 : Февраль 12, 2019, 05:57:39 pm »
Во я бездельник, почти день проигрался с рисовалками на кликермане  ;D И какой в этом смысл был  ???

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

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

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

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



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


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

Код: Clickermann
  1. //рисуем элипс (любого размера)   С отбортовкой (нужной толщины) и с нужными цветами
  2.  
  3. SUB(elipse, $a, $b , $centr_x,$centr_y, $col1, $col2,$th)
  4.  
  5.   FOR($x=-$a,$x < $a)
  6.      $y = int(SQRT ( (1 - (pow($x,2)/pow($a,2))) * pow($b,2) ))
  7.      PXLREPLACE ($x+$centr_x, $y+$centr_y, $x+$centr_x, $y+$centr_y, -1, $col1)
  8.   END_CYC
  9.  
  10.   FOR($x=-$a,$x < $a)
  11.      $y = -  int(SQRT ( (1 - (pow($x,2)/pow($a,2))) * pow($b,2) ))
  12.      PXLREPLACE ($x+$centr_x, $y+$centr_y, $x+$centr_x, $y+$centr_y, -1, $col1)
  13.   END_CYC
  14.  
  15.   FOR($y=-$b,$y < $b)
  16.      $x =  int(SQRT ( (1 - (pow($y,2)/pow($b,2))) * pow($a,2) ))
  17.      PXLREPLACE ($x+$centr_x, $y+$centr_y, $x+$centr_x, $y+$centr_y, -1, $col1)
  18.   END_CYC
  19.  
  20.   FOR($y=-$b,$y < $b)
  21.      $x = - int(SQRT ( (1 - (pow($y,2)/pow($b,2))) * pow($a,2) ))
  22.      PXLREPLACE ($x+$centr_x, $y+$centr_y, $x+$centr_x, $y+$centr_y, -1, $col1)
  23.   END_CYC
  24.  
  25.   $n1 = $centr_x-$a
  26.   $n2 = $centr_x+$a
  27.   $g1 = $centr_y-$b
  28.   $g2 = $centr_y+$b
  29.   FOR($n1 ,$n1 < $n2)
  30.      SCANPXL ($var, $n1, $g1, $n1, $g2, $col1)
  31.      IF(arrsize($var)> 3)
  32.         PXLREPLACE($var[0],$var[1],$var[arrsize($var)-2],$var[arrsize($var)-1],-1,$col2 )
  33.      END_IF
  34.      undefine($var)
  35.   END_CYC
  36.  
  37.  
  38.   FOR($th_l=1,$th_l<$th)
  39.  
  40.      FOR($x=-$a,$x < $a)
  41.         $y = int(SQRT ( (1 - (pow($x,2)/pow($a,2))) * pow($b,2) ))
  42.         PXLREPLACE ($x+$centr_x-1, $y+$centr_y-1, $x+$centr_x, $y+$centr_y, -1, $col1)
  43.      END_CYC
  44.  
  45.      FOR($x=-$a,$x < $a)
  46.         $y = -  int(SQRT ( (1 - (pow($x,2)/pow($a,2))) * pow($b,2) ))
  47.         PXLREPLACE ($x+$centr_x-1, $y+$centr_y-1, $x+$centr_x, $y+$centr_y, -1, $col1)
  48.      END_CYC
  49.  
  50.      FOR($y=-$b,$y < $b)
  51.         $x =  int(SQRT ( (1 - (pow($y,2)/pow($b,2))) * pow($a,2) ))
  52.         PXLREPLACE ($x+$centr_x-1, $y+$centr_y-1, $x+$centr_x, $y+$centr_y, -1, $col1)
  53.      END_CYC
  54.  
  55.      FOR($y=-$b,$y < $b)
  56.         $x = - int(SQRT ( (1 - (pow($y,2)/pow($b,2))) * pow($a,2) ))
  57.         PXLREPLACE ($x+$centr_x-1, $y+$centr_y-1, $x+$centr_x+1, $y+$centr_y, -1, $col1)
  58.  
  59.      END_CYC
  60.  
  61.      $a = $a - 1
  62.      $b = $b - 1      
  63.   END_CYC  
  64. END_SUB
  65.  
  66.  
  67. //сунем бмп-шки и возможносттью игнора ненужного цвета
  68. SUB(bmpToClip, $name, $x_in, $y_in, $ignor,$bag) //параметры - имя файла, координаты вставки картинки (верхний левый угол) $bag подбираем наугад, пока не понял как он работает, от 0 до 3
  69.   UNDEFINE($arr_bmp)
  70.   FREADDATA ($name, $arr_bmp)
  71.   $pix_data = $arr_bmp[10]  //начало пиксельных данных
  72.   $Width = $arr_bmp[18]+$arr_bmp[19]*256 //ширина
  73.   $Height = $arr_bmp[22]+$arr_bmp[23]*256 //высота
  74.   $ByteCount = $arr_bmp[28]/8 //байт на пиксель. 24бит или 32бит
  75.  
  76.  
  77.   FOR($y=$y_in+$Height-1, $y > $y_in-1, -1)
  78.      FOR($x=$x_in,$x<$Width+$x_in)
  79.         $newpix = COLORGEN($arr_bmp[$pix_data+2],$arr_bmp[$pix_data+1],$arr_bmp[$pix_data])
  80.  
  81.  
  82.         IF($newpix ! $ignor)
  83.            PXLREPLACE ($x,$y,$x,$y,-1,$newpix)
  84.         END_IF
  85.         inc($pix_data,$ByteCount)
  86.      END_CYC
  87.      //паинт.нет после каждой линии по Y добавляет ненужный байт :/
  88.      //возможно это у всех 24битных бмп-шек
  89.      inc($pix_data,$bag)//убираем его вот этим
  90.   END_CYC
  91. END_SUB
  92.  
  93.  
  94. GETSCREEN
  95. elipse(250, 150 , 400, 400, 6291601,10015816, 6)
  96. bmpToClip("monstr1.bmp", 200, 300,7864064,2)
  97. bmpToClip("monstr2.bmp", 280, 300,7864064,3)
  98. bmpToClip("monstr3.bmp", 400, 300,7864064,2)
  99. bmpToClip("monstr4.bmp", 500, 325,7864064,3)
  100.  
  101.  
  102.  
  103. SCREENSHOTEX (0,0, 750,750)
  104. halt
  105.  
  106.  




open_78

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

Иллидан

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

Иллидан

  • Освоившийся
  • **
  • Сообщений: 36
  • Дзен-Мастер
    • Просмотр профиля
Re: Порисуем на экране?
« Ответ #6 : Март 26, 2019, 08:40:18 am »
так это просто скрины что ли а я думал что это вывод на экран)
как обычно пользуясь справкой в которой нет и никогда не будет так сильно нужного тем кто в ней не разбирается обычного поиска не по указателям о которых тупо никто не помнит я нашёл вот такую зверушку для изменения размеров определённого окна)
wndsize( wndfind("не Блокнот"), 300, 300)

dramster

  • Герой форума
  • *****
  • Сообщений: 1130
    • Просмотр профиля
Re: Порисуем на экране?
« Ответ #7 : Март 26, 2019, 12:03:59 pm »
так это просто скрины что ли а я думал что это вывод на экран)

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Порисуем на экране?
« Ответ #8 : Апрель 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

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Порисуем на экране?
« Ответ #10 : Апрель 17, 2019, 11:10:27 am »
Код: PHP
  1. #include <WindowsConstants.au3>
  2. #include <GDIPlus.au3>
  3. #include <GUIConstantsEx.au3>
  4. #include <WinAPIEx.au3>
  5. #include <Sound.au3>
  6.  
  7. Global $aPoints[5][2], $MouseOldX = -10, $MouseOldY = -10, $Poly = 0, $freeze = False
  8. Global $baseX, $baseY, $SetX = -10, $SetY = -10, $dh, $dw, $field_1x, $field_1y, $field_2x, $field_2y, $nx, $ny, $ncx, $ncy, $tree
  9. Global $hGUI, $hGraphic, $hPenRed, $hPenMagentaBold, $hBrushBlue, $hFormat, $hFamily, $hFont
  10. Global $wait = 200, $section, $music, $sSound, $aVual[4][2], $speed, $colortext, $hShem
  11. Global $dl = 5 ; размер "плюсика" прицела +-
  12. Global $corX = 0, $corY = 0 ; коррекция начала от курсора
  13.  
  14.  
  15. FileInstall("Vint_avatar_11_64x64.jpg", @TempDir & "\Vint_avatar_11_64x64.jpg")
  16. FileInstall("Схема.bmp", @TempDir & "\Схема.bmp")
  17. If _WinAPI_GetAsyncKeyState(0x41) = True Then $MouseOldX = -10
  18.  
  19. If @Compiled Then
  20. If $CmdLine[0] = 0 Then Exit(1)
  21. $section = $CmdLine[1]
  22. Else
  23. $section = 'TreePlant'
  24. EndIf
  25.  
  26. HotKeySet('{ESC}', '_EndProgramm')
  27. ReadingIni()
  28.  
  29. Vual()
  30. Shem()
  31. If $music Then
  32. FileInstall("Kin-dza-dza.mp3", @TempDir & "\Kin-dza-dza.mp3")
  33. $sSound = _SoundOpen (@TempDir & "\Kin-dza-dza.mp3")
  34. _SoundPlay($sSound,0)
  35. EndIf
  36.  
  37. $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)
  38. GUISetBkColor(0xABABAB)
  39. GUISetState(@SW_SHOWNOACTIVATE)
  40. _WinAPI_SetLayeredWindowAttributes($hGUI, '0xABABAB', 0, $LWA_COLORKEY)
  41. _GDIPlus_Startup()
  42. $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
  43. $hPenRed = _GDIPlus_PenCreate(0xFFFF0000) ; ручка для красной линии
  44. $hPenMagentaBold = _GDIPlus_PenCreate(0xFFFF00FF, 2) ; ручка для красной точки
  45. $hBrushBlue = _GDIPlus_BrushCreateSolid($colortext) ; синяя кисть
  46. $hFormat = _GDIPlus_StringFormatCreate() ; формат текста
  47. $hFamily = _GDIPlus_FontFamilyCreate('Tahoma') ; шрифт текста
  48. $hFont = _GDIPlus_FontCreate($hFamily, 14) ; размер шрифта
  49. $aPoints[0][0] = 4
  50.  
  51. Do
  52. $pos = MouseGetPos() ; получить текущие координыты указателя мыши
  53. $baseX = $pos[0] - $field_1x + $corX
  54. $baseY = $pos[1] - $field_1y + $corY
  55.  
  56. If $freeze Then
  57. If _WinAPI_GetAsyncKeyState(0x02) = True Then _EndProgramm() ; Нажата правая кнопка мыши - выход
  58.  
  59. If _WinAPI_GetAsyncKeyState(0x01) = False Then        ; Отпущена левая кнопка мыши
  60. If ($SetX = $baseX) And ($SetY = $baseY) Then
  61. ProClick()
  62. Sleep(300)
  63. EndIf
  64. $freeze = False
  65. EndIf
  66. EndIf
  67.  
  68. If Not ($MouseOldX = $baseX And $MouseOldY = $baseY) Then
  69. $MouseOldX = $baseX
  70. $MouseOldY = $baseY
  71. If $Poly = 1 Then
  72. _WinAPI_RedrawWindow( $hGUI )
  73. Else
  74. $Poly = 1
  75. EndIf
  76. Draw()
  77. EndIf
  78.  
  79. ; проверяем нажатие клавы
  80. If _WinAPI_GetAsyncKeyState(0x02) = True Then _EndProgramm() ; Нажата правая кнопка мыши - выход
  81.  
  82. If _WinAPI_GetAsyncKeyState(0x53) = True And Not $freeze Then IncX() ; Нажата S
  83. If _WinAPI_GetAsyncKeyState(0x57) = True And Not $freeze Then DecX() ; Нажата W
  84. If _WinAPI_GetAsyncKeyState(0x44) = True And Not $freeze Then IncY() ; Нажата D
  85. If _WinAPI_GetAsyncKeyState(0x41) = True And Not $freeze Then DecY() ; Нажата A
  86. If _WinAPI_GetAsyncKeyState(0x58) = True And Not $freeze Then Tree() ; Нажата X
  87.  
  88. ; проверяем нажатие мыши
  89. If _WinAPI_GetAsyncKeyState(0x01) = True And Not $freeze Then        ; Зажата левая кнопка мыши
  90. $SetX = $baseX
  91. $SetY = $baseY
  92. $freeze = True
  93. EndIf
  94.  
  95. Until Not Sleep(20)
  96.  
  97. _EndProgramm()
  98.  
  99. Func ProClick()
  100. Local $iX, $iY, $clX, $clY
  101.  
  102. For $iY = 0 To $ncy
  103. For $iX = 0 To $ncx
  104. $clX = $baseX + ($iY-$iX)*$dw + $field_1x - $corX
  105. $clY = $baseY + ($iY+$iX)*$dh + $field_1y - $corY
  106. If $clX > $field_1x And $clX < $field_2x And $clY > $field_1y And $clY < $field_2y Then
  107. MouseClick("left", $clX, $clY, 1, $speed) ; клик ЛКМ
  108. EndIf
  109. EndFunc   ;==>ProClick
  110.  
  111. Func ReadingIni()
  112. $field_1x = IniRead ('TreePlant.ini', $section, 'field_1x', '100')
  113. $field_1y = IniRead ('TreePlant.ini', $section, 'field_1y', '100')
  114. $field_2x = IniRead ('TreePlant.ini', $section, 'field_2x', '0')
  115. $field_2y = IniRead ('TreePlant.ini', $section, 'field_2y', '0')
  116. $tree = IniRead ('TreePlant.ini', $section, 'tree', 'small')
  117. $nx = IniRead ('TreePlant.ini', $section, 'nx', '3')
  118. $ny = IniRead ('TreePlant.ini', $section, 'ny', '4')
  119. $colortext = IniRead ('TreePlant.ini', $section, 'colortext', 0xFF0000FF)
  120.  
  121. $speed = IniRead ('TreePlant.ini', $section, 'speed', '5')
  122. If $speed < 0 Then $speed = 0
  123. If $speed > 100 Then $speed = 100
  124.  
  125. $run_count = IniRead ('TreePlant.ini', $section, 'run_count', '0')
  126. $run_count += 1
  127. IniWrite ('TreePlant.ini', $section, 'run_count', $run_count)
  128. $music = IniRead ('TreePlant.ini', $section, 'music', 'True')
  129. If $music And ($run_count/10 - Int($run_count/10) = 0) Then
  130. $music = True
  131. Else
  132. $music = False
  133. EndIf
  134.  
  135. If $field_2x = 0 Then $field_2x = @DesktopWidth-100
  136. If $field_2y = 0 Then $field_2y = @DesktopHeight-100
  137.  
  138. Nc()
  139. If $tree = 'big' Then
  140. $dh = 24
  141. $dw = 48
  142. Else
  143. $dh = 16
  144. $dw = 32
  145. EndIf
  146. EndFunc   ;==>ReadingIni
  147.  
  148. Func Tree()
  149. If $tree = 'small' Then
  150. $tree = 'big'
  151. $dh = 24
  152. $dw = 48
  153. Else
  154. $tree = 'small'
  155. $dh = 16
  156. $dw = 32
  157. EndIf
  158. $MouseOldX = -10
  159. $MouseOldY = -10
  160. IniWrite ('TreePlant.ini', $section, 'tree', $tree)
  161. Sleep($wait)
  162. EndFunc   ;==>Tree
  163.  
  164. Func IncX()
  165. If $nx < 18 Then
  166. $nx += 1
  167. Nc()
  168. IniWrite ('TreePlant.ini', $section, 'nx', $nx)
  169. Sleep($wait)
  170. EndIf
  171. EndFunc   ;==>IncX
  172.  
  173. Func IncY()
  174. If $ny < 38 Then
  175. $ny += 1
  176. Nc()
  177. IniWrite ('TreePlant.ini', $section, 'ny', $ny)
  178. Sleep($wait)
  179. EndIf
  180. EndFunc   ;==>IncY
  181.  
  182. Func DecX()
  183. If $nx > 1 Then
  184. $nx -= 1
  185. Nc()
  186. IniWrite ('TreePlant.ini', $section, 'nx', $nx)
  187. Sleep($wait)
  188. EndIf
  189. EndFunc   ;==>DecX
  190.  
  191. Func DecY()
  192. If $ny  > 1 Then
  193. $ny -= 1
  194. Nc()
  195. IniWrite ('TreePlant.ini', $section, 'ny', $ny)
  196. Sleep($wait)
  197. EndIf
  198. EndFunc   ;==>DecY
  199.  
  200. Func Nc()
  201. $ncx = $nx-1
  202. $ncy = $ny-1
  203. If $ncx < 0 Then
  204. $ncx = 0
  205. $nx = 1
  206. EndIf
  207. If $ncy < 0 Then
  208. $ncy = 0
  209. $ny = 1
  210. EndIf
  211. $MouseOldX = -10
  212. $MouseOldY = -10
  213. EndFunc   ;==>Nc
  214.  
  215. Func Draw()
  216. Local $iX, $iY, $tLayout
  217.  
  218. $aPoints[1][0] = $baseX
  219. $aPoints[1][1] = $baseY
  220. $aPoints[2][0] = $baseX - $ncx*$dw
  221. $aPoints[2][1] = $baseY + $ncx*$dh
  222. $aPoints[3][0] = $baseX + ($ncy-$ncx)*$dw
  223. $aPoints[3][1] = $baseY + ($ncx+$ncy)*$dh
  224. $aPoints[4][0] = $baseX + $ncy*$dw
  225. $aPoints[4][1] = $baseY + $ncy*$dh
  226. _GDIPlus_GraphicsDrawPolygon($hGraphic, $aPoints, $hPenRed)
  227.  
  228. For $iY = 0 To $ncy
  229. For $iX = 0 To $ncx
  230. _GDIPlus_GraphicsDrawEllipse($hGraphic, ($baseX + ($iY-$iX)*$dw)-2, ($baseY + ($iY+$iX)*$dh)-2, 4, 4, $hPenMagentaBold) ; точка
  231.  
  232. _GDIPlus_GraphicsDrawLine($hGraphic, $baseX, $baseY-$dl-$dh*2, $baseX, $baseY+$dl-$dh*2, $hPenRed)
  233. _GDIPlus_GraphicsDrawLine($hGraphic, $baseX-$dl, $baseY-$dh*2, $baseX+$dl, $baseY-$dh*2, $hPenRed)
  234.  
  235. _GDIPlus_GraphicsDrawLine($hGraphic, $baseX-$dw, $baseY-$dl-$dh, $baseX-$dw, $baseY+$dl-$dh, $hPenRed)
  236. _GDIPlus_GraphicsDrawLine($hGraphic, $baseX-$dl-$dw, $baseY-$dh, $baseX+$dl-$dw, $baseY-$dh, $hPenRed)
  237.  
  238. _GDIPlus_GraphicsDrawLine($hGraphic, $baseX+$dw, $baseY-$dl-$dh, $baseX+$dw, $baseY+$dl-$dh, $hPenRed)
  239. _GDIPlus_GraphicsDrawLine($hGraphic, $baseX-$dl+$dw, $baseY-$dh, $baseX+$dl+$dw, $baseY-$dh, $hPenRed)
  240.  
  241. ; координаты для надписи с длиной отрезка
  242. $tLayout = _GDIPlus_RectFCreate($baseX + 25, $baseY - 12, 0, 0)
  243. ; вывод надписи с размерами
  244. _GDIPlus_GraphicsDrawStringEx($hGraphic, $nx & ' x ' & $ny & ' ' & $tree, $hFont, $tLayout, $hFormat, $hBrushBlue)
  245. EndFunc   ;==>Draw
  246.  
  247. Func Vual()
  248. $aVual[0][0] = False
  249. $aVual[1][0] = False
  250. $aVual[2][0] = False
  251. $aVual[3][0] = False
  252. If $field_1y > 0 Then
  253. $aVual[0][0] = True
  254. EndIf
  255. If $field_2y < @DesktopHeight Then
  256. $aVual[1][0] = True
  257. EndIf
  258. If $field_1x > 0 Then
  259. $aVual[2][0] = True
  260. EndIf
  261. If $field_2x < @DesktopWidth Then
  262. $aVual[3][0] = True
  263. EndIf
  264.  
  265. ; MsgBox(4096,'@DesktopWidth', '@DesktopWidth  '&@DesktopWidth &@CRLF& '@DesktopHeight  '&@DesktopHeight)
  266. ; BitOR($WS_EX_TRANSPARENT, $WS_EX_LAYERED, $WS_EX_TOPMOST)
  267. If $aVual[0][0] Then
  268. $aVual[0][1] = GUICreate("", @DesktopWidth, $field_1y, 0, 0, BitOR($WS_DISABLED, $WS_POPUP), BitOR($WS_EX_TRANSPARENT, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
  269. GUISetBkColor(0x000000, $aVual[0][1])
  270. WinSetTrans($aVual[0][1], '', 100)
  271. GUISetState(@SW_SHOWNOACTIVATE, $aVual[0][1])
  272. EndIf
  273. If $aVual[1][0] Then
  274. $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))
  275. GUISetBkColor(0x000000, $aVual[1][1])
  276. WinSetTrans($aVual[1][1], '', 100)
  277. GUISetState(@SW_SHOWNOACTIVATE, $aVual[1][1])
  278. EndIf
  279. If $aVual[2][0] Then
  280. $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))
  281. GUISetBkColor(0x000000, $aVual[2][1])
  282. WinSetTrans($aVual[2][1], '', 100)
  283. GUISetState(@SW_SHOWNOACTIVATE, $aVual[2][1])
  284. EndIf
  285. If $aVual[3][0] Then
  286. $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))
  287. GUISetBkColor(0x000000, $aVual[3][1])
  288. WinSetTrans($aVual[3][1], '', 100)
  289. GUISetState(@SW_SHOWNOACTIVATE, $aVual[3][1])
  290. EndIf
  291. ; 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)
  292. EndFunc   ;==>Vual
  293.  
  294. Func Shem()
  295. ;If @DesktopWidth-$field_2x < 130 Then Return
  296. $hShem = GUICreate("", 274, 130, @DesktopWidth-274, @DesktopHeight-130-30, BitOR($WS_DISABLED, $WS_POPUP), BitOR($WS_EX_TRANSPARENT, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
  297. WinSetTrans($hShem, '', 250)
  298. GUICtrlCreatePic(@TempDir & "\\Схема.bmp", 0, 0, 0, 0)
  299. GUISetState(@SW_SHOWNOACTIVATE, $hShem)
  300. EndFunc   ;==>Shem
  301.  
  302. Func _EndProgramm()
  303. Local $FormEnd, $i, $hParent, $SoundCancel
  304.  
  305. ; Стоп и удаляем музыку
  306. If $music Then
  307. _SoundStop($sSound)
  308. _SoundClose($sSound)
  309. FileDelete(@TempDir & "\Kin-dza-dza.mp3")
  310. EndIf
  311. GUIDelete($hShem)
  312. FileInstall("Схема.bmp", @TempDir & "\Схема.bmp")
  313.  
  314. ; Удаляем затемнения
  315. For $i = 0 To 3
  316. If $aVual[$i][0] Then GUIDelete($aVual[$i][1])
  317.  
  318. ; удаление ресурсов
  319. FileDelete(@TempDir & "\Схема.bmp")
  320. _GDIPlus_FontDispose($hFont)
  321. _GDIPlus_FontFamilyDispose($hFamily)
  322. _GDIPlus_StringFormatDispose($hFormat)
  323. _GDIPlus_BrushDispose($hBrushBlue)
  324. _GDIPlus_PenDispose($hPenMagentaBold)
  325. _GDIPlus_GraphicsDispose($hGraphic)
  326. _GDIPlus_Shutdown()
  327. GUIDelete($hGUI)
  328.  
  329. $hParent  = GUICreate('')
  330. $FormEnd = GUICreate("О программе", 200, 160, -1, -1, BitOR($WS_DISABLED, $WS_POPUP), $WS_EX_TOPMOST, $hParent)
  331. GUICtrlCreatePic(@TempDir & "\Vint_avatar_11_64x64.jpg", 68, 8, 64, 64)
  332. GUICtrlCreateLabel("Autor Vint", 68, 80, 70, 20)
  333. GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
  334. GUICtrlSetColor(-1, 0x800080)
  335. GUICtrlCreateLabel("version 3.0.3 of 13.02.2015", 46, 95, 125, 17)
  336. GUICtrlSetFont(-1, 8, 400, 0, "Tahoma")
  337. GUICtrlCreateLabel("Посадка деревьев", 54, 116, 100, 17)
  338. GUICtrlCreateLabel("для ZF", 84, 130, 82, 17)
  339. WinSetTrans($FormEnd, '', 0) ; прозрачность 30
  340. GUISetBkColor(0xDCF2CA, $FormEnd)
  341. GUISetState(@SW_SHOW)
  342.  
  343. For $i = 0 To 255 Step 8
  344. WinSetTrans($FormEnd, '', $i)
  345. Sleep(1)
  346. $i = 1024
  347. While $i >= 0
  348. If $i < 256 Then WinSetTrans($FormEnd, '', $i)
  349.  
  350. $nMsg = GUIGetMsg()
  351. Switch $nMsg
  352. Case $GUI_EVENT_CLOSE
  353. EndSwitch
  354. Sleep(1)
  355. $i -= 8
  356. WEnd
  357.  
  358. ; удаление оставшихся ресурсов
  359. $SoundCancel = _SoundOpen (@TempDir & "\cancel4.mp3")
  360. _SoundPlay($SoundCancel,1)
  361. _SoundClose($SoundCancel)
  362. FileDelete(@TempDir & "\cancel4.mp3")
  363. FileDelete(@TempDir & "\Vint_avatar_11_64x64.jpg")
  364.  
  365. EndFunc ;==>_EndProgramm
  366.  
  367.  
« Последнее редактирование: Апрель 17, 2019, 11:12:04 am от Vint »