Pull to refresh

Comments 18

Я знаю что такое Delphi XE4, но просто ХЕ4 вводит в ступор. Просмотрев всё до хабраката так и не нашел расшифровки, зашел внутрь, увидел Delphi код и понял, что речь именно о делфи.
Да, посмотреть теги не удосужился, каюсь, но как-то непонятно, что ли. Не сочтите за труд хотябы в заголовке поставить Delphi?

А за статью спасибо, почитаю на досуге, любопытная тема очень затронута.
Потрясающий материал. Просто нет слов, насколько детально вы все описали.
Спасибо, я боялся что будет наоборот, слишком не понятно из-за обилия кода :)
Зачастую в подобных статьях слишком непонятно из-за недостатка кода :)
TGestureEvent я бы сделал анонимным типом (reference to ptocedure), это бы ничуть не изменило функционал, позволив сделать в некоторых случаях код легче читаемым и модифицируемым на ходу. Мелочь, а приятно.
Ну в принципе да, как вариант можно добавить такой функционал в дальнейшем.
Статья отличная, приятно читать.
В Delphi XE7 я так понимаю это все есть из коробки и не нужно столько усилия?
К сожалению, не могу ответить. Я работаю только в XE4. Судя по описаниям, должно присутствовать, но… не щупал :)
UFO just landed and posted this here
Добавил небольшое изменение кода для совместимости с Windows 8.
Если грубо, то в семерке сообщение WM_TOUCH отправляются окну через PostMessage:

CallStack
uSimple.TdlgSimpleTouchDemo.WmTouch((1637852, 5993380, 1637852, 42717168, 29604, 91, (), 64988, 24, (), 53232, 651, ()))
Vcl.Controls.TControl.WndProc((1637852, 42717168, 0, 1637676, 53232, 651, (), 0, 0, (), 64812, 24, ()))
Vcl.Controls.TWinControl.WndProc((576, 1, 252772352, 0, 1, 0, (), 0, 3857, (), 0, 0, ()))
Vcl.Forms.TCustomForm.WndProc((576, 1, 252772352, 0, 1, 0, (), 0, 3857, (), 0, 0, ()))
Vcl.Controls.TWinControl.MainWndProc(???)
System.Classes.StdWndProc(3936444,576,1,252772352)
:766a62fa; C:\Windows\syswow64\USER32.dll
:766a6d3a USER32.GetThreadDesktop + 0xd7
:766a77c4; C:\Windows\syswow64\USER32.dll
:766a788a USER32.DispatchMessageW + 0xf
Vcl.Forms.TApplication.ProcessMessage(???)
:005ac2e0 TApplication.ProcessMessage + $F8

а в восьмерке работает какой-то свой хук, мешающий нашему:

CallStack
uSimple.TdlgSimpleTouchDemo.WmTouch((1635260, 5993356, 1635260, 42979312, 29580, 91, (), 62396, 24, (), 53232, 655, ()))
Vcl.Controls.TControl.WndProc((1635260, 42979312, 267911168, 1635084, 53232, 655, (), 0, 4088, (), 62220, 24, ()))
Vcl.Controls.TWinControl.WndProc((576, 1, 267911168, 0, 1, 0, (), 0, 4088, (), 0, 0, ()))
Vcl.Forms.TCustomForm.WndProc((576, 1, 267911168, 0, 1, 0, (), 0, 4088, (), 0, 0, ()))
Vcl.Controls.TWinControl.MainWndProc(???)
System.Classes.StdWndProc(986744,576,1,267911168)
:77c77834 user32.CallNextHookEx + 0x97
:77c77a9a; C:\WINDOWS\SysWOW64\user32.dll
:77c77bed; C:\WINDOWS\SysWOW64\user32.dll
:77cccc33; C:\WINDOWS\SysWOW64\user32.dll
:77ecc692 ntdll.KiUserCallbackDispatcher + 0x2e
:77ce629c; C:\WINDOWS\SysWOW64\user32.dll
:77c7d2c7; C:\WINDOWS\SysWOW64\user32.dll
:77c7d400; C:\WINDOWS\SysWOW64\user32.dll
:77cc5bf6; C:\WINDOWS\SysWOW64\user32.dll
:609b5207; C:\WINDOWS\SysWOW64\Ninput.dll
:609aeb76; C:\WINDOWS\SysWOW64\Ninput.dll
:609aed0f; C:\WINDOWS\SysWOW64\Ninput.dll
:609a0b37; C:\WINDOWS\SysWOW64\Ninput.dll
:609a0d33; C:\WINDOWS\SysWOW64\Ninput.dll
:609ae8e2; C:\WINDOWS\SysWOW64\Ninput.dll
:6099ef78; C:\WINDOWS\SysWOW64\Ninput.dll
:6099e7a8; C:\WINDOWS\SysWOW64\Ninput.dll
:6099e9b2; C:\WINDOWS\SysWOW64\Ninput.dll
:6099f460; C:\WINDOWS\SysWOW64\Ninput.dll
:60987220; C:\WINDOWS\SysWOW64\Ninput.dll
:77ca3ffa; C:\WINDOWS\SysWOW64\user32.dll
:77ca925e; C:\WINDOWS\SysWOW64\user32.dll
:77c791e8; C:\WINDOWS\SysWOW64\user32.dll
:77c77834 user32.CallNextHookEx + 0x97
:77c77a9a; C:\WINDOWS\SysWOW64\user32.dll
:77c7ce71 user32.CallWindowProcW + 0x8b
Vcl.Controls.TWinControl.DefaultHandler(???)
:005207e3 TWinControl.DefaultHandler + $EB
:005206d2 TWinControl.WndProc + $5CA
:005a2c3a TCustomForm.WndProc + $612
:0051fd13 TWinControl.MainWndProc + $2F
:004c4e92 StdWndProc + $16
:77c77834 user32.CallNextHookEx + 0x97
:77c7930f; C:\WINDOWS\SysWOW64\user32.dll
:77c7988e; C:\WINDOWS\SysWOW64\user32.dll
:77c798f1 user32.DispatchMessageW + 0x10


Круто, что есть и толковые программисты на Delphi :)
Ну что значит на Delphi? :)
Я веду проекты помимо Delphi как на сях, так и целиком писанные на ассемблере, включая драйверы уровня ядра :)
Язык не панацея, он не может показать уровень подготовки разработчика — это просто инструмент :)
И тем не менее примеров грамотного кода на этом языке в сети не так уж много ) Так что вы делаете полезное дело, выкладывая это тут.
Возможно Вы где-то не там смотрите :) У меня вот много знакомых, в том числе и размещающих код в сети, пишут на делфи, как и я сам. Грамотного кода прилично, просто чаще попадается плохой. Но оно так на любом языке, увы.

В своё время искал примеры кода на HLSL (шейдеры), так простите говнокода было найдено неимоверное количество, а хорошего довольно мало.

Очевидно, что когда ты хорошо знаешь язык, стараешься придерживаться форматирования и конвенций именования, то критерии хороший\плохой код довольно объективными становятся и начинаешь ощущать что да как. А пока язык знаешь не очень хорошо, то хороший код не отличить от плохого чаще всего. Ну уж совсем про мрак я не говорю.
Sign up to leave a comment.

Articles