|
Вопрос # 2 140/ вопрос открыт / |
|
Здравствуйте, эксперты!
Как реализовать перетаскивание мышью компонента
по форме(например Button)
След образом кликнул и пока не отпускаешь кнопка
перемещается вслед за курсором по форме(других компонент нет)
 |
Вопрос задал: Anderson N.N (статус: 2-ой класс)
Вопрос отправлен: 28 ноября 2008, 22:25
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Anderson N.N!
Дергается/отстает/мерцает только по одной причине - неверно просчитываются координаты. Часто забывают, что они отсчитываются относительно кнопки. Но может и относительно формы.
Вот здесь http://delphi.about.com/library/weekly/aa102505a.htm есть статья (правда на английском), где рассказано на эту тему. Если с английским вообще туго, то на этой странце можно найти ссылку на архив с примером (http://delphi.about.com/library/weekly/code/src102505.zip)
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 29 ноября 2008, 00:19
|
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 1 декабря 2008, 10:52; участников в обсуждении: 3.
|
Gooddy (статус: 3-ий класс), 29 ноября 2008, 11:23 [#1]:
ща я быркенько сделаю. для того чтобы мерцание убрать можно Form1.DoubleBuffered:=true
Чисти код! Чисти код! Чисти код!
|
|
Вадим К (статус: Академик), 29 ноября 2008, 11:36 [#2]:
to Failure
Зачем лечить то, что не надо лечить, а просто надо написать красиво и правильно? Это как Application.ProcessMessage для лечение торможения а не юзанья потоков.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Gooddy (статус: 3-ий класс), 29 ноября 2008, 11:37 [#3]:
сори так тока для канвы. Вадим К. правильно сказал - не верно просчитываются координаты
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 29 ноября 2008, 11:47 [#5]:
кстати. каждый поток может использовать только 1 ядро. поэтому сейчас в приложениях лучше раздваивать потоки и использовать на максимум хотя бы 2 ядра. в идеале 4. а если в будущее смотреть все 8.
Чисти код! Чисти код! Чисти код!
|
|
Вадим К (статус: Академик), 29 ноября 2008, 13:03 [#6]:
И опять подмена понятий.
Итак, не поток может использовать один процессор, а операционная среда так не может раздвоить (хотя тут ещё и язык программирования виноват). А вот на уровне процессора можно считать, что любой поток обычно разбивается на кучку маленьких и выполняется в паралель. Называется это дело спариванием и распаралеливанием.
Некоторые ассемблерные команды, если они лежат в нужной последовательности, могут выполняться за один прием. А некоторые команды могут выполнятся паралельно (например один регистр увеличить на два, а второй на три).
Вот по этой причине и не рекомендуется без очень сильной надобности писать ассемблерные вставки. Можно просто написать неверную последовательность и код будет выполняться ужасно медленно.
Это было лирическое отступление
Так конечно и не понял, что там ООП паскаля непозволит...
А основная проблема в понимании потоков - это понять то, что поток выполняется паралельно. Для некоторых это очень сложно.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 1 декабря 2008, 10:52 [#7]:
Может поможет вот
это?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|