{"id":534,"date":"2008-05-10T16:17:15","date_gmt":"2008-05-10T16:17:15","guid":{"rendered":"http:\/\/6teen.ru\/?p=383"},"modified":"2008-05-10T16:17:15","modified_gmt":"2008-05-10T16:17:15","slug":"5438","status":"publish","type":"post","link":"http:\/\/pblog.ru\/lab\/?p=534","title":{"rendered":"\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 TScrollBox"},"content":{"rendered":"<p>\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 TScrollBox<br \/>\n<!--more--><\/p>\n<pre class=\"alt2\" style=\"margin:0px; padding:6px; border:1px inset; width:580px; height:320px; overflow:auto\"><div>\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 TScrollBox\n\n\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 TScrollBox, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044f \u0434\u0432\u0430 \u0441\u043a\u0440\u043e\u043b\u0431\u0430\u0440\u0430. \u0415\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u043a\u0440\u043e\u043b\u0431\u0430\u0440\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0451 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043a\u0440\u043e\u043b\u0431\u0430\u0440\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0442\u0451\u043c \u0441\u0430\u0431\u043a\u043b\u0430\u0441\u0441\u0438\u043d\u0433\u0430 \u043e\u043a\u043e\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b (WinProc) \u0443 \u0441\u043a\u0440\u043e\u043b\u0431\u0430\u0440\u0430.\n\n\u041f\u0440\u0438\u043c\u0435\u0440:\n\ntype\n{$IFDEF WIN32}\n  WParameter = LongInt;\n{$ELSE}\n  WParameter = Word;\n{$ENDIF}\n  LParameter = LongInt;\n\n{\u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043c\u0435\u043d\u0451\u043d\u043d\u043e\u0439 \u043e\u043a\u043e\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b}\nvar\n  OldWindowProc : Pointer;\n\nfunction NewWindowProc(WindowHandle : hWnd;\n                       TheMessage   : WParameter;\n                       ParamW       : WParameter;\n                       ParamL       : LParameter) : LongInt\n{$IFDEF WIN32} stdcall; {$ELSE} ; export; {$ENDIF}\nvar\n  TheRangeMin : integer;\n  TheRangeMax : integer;\n  TheRange : integer;\nbegin\n\n  if TheMessage = WM_VSCROLL then begin\n  {\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f scroll box}\n    GetScrollRange(WindowHandle,\n                   SB_HORZ,\n                   TheRangeMin,\n                   TheRangeMax);\n  {\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e scroll box}\n    TheRange := GetScrollPos(WindowHandle,\n                             SB_VERT);\n  {\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u044b\u0439\u0442\u0438 \u0437\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d}\n    if TheRange < TheRangeMin then\n      TheRange := TheRangeMin else\n    if TheRange > TheRangeMax then\n      TheRange := TheRangeMax;\n  {\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 scroll bar}\n    SetScrollPos(WindowHandle,\n                 SB_HORZ,\n                 TheRange,\n                 true);\n  end;\n\n  if TheMessage = WM_HSCROLL then begin\n  {\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u0438\u043d. \u0438 \u043c\u0430\u043a\u0441. \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e scroll box}\n    GetScrollRange(WindowHandle,\n                   SB_VERT,\n                   TheRangeMin,\n                   TheRangeMax);\n  {\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e scroll box}\n    TheRange := GetScrollPos(WindowHandle,\n                             SB_HORZ);\n  {\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u044b\u0439\u0442\u0438 \u0437\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d}\n    if TheRange < TheRangeMin then\n      TheRange := TheRangeMin else\n    if TheRange > TheRangeMax then\n      TheRange := TheRangeMax;\n  {\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 scroll bar}\n    SetScrollPos(WindowHandle,\n                 SB_VERT,\n                 TheRange,\n                 true);\n  end;\n\n{ \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0443\u044e \u043e\u043a\u043e\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 }\n{ \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. }\n  NewWindowProc := CallWindowProc(OldWindowProc,\n                                  WindowHandle,\n                                  TheMessage,\n                                  ParamW,\n                                  ParamL);\nend;\n\n\nprocedure TForm1.FormCreate(Sender: TObject);\nbegin\n{ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u043e\u043a\u043e\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 }\n{ \u0438 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0443\u044e \u043e\u043a\u043e\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443.    }\n  OldWindowProc := Pointer(SetWindowLong(ScrollBox1.Handle,\n                                         GWL_WNDPROC,\n                                         LongInt(@NewWindowProc)));\nend;\n\nprocedure TForm1.FormDestroy(Sender: TObject);\nbegin\n{ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0441\u0442\u0430\u0440\u0443\u044e \u043e\u043a\u043e\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443.  }\n  SetWindowLong(ScrollBox1.Handle,\n                GWL_WNDPROC,\n                LongInt(OldWindowProc));\n\nend;\n<\/div><\/pre>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 TScrollBox<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1073,386],"tags":[1198,892,1730,989],"_links":{"self":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/534"}],"collection":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=534"}],"version-history":[{"count":0,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/534\/revisions"}],"wp:attachment":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=534"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}