Вверх ↑
Этот топик читают: Гость
Ответов: 296
Рейтинг: 1
#1: 2026-06-02 16:36:24 ЛС | профиль | цитата
Подскажите пожалуйста схемку для рисования с помощью мыши. Задача обводить всякие объекты (в данном примере цифры) на фото в прямоугольную рамочку и потом сохранять это в файл. что то типа простейшего пэйнта но на Hiasm. Очень желательно с функцией отмены последнего действия.

Фото для примера

Add(MainForm,12820906,273,112)
{
Width=990
Height=760
Position=1
Point(Left)
Point(Top)
}
Add(Image,600675,273,252)
{
Left=5
Top=35
Width=965
Height=705
Color=16777215
Point(onMouseDown)
Point(onMouseUp)
Point(Handle)
Point(Left)
Point(Top)
link(onMouseDown,3031404:doCalc,[])
link(onMouseUp,2361335:doCalc,[])
}
Add(Img_Rectangle,10241775,280,490)
{
DrawSource=1
Size=5
Color=255
Point(Point1)
Point(Point2)
link(Bitmap,11957265:Var2,[])
link(Point1,14127172:Point,[(300,422)(384,422)])
link(Point2,7876351:Point,[(307,431)(496,431)])
}
Add(MouseEvent,7842332,378,112)
{
}
Add(PointXY,14127172,378,322)
{
link(X,3031404:Result,[])
link(Y,8142107:Result,[(391,306)(433,306)])
}
Add(PointXY,7876351,490,343)
{
link(X,2361335:Result,[])
link(Y,7352457:Result,[(503,324)(545,324)])
}
Add(GetDataEx,6735805,378,175)
{
link(Data,7842332:MouseX,[])
}
Add(GetDataEx,14369133,385,195)
{
Angle=3
link(Data,12820906:Left,[(279,200)])
}
Add(GetDataEx,2491712,385,168)
{
link(Data,7842332:MouseY,[])
}
Add(GetDataEx,1266282,434,205)
{
Angle=3
link(Data,12820906:Top,[(286,210)])
}
Add(MathParse,3031404,378,259)
{
DataCount=3
MathStr="%1 - %2 - %3 - 8"
link(onResult,8142107:doCalc,[])
link(X1,6735805:Var2,[])
link(X2,14369133:Var2,[])
link(X3,1181368:Var2,[])
}
Add(MathParse,8142107,427,259)
{
DataCount=3
MathStr="%1 - %2 - %3 - 30"
link(X1,2491712:Var2,[(433,192)(391,192)])
link(X2,1266282:Var2,[])
link(X3,7061063:Var2,[])
}
Add(MathParse,2361335,490,266)
{
DataCount=3
MathStr="%1 - %2 - %3 - 8"
link(onResult,7352457:doCalc,[])
link(X1,6735805:Var3,[(496,180)])
link(X2,14369133:Var3,[(503,200)])
link(X3,1181368:Var3,[(510,236)])
}
Add(MathParse,7352457,539,266)
{
DataCount=3
MathStr="%1 - %2 - %3 - 30"
link(onResult,10241775:doDraw,[(583,272)(583,384)(268,384)(268,496)])
link(X1,2491712:Var3,[(545,173)])
link(X2,1266282:Var3,[(552,210)])
link(X3,7061063:Var3,[(559,247)])
}
Add(GetDataEx,1181368,392,231)
{
Angle=3
link(Data,600675:Left,[(346,236)(346,296)(293,296)])
}
Add(GetDataEx,7061063,441,242)
{
Angle=3
link(Data,600675:Top,[(373,247)(373,296)(300,296)])
}
Add(Button,15047755,84,336)
{
Left=15
Top=10
link(onClick,12544909:doCapture,[])
}
Add(PictureStream,6126623,182,329)
{
FileName="C:\\db\\123.jpg"
Quality=30
}
Add(ScreenShort,12544909,133,336)
{
link(onCapture,6126623:doSave,[])
link(Handle,11957265:Var1,[(139,299)])
}
Add(GetDataEx,11957265,280,294)
{
link(Data,600675:Handle,[])
}


Редактировалось 3 раз(а), последний 2026-06-02 18:34:39
карма: 1

0
Ответов: 2489
Рейтинг: 698
#2: 2026-06-05 19:09:53 ЛС | профиль | цитата
Как вариант:


