Перейти к содержанию

Пример рисования (CE Lua)


Рекомендуемые сообщения

На CE Lua можно рисовать.

Пример1. Рисование графика (без шкалы)

post-3-0-46283600-1451874767_thumb.png

Chart.CT

Пример2. Рисование с анимацией

post-3-0-04953600-1432077525_thumb.png 

Классы для рисования (основные из main.lua). Примеры рисования ищите по аналогии по статьям Дельфи Рисование.

function CEButton1Click(sender)	ClBlack = 0x000000	ClRed 	= 0x0000FF	ClGreen = 0x008000	ClWhite = 0xFFFFFF	local CEImage1 = frmChartTool.CEImage1	local canvas = CEImage1.Canvas	local pen = canvas.Pen	local brush = canvas.Brush	local x1 = -10.0	-- Начало оси Ox	local x2 = 10.0		-- Конец оси Ox	local m	= 50.0		-- Масштаб графика	-- Центры осей Ox и Oy	local x0 = 0	local y0 = 0	-- Координаты, по которым отрисовывается график	local x = 0.0	local y = 0.0	canvas.clear()	x0 = CEImage1.Width / 2.0  			-- x0 = центр Image1 по оси Ox	y0 = CEImage1.Height / 2.0			-- y0 = центр Image1 по оси Oy	pen.Color = ClGreen				-- Цвет пера зеленый	pen.Width = 1					-- Ширина пера = 1	canvas.setPenPosition(0, y0)			-- Положение курсора = (0,y0)	canvas.lineTo(CEImage1.Width, y0)     		-- Линия от (0,y0) до (width,y0) - линия оси Ox	canvas.setPenPosition(x0, 0)         		-- Положение курсора = (x0,0)	canvas.lineTo(x0, CEImage1.Height)    		-- Линия от (x0,0) до (x0,height) - линия оси Oy	pen.Color = ClRed   				-- Цвет пера = красный	pen.Width = 2       				-- Ширина пера = 2	x = x1               				-- Начальное положение курсора по оси Ox	y = math.sin(x)           			-- Начальное положение курсора по оси Oy	canvas.setPenPosition(x0+math.floor(x*m), math.floor(y0-y*m))	-- Переносим курсор на заданные	while x < x2 do                        		-- координаты относительно центра осей координат и масштаба		x = x + 0.01		y = math.sin(x)		canvas.lineTo(x0+math.floor(x*m), math.floor(y0-y*m))	endend
function Draw()  r = math.random(x0)  y = y0-r  u = u + 1  pen.Color = math.random(0xffffff)  x = x0 + math.floor(r * math.sin(u * math.pi/180))  y = y0 - math.floor(r * math.cos(u * math.pi/180))  canvas.line(x0, y0, x, y)  if(u > 360) then    u = 0  endendif(UDF1 == nil) then   UDF1 = createForm(true)   UDF1.width = 800   UDF1.height = 800   UDF1.centerScreen()   canvas = UDF1.getCanvas()   pen = canvas.Pen   x0 = UDF1.ClientWidth / 2   y0 = UDF1.ClientHeight / 2   u = 0   r = y0 - 20   x = x0   myTimer = createTimer(UDF1, true)   myTimer.Interval = 10   myTimer.OnTimer = Drawend
Canvas Class : (Inheritance: CustomCanvas->Object)properties  Brush: Brush - The brush object  Pen: Pen - The pen object  Font: Font - The font object  Width: integer - Width of the canvas  Height: integer - Height of the canvasmethods  getBrush(): Returns the brush object of this canvas  getPen(): Returns the pen object of this canvas  getFont(): Returns the font object of this canvas  getWidth()  getHeight()  getPenPosition()  setPenPosition(x,y)  clear() - Clears the canvas  line(sourcex, sourcey, destinationx, destinationy)  lineTo(destinationx, destinationy)  rect(x1,y1,x2,y2)  fillRect(x1,y1,x2,y2)  textOut(x,y, text)  getTextWidth(text)  getTextHeight(text)  getPixel(x,y)  setPixel(x,y,color)  floodFill(x,y)  ellipse(x1,y1,x2,y2)  gradientFill(x1,y1,x2,y2, startcolor, stopcolor, direction) : Gradient fills a rectangle. Direction can be 0 or 1. 0=Vertical 1=Horizontal  copyRect(dest_x1,dest_y1,dest_x2,dest_y2, sourceCanvas, source_x1,source_y1,source_x2,source_y2) : Draws an image from one source to another. Usefull in cases of doublebuffering  draw(x,y, graphic) : Draw the image of a specific Graphic class  getClipRect() : Returns a table containing the fields Left, Top, Right and Bottom, which define the invalidated region of the graphical object. Use this to only render what needs to be rendered in the onPaint event of objectsPen Class : (Inheritance: CustomPen->CanvasHelper->Object)properties  Color: Integer - The color of the pen  Width: integer - Thickness of the penmethods  getColor()  setColor(color)  getWidth()  setWidth(width)</Some><Some>Brush Class : (Inheritance: CustomBrush->CanvasHelper->Object)properties  Color : Integermethods  getColor()  setColor()Font Class : (Inheritance: CustomFont->CanvasHelper->Object)createFont(): Returns a font object (default initialized based on the main ce window)properties  Name: string  Size: integer  Color: integermethods  getName(): Gets the fontname of the font  setName(string): Sets the fontname of the font  getSize(): Gets the size of the font  setSize(integer): Sets the size of the font  getColor(): Gets the color of the font  setColor(integer): Sets the color of the font  assign(font): Copies the contents of the font given as parameter to this font</Some>Graphic Class : (Inheritance: Object) : Abstract classproperties  Width: integer  Height: integer  Transparent: booleanmethods  getWidth(graphic): Gets the current width in pixels of this graphics object  setWidth(graphic, width): Sets thw width in pixels  getHeight(graphic)  setHeight(graphic, height)</Some>RasterImage class: (Inheritance: Graphic->Object) : Base class for some graphical controlsproperties  Canvas: Canvas  PixelFormat: PixelFormat - the pixelformat for this image. Will clear the current image if it had one. Supported pixelformats: pf1bit, pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit (recommended)  TransparentColor: integermethods  getCanvas(): Returns the Canvas object for this image  getPixelFormat():  Returns the current pixelformat  getPixelFormat(pixelformat):  Sets the pixelformat for this image. Will clear the current image if it had one. Supported pixelformats: pf1bit, pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit (recommended)  setTransparentColor(integer): Sets the color that will be rendered as transparent when drawn  getTransparentColor():  Returns the color set to be transparentBitmap class: (Inheritance: CustomBitmap->RasterImage->Graphic->Object) : Bitmap based Graphic objectcreateBitmap(width, height) - Returns a Bitmap object
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

