Вверх ↑
Ответов: 1926
Рейтинг: 172
#1: 2019-07-22 09:31:03 ЛС | профиль | цитата
В общем, вот решение без выдачи HDC на OnPaint:

Add(InlineCode,4748460,238,413)
{
EventPoints=#77:onPaint=Происходит при необходимости отрисовать элемент, выдавая пустой поток|
DataPoints=#9:dtPHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Share,Debug,messages,windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|23: FOldMes:TOnMessage;|61: function _onMess(var Msg:TMsg; var Rslt:Integer):Boolean;|19: procedure Work;|9: public|22: onPaint:THI_Event;|24: dtPHandle:THI_Event;|23: constructor Create;|5: end;|0:|14:implementation|0:|31:constructor THiAsmClass.Create;|5:begin|18: inherited Create;|15: InitAdd(Work);|4:end;|0:|27:procedure THiAsmClass.Work;|15:var c:PControl;|5:begin|42: c := PControl(ToIntegerEvent(dtPHandle));|30: if not assigned(c) then exit;|25: FOldMes := c.OnMessage;|24: c.OnMessage := _onMess;|4:end;|0:|29:function THiAsmClass._onMess;|5:begin|20: case Msg.message of|42: WM_PAINT: _hi_OnEvent(onPaint); //без DC|5: end;|43: Result := _hi_OnMessage(FOldMes,Msg,Rslt);|4:end;|0:|4:end.|
link(onPaint,4622620:doEvent4,[])
link(dtPHandle,6969958:PHandle,[])
}
Add(Edit,6969958,231,273)
{
Left=55
Top=55
Width=170
Font=[MS Sans Serif,8,1,0,1]
Point(PHandle)
Point(Handle)
Point(Width)
Point(Height)
Point(onMouseDown)
Point(onKeyDown)
Point(onMouseMove)
link(onMouseDown,4622620:doEvent1,[(289,293)(289,398)])
link(onKeyDown,4622620:doEvent2,[(289,300)(289,405)])
link(onMouseMove,4622620:doEvent3,[(289,307)(289,412)])
}
Add(Img_Rectangle,2605467,441,392)
{
DrawSource=1
Style=4
LineStyle=2
rX=2
rY=2
Color=8388608
BgColor=12639424
Point(Point1)
Point(Point2)
link(Bitmap,6969958:Handle,[(447,348)(251,348)])
link(Point1,14630089:Point,[])
link(Point2,16134061:Point,[])
}
Add(DeferredEvent,6057886,343,392)
{
link(onDeferredEvent,2055885:doOperation,[(419,398)(419,272)])
}
Add(PointXY,16134061,462,343)
{
link(X,2055885:Result,[])
link(Y,8176782:Result,[(475,321)(517,321)])
}
Add(Math,2055885,462,266)
{
OpType=1
Op2=4
ResultType=0
link(onResult,8176782:doOperation,[])
link(Op1,6969958:Width,[(468,254)(363,254)(363,323)(258,323)])
}
Add(Math,8176782,511,266)
{
OpType=1
Op2=4
ResultType=0
link(onResult,2605467:doDraw,[(555,272)(555,335)(429,335)(429,398)])
link(Op1,6969958:Height,[(517,254)(391,254)(391,323)(265,323)])
}
Add(PointXY,14630089,455,203)
{
}
Add(Hub,4622620,308,392)
{
InCount=4
OutCount=1
link(onEvent1,6057886:doDeferredEvent,[])
}

В общем-то, HDC особо и не нужен: мы всё равно используем Handle для рисования, но переделывать Win.pas так нельзя, поэтому - отдельный IC.

И в дополнение: как украсить стандартные элементы рисованием.


карма: 9
0
файлы: 1onpaintedit.png [513B] [993]