Add(MainForm,2953706,133,630)
{
Width=1123
Height=728
Point(onKeyDown)
link(onKeyDown,3786718:doCheckMask,[])
}
Add(PaintBox,9614065,322,126)
{
Width=1107
Height=689
Align=5
Color=16777215
MouseCapture=0
Point(MouseX)
Point(MouseY)
Point(onMouseDown)
Point(onMouseMove)
Point(onMouseUp)
Point(Width)
Point(Height)
link(onMouseDown,1780752:doEvent,[])
link(onMouseMove,6589010:doEvent,[(445,146)(445,244)])
}
Add(LineBreakEx,5771982,329,217)
{
Caption="mx"
Type=3
link(_Data,9614065:MouseX,[])
}
Add(LineBreakEx,5356291,336,203)
{
Caption="my"
Type=3
link(_Data,9614065:MouseY,[])
}
Add(LineBreakEx,8487043,322,231)
{
Caption="canvas"
Type=3
link(_Data,9614065:Bitmap,[])
}
Add(Img_Rectangle,13212228,560,238)
{
Point(Point1)
Point(Point2)
link(onDraw,13439808:doWork,[])
link(Bitmap,5687464:Var3,[(566,201)])
link(Point1,6156569:Result,[])
link(Point2,6255103:reCalc,[(587,233)(629,233)])
}
Add(LineBreakEx,14952567,574,91)
{
Caption="mx"
Type=2
}
Add(LineBreakEx,5454137,581,105)
{
Caption="my"
Type=2
}
Add(MathParse,6156569,574,133)
{
MathStr="%1 + %2 * 65536"
link(onResult,14664164:doCompare,[(716,139)(716,468)])
link(X1,14952567:getVar,[])
link(X2,5454137:getVar,[])
}
Add(LineBreakEx,9331400,616,147)
{
Caption="mx"
Type=2
}
Add(LineBreakEx,14275355,623,161)
{
Caption="my"
Type=2
}
Add(MathParse,6255103,616,189)
{
MathStr="%1 + %2 * 65536"
Point(reCalc)
link(X1,9331400:getVar,[])
link(X2,14275355:getVar,[])
}
Add(IndexToChanel,6589010,469,238)
{
Count=1
link(onEvent1,16585798:doDraw,[])
}
Add(Bitmap,11784647,770,406)
{
FillColor=16777215
Point(doCreate)
Point(onCreate)
Point(Width)
Point(HWidth)
Point(HHeight)
link(HWidth,2549607:getVar,[])
link(HHeight,14661263:getVar,[])
}
Add(If_else,14664164,777,462)
{
Op2=Integer(0)
link(onTrue,11784647:doCreate,[(821,468)(821,447)(758,447)(758,426)])
link(onFalse,3240804:doEvent1,[(845,475)(845,316)(242,316)(242,412)])
link(Op1,11784647:Width,[])
AddHint(-58,16,21,13,Op2)
}
Add(LineBreakEx,9874238,343,189)
{
Caption="w"
Type=3
link(_Data,9614065:Width,[])
}
Add(LineBreakEx,14006476,350,175)
{
Caption="h"
Type=3
link(_Data,9614065:Height,[])
}
Add(LineBreakEx,2549607,770,336)
{
Caption="w"
Type=2
}
Add(LineBreakEx,14661263,777,350)
{
Caption="h"
Type=2
}
Add(LineBreakEx,16044299,371,462)
{
Caption="bmp"
Type=2
}
Add(DoData,15757052,322,406)
{
link(onEventData,3635397:doWork2,[])
link(Data,2373224:getVar,[])
}
Add(Img_Bmp,16585798,511,238)
{
link(onDraw,13212228:doDraw,[])
link(Bitmap,5687464:Var2,[])
link(SourceBitmap,10686490:getVar,[])
}
Add(StrList,13532854,469,546)
{
Point(EndIdx)
Point(onGetString)
Point(doGetString)
link(onGetString,1984571:doConvert,[])
}
Add(StreamConvertor,6501242,329,546)
{
Point(Data)
link(onResult,13532854:doAdd,[])
link(Data,2863476:Var2,[])
}
Add(BitmapStream,1365984,343,504)
{
link(Stream,2863476:Var3,[(349,495)])
link(Bitmap,16044299:getVar,[(356,490)(377,490)])
}
Add(MemoryStream,617522,329,448)
{
}
Add(KeyMask,3786718,175,651)
{
Ctrl=1
Key=90
link(onTrue,14954374:doCompare,[])
}
Add(DoData,248330,392,574)
{
link(onEventData,12124941:doEvent1,[])
link(Data,13532854:EndIdx,[(398,528)(512,528)(512,615)(496,615)])
}
Add(StreamConvertor,1984571,532,553)
{
Mode=1
Point(Data)
link(onResult,8671188:doRead,[])
}
Add(BitmapStream,8671188,574,553)
{
link(onRead,13526982:doEvent1,[])
}
Add(Img_Bmp,15325019,644,560)
{
link(onDraw,4145283:doWork,[])
link(Bitmap,591499:getVar,[])
link(SourceBitmap,6995332:getVar,[])
}
Add(LineBreakEx,6995332,651,532)
{
Caption="bmp"
Type=2
}
Add(Hub,13526982,616,553)
{
link(onEvent1,3635397:doWork3,[(640,559)])
link(onEvent2,15325019:doDraw,[])
}
Add(GetDataEx,2863476,329,490)
{
link(Data,617522:Stream,[])
}
Add(LineBreakEx,10073136,511,175)
{
Caption="canvas"
Type=2
}
Add(GetDataEx,5687464,511,196)
{
link(Data,10073136:getVar,[])
}
Add(LineBreakEx,2373224,322,378)
{
Caption="canvas"
Type=2
}
Add(LineBreakEx,10686490,518,210)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,7711064,770,504)
{
Caption="bmp"
Type=3
link(_Data,11784647:Bitmap,[])
}
Add(Hub,3240804,266,406)
{
OutCount=4
link(onEvent1,15757052:doData,[])
link(onEvent2,1365984:doWrite,[(314,419)(314,517)])
link(onEvent3,6501242:doConvert,[(303,426)(303,552)])
link(onEvent4,617522:doClear,[(294,433)(294,461)])
}
Add(LineBreakEx,591499,644,511)
{
Caption="canvas"
Type=2
}
Add(HubEx,3635397,636,406)
{
link(onEvent,11784647:doLoad,[])
}
Add(LineBreakEx,13439808,602,238)
{
Caption="refresh"
}
Add(LineBreakEx,6266299,224,126)
{
Caption="refresh"
Type=1
link(OnEvent,14148174:doWork2,[])
}
Add(LineBreakEx,4145283,686,560)
{
Caption="refresh"
}
Add(If_else,14954374,217,658)
{
Op2=Integer(0)
link(onTrue,2562623:doEvent1,[(262,664)(262,643)])
link(onFalse,248330:doData,[(368,671)(368,580)])
link(Op1,13532854:Count,[(223,615)(482,615)])
AddHint(4,32,21,13,Op2)
}
Add(LineBreak,374062,721,413)
{
Caption="cl"
link(Out,11784647:doClear,[])
Primary=[2682082,-406,224]
}
Add(Hub,2562623,280,637)
{
link(onEvent1,2682082:In,[])
link(onEvent2,7812091:In,[(304,650)(304,657)])
}
Add(LineBreak,2462271,245,140)
{
Caption="cl"
link(Out,15666022:doEvent1,[])
Primary=[7812091,70,511]
}
Add(Hub,15666022,287,140)
{
link(onEvent1,9614065:doClear,[(319,146)(319,139)])
link(onEvent2,14148174:doWork3,[(312,153)])
}
Add(HubEx,14148174,308,126)
{
link(onEvent,9614065:doRefresh,[])
}
Add(IndexToChanel,1780752,469,133)
{
Count=1
link(onEvent1,6156569:doCalc,[])
}
Add(Hub,12124941,434,574)
{
link(onEvent1,13532854:doGetString,[])
link(onEvent2,13532854:doDelete,[(455,587)(455,566)])
}
Ctrl+Z отменят последнее действие.
карма: 11