Мастер,а как на пример сделать текст мигающий ??? вот я на пример пишу Gamehacklab[RU] а как сделать - что бы от мигал ?? :)

 

Здесь цвет меняется по таймеру с интервалом 100 мс от черного до красного на величину 0x10.

Как сделать смену прозрачности я не знаю. Похоже нужно вызывать Windows API потоком чтобы делать прозрачность. У Дельфи или у Лазаря сложности с прозрачным текстом и эти сложности переходят в CE Lua.

 

speedInterval = 100function Draw()	font.Color = colorRed	canvas.TextOut(10, 10, 'Gamehacklab[RU]')	if(bForwardPathIncrement) then	colorRed = colorRed - 0x10 else	colorRed = colorRed + 0x10 end	if(colorRed > 0xFF) then bForwardPathIncrement = true  colorRed = 0xF0 end	if(colorRed < 0x10) then bForwardPathIncrement = false colorRed = 0x10 endendif(myTimer == nil) then   UDF1 = createForm(true)   UDF1.width = 400   UDF1.height = 200   UDF1.centerScreen()   canvas = UDF1.getCanvas()   font = canvas.Font   font.Size = 25   canvas.Brush.Style = 1   colorRed = 0x10   bForwardPathIncrement = false   myTimer = createTimer(UDF1, true)   myTimer.Interval = speedInterval   myTimer.OnTimer = Drawend
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

 

Здесь цвет меняется по таймеру с интервалом 100 мс от черного до красного на величину 0x10.

Как сделать смену прозрачности я не знаю. Похоже нужно вызывать Windows API потоком чтобы делать прозрачность. У Дельфи или у Лазаря сложности с прозрачным текстом и эти сложности переходят в CE Lua.

 

 

Спасибо... попробую,а то мы с Игорем искали и не нашли  :rolleyes:   Хотя это Игоря задумка - сделать так, что бы кнопка горела,якобы указывающая что на неё нужно жмакнуть  :)

speedInterval = 100function Draw()	font.Color = colorRed	canvas.TextOut(10, 10, 'Gamehacklab[RU]')	if(bForwardPathIncrement) then	colorRed = colorRed - 0x10 else	colorRed = colorRed + 0x10 end	if(colorRed > 0xFF) then bForwardPathIncrement = true  colorRed = 0xF0 end	if(colorRed < 0x10) then bForwardPathIncrement = false colorRed = 0x10 endendif(myTimer == nil) then   UDF1 = createForm(true)   UDF1.width = 400   UDF1.height = 200   UDF1.centerScreen()   canvas = UDF1.getCanvas()   font = canvas.Font   font.Size = 25   canvas.Brush.Style = 1   colorRed = 0x10   bForwardPathIncrement = false   myTimer = createTimer(UDF1, true)   myTimer.Interval = speedInterval   myTimer.OnTimer = Drawend
Ссылка на комментарий
Поделиться на другие сайты

MasterGH, собственно вот что я хочу - в самом низу статьи NullAlexа мой комментарий:

http://nullalex.gamehacklab.ru/photoshop/photoshop_lessons/8-sozdaem-graficheskuyu-chast-dlya-treynerov-v-photoshop.html#comment

Ссылка на комментарий
Поделиться на другие сайты

MasterGH, собственно вот что я хочу - в самом низу статьи NullAlexа мой комментарий:

http://nullalex.gamehacklab.ru/photoshop/photoshop_lessons/8-sozdaem-graficheskuyu-chast-dlya-treynerov-v-photoshop.html#comment

Интересно,а зачем это в фотошопе рисовать??? если и в самом СЕ рисуется всё это... даже форму после можно сохранить как исходник(для дальнейшего использования)... правда потом коды переписать надо на выход и переход по ссылке. Хотя у него там что то задумано :) не с проста... но такое наверное и без фотошопа сделать можно. А музыку Игорь я тебе показывал как включать,отключать и ставить на паузу - на самом СЕ форуме всё лежит. Я кстати Игорь видел у них на форуме исходник трейнера на СЕ там прям анимационная картинка ну как звезды на ночном небе летят... Видел,но не взял себе,а щас уже не знай где там искать. Вот подобия вот этого http://forum.cheatengine.org/viewtopic.php?p=5456905&sid=04e3dad77ff231830d5395a274decdd9

Изменено пользователем LIRW
Ссылка на комментарий
Поделиться на другие сайты

MasterGH, собственно вот что я хочу - в самом низу статьи NullAlexа мой комментарий:

http://nullalex.gamehacklab.ru/photoshop/photoshop_lessons/8-sozdaem-graficheskuyu-chast-dlya-treynerov-v-photoshop.html#comment

...Ну и т.д. Короче очень хочется научиться делать нормальный (не нубский) трейнер с помощью СЕ.

А то уроков (видеоуроков) полноценных по данной теме не нашёл в инете.

 

Если уроков по созданию трейнеров на CE нет, то значит учатся без них.

 

Сначала добиваешься своих целей на Дельфи 7 с помощь поисковиков. Вот например не плхой тутор про рисование