0
Ответов: 296
Рейтинг: 1
#3: 2026-06-06 08:22:21 ЛС | профиль | цитата
sla8a писал(а):
Как вариант:
Ctrl+Z отменят последнее действие.

Отлично! Спасибо! Только не очень понял как картинку в фон подгрузить))))

Так правильно будет?

Add(MainForm,12152880,161,651)
{
Width=1123
Height=728
Point(onKeyDown)
link(onCreate,2472894:doLoad,[(225,671)(225,769)])
link(onKeyDown,3786718:doCheckMask,[])
}
Add(PaintBox,9614065,406,147)
{
Top=5
Width=1107
Height=689
Align=5
Color=16777215
MouseCapture=0
Point(MouseX)
Point(MouseY)
Point(onMouseDown)
Point(onMouseMove)
Point(onMouseUp)
Point(Width)
Point(Height)
link(onMouseDown,1780752:doEvent,[])
link(onMouseMove,6589010:doEvent,[(529,167)(529,265)])
}
Add(LineBreakEx,5771982,413,238)
{
Caption="mx"
Type=3
link(_Data,9614065:MouseX,[])
}
Add(LineBreakEx,5356291,420,224)
{
Caption="my"
Type=3
link(_Data,9614065:MouseY,[])
}
Add(LineBreakEx,8487043,406,252)
{
Caption="canvas"
Type=3
link(_Data,9614065:Bitmap,[])
}
Add(Img_Rectangle,13212228,644,259)
{
Point(Point1)
Point(Point2)
link(onDraw,13439808:doWork,[])
link(Bitmap,5687464:Var3,[(650,222)])
link(Point1,6156569:Result,[])
link(Point2,6255103:reCalc,[(671,247)(706,247)])
}
Add(LineBreakEx,14952567,658,112)
{
Caption="mx"
Type=2
}
Add(LineBreakEx,5454137,665,126)
{
Caption="my"
Type=2
}
Add(MathParse,6156569,658,154)
{
MathStr="%1 + %2 * 65536"
link(onResult,14664164:doCompare,[(800,160)(800,489)])
link(X1,14952567:getVar,[])
link(X2,5454137:getVar,[])
}
Add(LineBreakEx,9331400,693,161)
{
Caption="mx"
Type=2
}
Add(LineBreakEx,14275355,700,175)
{
Caption="my"
Type=2
}
Add(MathParse,6255103,693,203)
{
MathStr="%1 + %2 * 65536"
Point(reCalc)
link(X1,9331400:getVar,[])
link(X2,14275355:getVar,[])
}
Add(IndexToChanel,6589010,553,259)
{
Count=1
link(onEvent1,16585798:doDraw,[])
}
Add(Bitmap,11784647,868,427)
{
FillColor=16777215
Point(doCreate)
Point(onCreate)
Point(Width)
Point(HWidth)
Point(HHeight)
link(HWidth,2549607:getVar,[])
link(HHeight,14661263:getVar,[])
}
Add(If_else,14664164,875,483)
{
Op2=Integer(0)
link(onTrue,11784647:doCreate,[(919,489)(919,468)(856,468)(856,447)])
link(onFalse,3240804:doEvent1,[(929,496)(929,337)(326,337)(326,433)])
link(Op1,11784647:Width,[])
AddHint(-58,16,21,13,Op2)
}
Add(LineBreakEx,9874238,427,210)
{
Caption="w"
Type=3
link(_Data,9614065:Width,[])
}
Add(LineBreakEx,14006476,434,196)
{
Caption="h"
Type=3
link(_Data,9614065:Height,[])
}
Add(LineBreakEx,2549607,868,378)
{
Caption="w"
Type=2
}
Add(LineBreakEx,14661263,875,392)
{
Caption="h"
Type=2
}
Add(LineBreakEx,16044299,455,483)
{
Caption="bmp"
Type=2
}
Add(DoData,15757052,406,427)
{
link(onEventData,3635397:doWork2,[])
link(Data,2373224:getVar,[])
}
Add(Img_Bmp,16585798,595,259)
{
link(onDraw,13212228:doDraw,[])
link(Bitmap,5687464:Var2,[])
link(SourceBitmap,10686490:getVar,[])
}
Add(StrList,13532854,553,567)
{
Point(EndIdx)
Point(onGetString)
Point(doGetString)
link(onGetString,1984571:doConvert,[])
}
Add(StreamConvertor,6501242,413,567)
{
Point(Data)
link(onResult,13532854:doAdd,[])
link(Data,2863476:Var2,[])
}
Add(BitmapStream,1365984,427,525)
{
link(Stream,2863476:Var3,[(433,516)])
link(Bitmap,16044299:getVar,[(440,511)(461,511)])
}
Add(MemoryStream,617522,413,469)
{
}
Add(KeyMask,3786718,259,672)
{
Ctrl=1
Key=90
link(onTrue,14954374:doCompare,[])
}
Add(DoData,248330,476,595)
{
link(onEventData,12124941:doEvent1,[])
link(Data,13532854:EndIdx,[(482,549)(596,549)(596,636)(580,636)])
}
Add(StreamConvertor,1984571,616,574)
{
Mode=1
Point(Data)
link(onResult,8671188:doRead,[])
}
Add(BitmapStream,8671188,665,574)
{
link(onRead,3034722:doWork2,[])
}
Add(Img_Bmp,15325019,749,581)
{
link(onDraw,4145283:doWork,[])
link(Bitmap,591499:getVar,[])
link(SourceBitmap,6995332:getVar,[])
}
Add(LineBreakEx,6995332,756,553)
{
Caption="bmp"
Type=2
}
Add(Hub,13526982,714,574)
{
link(onEvent1,3635397:doWork3,[(738,580)])
link(onEvent2,15325019:doDraw,[])
}
Add(GetDataEx,2863476,413,511)
{
link(Data,617522:Stream,[])
}
Add(LineBreakEx,10073136,595,196)
{
Caption="canvas"
Type=2
}
Add(GetDataEx,5687464,595,217)
{
link(Data,10073136:getVar,[])
}
Add(LineBreakEx,2373224,406,399)
{
Caption="canvas"
Type=2
}
Add(LineBreakEx,10686490,602,231)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,7711064,868,525)
{
Caption="bmp"
Type=3
link(_Data,11784647:Bitmap,[])
}
Add(Hub,3240804,350,427)
{
OutCount=4
link(onEvent1,15757052:doData,[])
link(onEvent2,1365984:doWrite,[(398,440)(398,538)])
link(onEvent3,6501242:doConvert,[(387,447)(387,573)])
link(onEvent4,617522:doClear,[(378,454)(378,482)])
}
Add(LineBreakEx,591499,749,532)
{
Caption="canvas"
Type=2
}
Add(HubEx,3635397,734,427)
{
link(onEvent,11784647:doLoad,[])
}
Add(LineBreakEx,13439808,686,259)
{
Caption="refresh"
}
Add(LineBreakEx,6266299,294,147)
{
Caption="refresh"
Type=1
link(OnEvent,14148174:doWork2,[])
}
Add(LineBreakEx,4145283,791,581)
{
Caption="refresh"
}
Add(If_else,14954374,301,679)
{
Op2=Integer(0)
link(onTrue,2562623:doEvent1,[(346,685)(346,664)])
link(onFalse,248330:doData,[(452,692)(452,601)])
link(Op1,13532854:Count,[(307,636)(566,636)])
AddHint(4,32,21,13,Op2)
}
Add(LineBreak,11491854,819,434)
{
Caption="cl"
link(Out,11784647:doClear,[])
Primary=[2682082,-420,224]
}
Add(Hub,2562623,364,658)
{
link(onEvent1,2682082:In,[])
link(onEvent2,7812091:In,[])
}
Add(LineBreak,15210582,315,161)
{
Caption="cl"
link(Out,15666022:doEvent1,[])
Primary=[7812091,84,504]
}
Add(Hub,15666022,357,161)
{
link(onEvent1,9614065:doClear,[(393,167)(393,160)])
link(onEvent2,14148174:doWork3,[(382,174)])
}
Add(HubEx,14148174,378,147)
{
link(onEvent,9614065:doRefresh,[])
}
Add(IndexToChanel,1780752,553,154)
{
Count=1
link(onEvent1,6156569:doCalc,[])
}
Add(Hub,12124941,518,595)
{
link(onEvent1,13532854:doGetString,[])
link(onEvent2,13532854:doDelete,[(539,608)(539,587)])
}
Add(Img_Loader,2472894,504,763)
{
FileName="C:\\db\\123.jpg"
link(onLoad,3034722:doWork3,[(704,769)])
}
Add(HubEx,3034722,700,574)
{
link(onEvent,13526982:doEvent1,[])
}