http://www.youtube.com/watch?v=BP8ao8tNdbQ

 

После того как нашел документацию по Дельфи 7, немного на ней пописал программы по интерфейсу, то заходишь сюда main.lua и по аналогии на CE Lua пробуешь сделать. Будь то графика, музыка, нажатия эффекты и прочее. Если действительно хочешь научиться и есть сильный стимул, то научишься. Стоит начать и дело может пойти в гору.

Ссылка на комментарий
Поделиться на другие сайты

MasterGH, Всё это понятно. В данном случае мне в начале нужно научиться писать на  Дельфи 7. Я буду в будущем изучать С++ (выбрал его). Т.е. ты предлагаешь сперва изучить какой-то язык, немного научиться писать на нём, а потом вернуться к СЕ. Если я научусь писать на С++, то уже точно не вернусь к СЕ, т.к. размер ехе файла будет гораздо мегьше на С++.

Я же хотел наоборот, пока не научусь писать на С++, писать трейнеры с помощью СЕ, тем более всё в ней уже есть, кроме к сожалению перевода main.Lua.

Допустим как создать окно трейнера, как создать надпись, например Gamehacklab.ru и как сделать, чтобы при клике мыши на надписи, срабатывала ссылка LIRW мне всё показал (записал специально для меня видеоурок). В той же надписи есть события не только на клик мыши, уверен что там есть событие, когда мышь просто наводиться на надпись и если бы у меня был перевод всех кнопок и  main.Lua я давно бы уже сделал всё что хотел. К сожалению с помощью Гугл-переводчика я текст не воспринимаю и ещё в самом начале (карьеры взломщика  :-D , в первый месяц после регистрации на форуме) создавал тему  Есть ли перевод на русский main.lua, но конкретного ответа на вопрос не получил - видимо перевода нет.

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

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

1. Если выбрал С++, то тогда тебе не нужна генерация трейнеров на CE. CE тебе пригодится в лучшем случае для сбора данных и генерации исходников на С++.

 

2. Если выбрал трейнеры на CE да еще и с эффектами, то тогда CE AA, CE Lua и Дельфи. Ибо CE Lua это для тех, кто что-то когда-то писал на Дельфи. CE Lua это обертка Дельфи (особенно что касается визуальных эффектов). Если Дельфи не знаешь, а тем более принципа написания программ, будет довольно сложно или вообще никак.

 

3. Перевода main.lua скорее всего никогда не будет. Всем влом переводить.

 

4. С++ можно не учить, а сразу на нем писать. Самый простой пример

// Если нажали на кнопку F4if( (GetAsyncKeyState(VK_F4) & 1) == 1){	HWND hWnd;	DWORD dwID;	HANDLE hProcess;	// Ищем существующий hWnd по имени окна	hWnd = FindWindow(NULL, "Test");	// Получаем id процесса по hWnd	GetWindowThreadProcessId(hWnd, &dwID);	// Создать hProcess, открывая по dwID с правами PROCESS_ALL_ACCESS	hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, dwID);	// Значение 1000000 записать в адрес 0x45B5A4	int value = 1000000;	WriteProcessMemory(hProcess, (void*)0x45B5A4, &value, sizeof(&value), NULL);	// Закрыть hProcess (мы же его создали в системе, надо и закрыть)	CloseHandle(hProcess);}
Ссылка на комментарий
Поделиться на другие сайты

1. Согласен.

2. Жаль.

3. Очень жаль. 

4. Я так не умею, мне всё-таки вначале нужно понять (хотя бы в общих чертах) о чём речь идёт. 

 

 

Если выбрал трейнеры на CE

Я их не выбирал, просто пока не знаю языков программирования, скрипты более менее получаются в СЕ Ассемблер, а для трейнеров осталось сделать только внешнюю оболочку с не которыми опциями, чтобы трейнер не выглядел слишком уж по нубски. Так что от Lua нужен для этого минимум, не так много.

Ссылка на комментарий
Поделиться на другие сайты

  • 7 месяцев спустя...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.