Редактировалось 3 раз(а), последний 2026-06-06 08:41:19
карма: 1

0
Ответов: 2489
Рейтинг: 698
#4: 2026-06-06 10:28:12 ЛС | профиль | цитата
Вот вариант попроще:

Add(MainForm,16224286,343,539)
{
Width=1123
Height=728
Point(onKeyDown)
link(onKeyDown,3786718:doCheckMask,[])
}
Add(PaintBox,9614065,518,224)
{
Width=1107
Height=689
Align=5
Color=16777215
MouseCapture=0
Point(MouseX)
Point(MouseY)
Point(onMouseDown)
Point(onMouseMove)
Point(onMouseUp)
Point(Width)
Point(Height)
link(onMouseDown,1780752:doEvent,[])
link(onMouseMove,6589010:doEvent,[(641,244)(641,342)])
}
Add(LineBreakEx,5771982,525,315)
{
Caption="mx"
Type=3
link(_Data,9614065:MouseX,[])
}
Add(LineBreakEx,5356291,532,301)
{
Caption="my"
Type=3
link(_Data,9614065:MouseY,[])
}
Add(LineBreakEx,8487043,518,329)
{
Caption="canvas"
Type=3
link(_Data,9614065:Bitmap,[])
}
Add(Img_Rectangle,13212228,756,336)
{
Point(Point1)
Point(Point2)
link(onDraw,13439808:doWork,[])
link(Bitmap,5687464:Var3,[(762,299)])
link(Point1,6156569:Result,[])
link(Point2,6255103:reCalc,[(783,331)(825,331)])
}
Add(LineBreakEx,14952567,770,189)
{
Caption="mx"
Type=2
}
Add(LineBreakEx,5454137,777,203)
{
Caption="my"
Type=2
}
Add(MathParse,6156569,770,231)
{
MathStr="%1 + %2 * 65536"
link(onResult,14664164:doCompare,[(926,237)(926,552)])
link(X1,14952567:getVar,[])
link(X2,5454137:getVar,[])
}
Add(LineBreakEx,9331400,812,245)
{
Caption="mx"
Type=2
}
Add(LineBreakEx,14275355,819,259)
{
Caption="my"
Type=2
}
Add(MathParse,6255103,812,287)
{
MathStr="%1 + %2 * 65536"
Point(reCalc)
link(X1,9331400:getVar,[])
link(X2,14275355:getVar,[])
}
Add(IndexToChanel,6589010,665,336)
{
Count=1
link(onEvent1,16585798:doDraw,[])
}
Add(Bitmap,11784647,959,490)
{
FillColor=16777215
Point(doCreate)
Point(onCreate)
Point(Width)
Point(HWidth)
Point(HHeight)
link(HWidth,2549607:getVar,[])
link(HHeight,14661263:getVar,[])
}
Add(If_else,14664164,966,546)
{
Op2=Integer(0)
link(onTrue,11784647:doCreate,[(1010,552)(1010,531)(947,531)(947,510)])
link(onFalse,15757052:doData,[(1056,559)(1056,429)(585,429)(585,496)])
link(Op1,11784647:Width,[])
AddHint(-58,16,21,13,Op2)
}
Add(LineBreakEx,9874238,539,287)
{
Caption="w"
Type=3
link(_Data,9614065:Width,[])
}
Add(LineBreakEx,14006476,546,273)
{
Caption="h"
Type=3
link(_Data,9614065:Height,[])
}
Add(LineBreakEx,2549607,959,448)
{
Caption="w"
Type=2
}
Add(LineBreakEx,14661263,966,462)
{
Caption="h"
Type=2
}
Add(DoData,15757052,602,490)
{
link(onEventData,11442381:doEvent1,[])
link(Data,2373224:getVar,[])
}
Add(Img_Bmp,16585798,707,336)
{
link(onDraw,13212228:doDraw,[])
link(Bitmap,5687464:Var2,[])
link(SourceBitmap,10686490:getVar,[])
}
Add(KeyMask,3786718,385,560)
{
Ctrl=1
Key=90
link(onTrue,14954374:doCompare,[])
}
Add(Img_Bmp,15325019,756,553)
{
link(onDraw,4145283:doWork,[])
link(Bitmap,591499:getVar,[])
}
Add(Hub,13526982,728,546)
{
link(onEvent1,3414032:doWork3,[(750,552)])
link(onEvent2,15325019:doDraw,[])
}
Add(LineBreakEx,10073136,707,273)
{
Caption="canvas"
Type=2
}
Add(GetDataEx,5687464,707,294)
{
link(Data,10073136:getVar,[])
}
Add(LineBreakEx,2373224,602,462)
{
Caption="canvas"
Type=2
}
Add(LineBreakEx,10686490,714,308)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,7711064,959,588)
{
Caption="bmp"
Type=3
link(_Data,11784647:Bitmap,[])
}
Add(LineBreakEx,591499,756,525)
{
Caption="canvas"
Type=2
}
Add(LineBreakEx,13439808,798,336)
{
Caption="refresh"
}
Add(LineBreakEx,6266299,420,224)
{
Caption="refresh"
Type=1
link(OnEvent,14148174:doWork2,[])
}
Add(LineBreakEx,4145283,798,553)
{
Caption="refresh"
}
Add(If_else,14954374,427,567)
{
Op2=Integer(0)
link(onTrue,2562623:doEvent1,[(472,573)(472,552)])
link(onFalse,6226486:doOperation,[])
link(Op1,2314762:Var1,[(433,539)])
AddHint(4,32,21,13,Op2)
}
Add(LineBreak,14746814,910,497)
{
Caption="cl"
link(Out,11784647:doClear,[])
Primary=[2682082,-385,49]
}
Add(Hub,2562623,490,546)
{
link(onEvent1,2682082:In,[])
link(onEvent2,7812091:In,[(514,559)(514,566)])
}
Add(LineBreak,12043504,441,238)
{
Caption="cl"
link(Out,15666022:doEvent1,[])
Primary=[7812091,84,322]
}
Add(Hub,15666022,483,238)
{
link(onEvent1,9614065:doClear,[(515,244)(515,237)])
link(onEvent2,14148174:doWork3,[(508,251)])
}
Add(HubEx,14148174,504,224)
{
link(onEvent,9614065:doRefresh,[])
}
Add(IndexToChanel,1780752,665,231)
{
Count=1
link(onEvent1,6156569:doCalc,[])
}
Add(Hub,12124941,616,574)
{
OutCount=3
link(onEvent1,16491742:##select,[(640,580)(640,510)])
link(onEvent2,3484469:doData,[(648,587)(648,552)])
link(onEvent3,16491742:##delete,[(656,594)(656,517)])
}
Add(MultiElementEx,16491742,679,497)
{
Mode=1
}
BEGIN_SDK
Add(EditMultiEx,5464817,21,21)
{
WorkCount=#5:##add|8:##select|8:##delete|
VarCount=#7:##count|6:Bitmap|
Point(##add)
Point(##select)
Point(##delete)
Point(##count)
link(##add,16023460:doLoad,[(101,27)(101,104)])
link(Bitmap,16023460:Bitmap,[(34,175)(188,175)])
}
Add(Bitmap,16023460,182,98)
{
}
END_SDK
Add(DoData,3484469,686,546)
{
link(onEventData,13526982:doEvent1,[])
link(Data,16491742:Bitmap,[])
}
Add(Math,6226486,560,574)
{
OpType=1
Op2=1
link(onResult,12124941:doEvent1,[])
link(Op1,2314762:Var2,[])
AddHint(-2,35,30,13,Op2)
}
Add(GetDataEx,2314762,560,534)
{
Angle=1
link(Data,16491742:##count,[(685,539)])
}
Add(Hub,11442381,651,490)
{
link(onEvent1,3414032:doWork2,[])
link(onEvent2,16491742:##add,[])
}
Add(HubEx,3414032,746,490)
{
link(onEvent,11784647:doLoad,[])
}
Gitarist писал(а):
Так правильно будет?
Да все верно Bitmap (bmp) и есть фон.
карма: 11

0
Ответов: 296
Рейтинг: 1
#5: 2026-06-06 13:36:45 ЛС | профиль | цитата
sla8a писал(а):
Вот вариант попроще:



Благодарю!

Редактировалось 1 раз(а), последний 2026-06-06 13:37:39
карма: 1

0
Ответов: 1112
Рейтинг: 224
#6: 2026-06-06 20:56:53 ЛС | профиль | цитата
Gitarist писал(а):
что то типа простейшего пэйнта но на Hiasm. Очень желательно с функцией отмены последнего действия.

Примитивный редактор BMP картинок, только карандаш с отменой внесённых изменений.

Add(MainForm,2953706,42,105)
{
link(onCreate,7937065:doString,[])
}
Add(WinExec,12830869,147,105)
{
FileName="PowerShell"
Mode=0
Point(onConsoleResult)
Point(onConsoleError)
Point(doConsoleExec)
Point(onConsoleTerminate)
link(onConsoleTerminate,2953706:doClose,[(186,139)(186,160)(32,160)(32,132)])
}
Add(FormatStr,7937065,98,119)
{
Mask="$Win32 = Add-Type -MemberDefinition @'\r\n [DllImport("""kernel32.dll""")]\r\n public static extern IntPtr GetConsoleWindow();\r\n\r\n [DllImport("""user32.dll""")]\r\n public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);\r\n'@ -Name 'Win32Console' -Namespace 'Win32' -PassThru\r\n\r\n$consoleHandle = $Win32::GetConsoleWindow()\r\nif ($consoleHandle -ne [IntPtr]::Zero) {\r\n $null = $Win32::ShowWindow($consoleHandle, 0)\r\n}\r\n\r\n\r\nAdd-Type -AssemblyName System.Windows.Forms\r\nAdd-Type -AssemblyName System.Drawing\r\n\r\n$form = New-Object System.Windows.Forms.Form\r\n$form.Text = 'BMP Редактор (только Карандаш)'\r\n$form.Size = New-Object System.Drawing.Size 860, 720\r\n$form.MinimumSize = New-Object System.Drawing.Size 450, 300\r\n$form.StartPosition = 'CenterScreen'\r\n\r\n$global:bmp = New-Object System.Drawing.Bitmap 800, 600\r\n$global:g = [System.Drawing.Graphics]::FromImage($global:bmp)\r\n$global:g.Clear([System.Drawing.Color]::White)\r\n\r\n$isDrawing = $false\r\n$lastPoint = New-Object System.Drawing.Point\r\n$history = New-Object System.Collections.Generic.List[System.Drawing.Bitmap]\r\n\r\nfunction SaveToHistory {\r\n if ($history.Count -ge 20) { $history.RemoveAt(0) }\r\n $history.Add($global:bmp.Clone())\r\n}\r\nSaveToHistory\r\n\r\n$panel = New-Object System.Windows.Forms.Panel\r\n$panel.Location = New-Object System.Drawing.Point 10, 50\r\n$panel.Width = $form.ClientSize.Width - 20\r\n$panel.Height = $form.ClientSize.Height - 60\r\n$panel.BorderStyle = [System.Windows.Forms.BorderStyle]::Fixed3D\r\n$panel.AutoScroll = $true\r\n\r\n$panel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor \r\n [System.Windows.Forms.AnchorStyles]::Bottom -bor \r\n [System.Windows.Forms.AnchorStyles]::Left -bor \r\n [System.Windows.Forms.AnchorStyles]::Right\r\n\r\n$form.Controls.Add($panel)\r\n\r\n$pictureBox = New-Object System.Windows.Forms.PictureBox\r\n$pictureBox.Location = New-Object System.Drawing.Point 0, 0\r\n$pictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::AutoSize\r\n$pictureBox.Image = $global:bmp\r\n$panel.Controls.Add($pictureBox)\r\n\r\n# 5. Логика рисования мышью\r\n$pictureBox.Add_MouseDown({\r\n param($sender, $e)\r\n if ($e.Button -eq [System.Windows.Forms.MouseButtons]::Left) {\r\n $global:isDrawing = $true\r\n $global:lastPoint = $e.Location\r\n }\r\n})\r\n\r\n$pictureBox.Add_MouseMove({\r\n param($sender, $e)\r\n if ($global:isDrawing) {\r\n $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Black, 2)\r\n $global:g.DrawLine($pen, $global:lastPoint, $e.Location)\r\n $pen.Dispose()\r\n $global:lastPoint = $e.Location\r\n $pictureBox.Invalidate()\r\n }\r\n})\r\n\r\n$pictureBox.Add_MouseUp({\r\n param($sender, $e)\r\n if ($global:isDrawing) {\r\n $global:isDrawing = $false\r\n SaveToHistory\r\n }\r\n})\r\n\r\n$btnOpen = New-Object System.Windows.Forms.Button\r\n$btnOpen.Text = 'Открыть BMP'\r\n$btnOpen.Location = New-Object System.Drawing.Point 10, 10\r\n$btnOpen.Size = New-Object System.Drawing.Size 120, 30\r\n$btnOpen.Add_Click({\r\n $ofd = New-Object System.Windows.Forms.OpenFileDialog\r\n $ofd.Filter = 'BMP Files (*.bmp)|*.bmp|All Files (*.*)|*.*'\r\n \r\n if ($ofd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {\r\n $global:g.Dispose()\r\n $global:bmp.Dispose()\r\n foreach ($h in $history) { $h.Dispose() }\r\n $history.Clear()\r\n \r\n $loadedImg = [System.Drawing.Image]::FromFile($ofd.FileName)\r\n $global:bmp = New-Object System.Drawing.Bitmap $loadedImg\r\n $loadedImg.Dispose()\r\n \r\n $global:g = [System.Drawing.Graphics]::FromImage($global:bmp)\r\n $pictureBox.Image = $global:bmp\r\n \r\n SaveToHistory\r\n $pictureBox.Invalidate()\r\n }\r\n})\r\n$form.Controls.Add($btnOpen)\r\n\r\n$btnUndo = New-Object System.Windows.Forms.Button\r\n$btnUndo.Text = 'Отмена (Undo)'\r\n$btnUndo.Location = New-Object System.Drawing.Point 140, 10\r\n$btnUndo.Size = New-Object System.Drawing.Size 120, 30\r\n$btnUndo.Add_Click({\r\n if ($history.Count -gt 1) {\r\n $history.RemoveAt($history.Count - 1)\r\n $previousBmp = $history[$history.Count - 1]\r\n \r\n $global:g.Dispose()\r\n $global:bmp = $previousBmp.Clone()\r\n $global:g = [System.Drawing.Graphics]::FromImage($global:bmp)\r\n $pictureBox.Image = $global:bmp\r\n $pictureBox.Invalidate()\r\n }\r\n})\r\n$form.Controls.Add($btnUndo)\r\n\r\n$btnSave = New-Object System.Windows.Forms.Button\r\n$btnSave.Text = 'Сохранить BMP'\r\n$btnSave.Location = New-Object System.Drawing.Point 270, 10\r\n$btnSave.Size = New-Object System.Drawing.Size 120, 30\r\n$btnSave.Add_Click({\r\n $sfd = New-Object System.Windows.Forms.SaveFileDialog\r\n $sfd.Filter = 'BMP Files (*.bmp)|*.bmp'\r\n if ($sfd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {\r\n # ИСПРАВЛЕНИЕ: Получаем точную ссылку на формат через свойство .Bmp\r\n $bmpFormat = [System.Drawing.Imaging.ImageFormat]::Bmp\r\n $global:bmp.Save($sfd.FileName, $bmpFormat)\r\n [System.Windows.Forms.MessageBox]::Show('Файл успешно сохранен!', 'Успех')\r\n }\r\n})\r\n$form.Controls.Add($btnSave)\r\n\r\n$form.Add_FormClosed({\r\n $global:g.Dispose()\r\n $global:bmp.Dispose()\r\n foreach ($h in $history) { $h.Dispose() }\r\n})\r\n\r\n[System.Windows.Forms.Application]::Run($form)\r\n"
link(onFString,12830869:doConsoleExec,[])
}

карма: 20

0
6
Сообщение
...
Прикрепленные файлы
(файлы не залиты)