Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
ВнизЛиния, преследующая курсор Найти похожие ветки
← →
jack128 © (2004-06-05 19:21) [0]Добрый вечер.
Есть такой незамысловатый код, суть которого в том, чтобы при перемещении мыши за курсором от начала координат тянулась прямая.procedure TFrame2.PaintBox1Paint(Sender: TObject);
var
p: TPoint;
begin
with TPaintBox(Sender), Canvas do
begin
MoveTo(0, 0);
GetCursorPos(p);
p := TControl(Sender).ScreenToClient(p);
LineTo(p.x, p.y)
end;
end;
procedure TFrame2.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
PaintBox1.Invalidate;
end;
Только вот проблема в том, что если у Frame2 поставить DoubleBuffered в True, то конец линии начинает весьма сильно отставать от курсора(видимо копирования Bitmap"а весьма долго происходит), а если DoubleBuffered := False, то, естественно, начинают мигать все графические объекты на фрейме.. Как бы так сделать, чтоб и линия от курсора не отставала, и фрейм не мигал..
← →
default © (2004-06-05 19:47) [1]у меня ничё не отстаёт...специально на форму несколько картинок кинул...
← →
jack128 © (2004-06-05 20:06) [2]я вот сейчас перегрузился, тоже нормально выглядит.. Но у мя Duron800/256МБ а пользователя может быть конфигурация и похуже. Если уж у меня так подтормаживает, то что у него будет? Может, кто нить радикальное решение проблемы предложит, а то предётся буфферизацию отключать..
← →
GuAV © (2004-06-05 20:17) [3]
> PaintBox1.Invalidate;
А может лучше в этой ситуации Repaint ?
← →
jack128 © (2004-06-05 20:27) [4]
> А может лучше в этой ситуации Repaint ?
<>Мда, это идея. Правда это может вызвать сильные тормаза - нужно проводить эксперементы на слабых машинах. Спасибо..
← →
GuAV © (2004-06-05 20:29) [5]
> Правда это может вызвать сильные тормаза
Хм, так ты хочеш рисовать линию без отставания или нет - ? :)
← →
jack128 © (2004-06-05 23:11) [6]мда. Сейчас вот достаточно замучил систему, чтобы начались тормоза, Repaint не помогает. В принципе можно было догадаться, но что то я недопёр.. Ладно, какие еще будут предложения? От буфферезации ОЧЕНЬ неохота отказываться ;-(
← →
GuAV © (2004-06-05 23:19) [7]а как кстаит рисуется прямоугольник выбора, когда выбирают много объектов? может это оно?
> Repaint не помогает
а может вообще ничего тогда не поможет.
попробуй пригрузить также и повыбирать на форме или на раб столе. если не сможешь, то и в своей проге линию рисовать не пытайся...
← →
GuAV © (2004-06-05 23:21) [8]можно попробовать вставить фрейм и отключить дв буф тока для него...
← →
jack128 © (2004-06-05 23:32) [9]
> можно попробовать вставить фрейм и отключить дв буф тока
> для него...
сейчас так и сделано. Вообще этот фрейм - это графический редактор электр сетей. На фрейме лежит PaintBox, на котором собственно я и рисую.. При отключенной буфферизации все жутко мерцает, не хочу я её отключать..
> а как кстаит рисуется прямоугольник выбора, когда выбирают
> много объектов? может это оно?
DrawFocusRect - нет не оно ;-)
← →
GuAV © (2004-06-05 23:38) [10]а может рисовать срествами апи прямо в mousemove?
← →
GuAV © (2004-06-05 23:40) [11]а кстати что Paint делает?
сначала SetCapure, а потом... ?
← →
jack128 © (2004-06-05 23:48) [12]
> а кстати что Paint делает?
> сначала SetCapure, а потом... ?
Как SetCupture?? Ты что, нафиг? в OnPaint, что я делаю - см [0], если же тя инетересует, что происходит в недрах VCL, то можешь и сам глянуть в исходники - там все прозрачно...
> а может рисовать срествами апи прямо в mousemove?
ОЧЕНЬ вероятны глюки, при таком походе.. Рисовать нужно всегда по приходу сообщения WM_PAINT, а не когда бог на душу положит ;-)
← →
GuAV © (2004-06-05 23:52) [13]> а кстати что Paint делает?
LOL
я имел ввиду MSPaint
← →
Gero © (2004-06-05 23:54) [14]А нафиг его весь перерисовывать?
Обновляй только так, где линия была.
← →
GuAV © (2004-06-05 23:59) [15]кстати в дельфи в папке демос есть хелловорлд называется
program GraphEx;
← →
default © (2004-06-06 00:01) [16]под обновлением понимается вырисовывание линии в режиме xor
для её стирания по старым координатам и рисование новой линии по новым координатам
← →
GuAV © (2004-06-06 00:02) [17]GuAV © (05.06.04 23:59) [15]
имхо, оно!
← →
GEN++ © (2004-06-06 00:08) [18]Есть такая программа Базис-Мебельщик 5.0 точно знаю написана на Delphi. курсор в виде перекрестья через весь экран, демка на сайте есть. Может чем поможет.
← →
jack128 © (2004-06-06 00:14) [19]
> А нафиг его весь перерисовывать?
> Обновляй только так, где линия была.
угу, сейчас пытаюсь, но тут свои сложности, эта конкретная линия изменяет свое положение, а другие могут изменить свой цвет, всяких изменений - туча, и отследить все эти изменения не просто..Будем пытаться, конечно, просто я надеелся есть какой то радикальный способ решить мою проблему :-)
> кстати в дельфи в папке демос есть хелловорлд называется
> program GraphEx;
начиная с какой версии? в пятерке я не вижу..
← →
GuAV © (2004-06-06 00:14) [20]зачем качать - вот уже демка:
C:\Program Files\Borland\Delphi7\Demos\Doc\Graphex\
← →
GuAV © (2004-06-06 00:16) [21]
> начиная с какой версии? в пятерке я не вижу..
Д7. могу на мыло уверен в пятерке пойдет.
← →
GuAV © (2004-06-06 00:20) [22]6 кБ архив рар давай мыло, если надо.
← →
default © (2004-06-06 00:22) [23]в 6-ой точно есть
← →
GuAV © (2004-06-06 00:26) [24]В 4й есть!
← →
GuAV © (2004-06-06 00:30) [25]
> В 4й есть!
и по сути практически никаких отличий
← →
jack128 © (2004-06-06 00:34) [26]Угу, сенкс, нашел -). О результатах доложу завтра - сейчас спать пора :-)
← →
GuAV © (2004-06-06 00:39) [27]
> jack128 © (06.06.04 00:34) [26]
> Угу, сенкс, нашел -). О результатах доложу завтра - сейчас
> спать пора :-)
Имхо, сегодня :) по крайней мере по Москве
← →
Думкин © (2004-06-06 07:50) [28]Эта тема поднималась в Медиа недавно - 2 или 3 ветки было.
Например:
http://delphimaster.net/view/8-1082133384/
← →
jack128 © (2004-06-06 09:52) [29]
> Думкин © (06.06.04 07:50)
угу, посмотрел - по сути буфферезация и дает такой же эффект отстования (в твоем примере - отстованеи вершины прямоугольника) от курсора..
По поводу демки - она как раз отлично выглидит, но я не могу понять почему ;-(
В Image просто рисование идет на канве "виртуального" битмапа, а потом все это копируется на "реальную" канву(ту на которой мы должны рисовать для вывода на экран).. Все это до жути напоминает все тот же DoubleBuffered := True. Люди, объясните в чем принципиальное отличие, не дайте помереть неучем!!!
← →
GuAV © (2004-06-06 11:48) [30]
> По поводу демки - она как раз отлично выглидит, но я не
> могу понять почему ;-(
Насколко я понял эу демку, она использует TImage, а не TPaintBox.
причём линию рисует pmNotXor, и возвращает назад так же, при рисовании таким способом нужно возвращать назад.
← →
GuAV © (2004-06-06 12:21) [31]ЗЫ - если кот-нибуть разберется, как этот пример работот, то имхо нужно будет это в faq запузырить, чтобы потом не повторять измышления и ошибки
← →
jack128 © (2004-06-06 12:58) [32]
> Насколко я понял эу демку, она использует TImage, а не TPaintBox.
> причём линию рисует pmNotXor, и возвращает назад так же,
> при рисовании таким способом нужно возвращать назад.
это понятно, но в результате все равно все сводиться к Invalidate всего Image"a и копированию его конву, так же как и при DoubleBuffered := True..
← →
GuAV © (2004-06-06 13:03) [33]Кстати, можешь ту же технику что в примере попорбовать не на имаге а на самом фрейме? просто интересно...
← →
jack128 © (2004-06-06 13:13) [34]
> Кстати, можешь ту же технику что в примере попорбовать не
> на имаге а на самом фрейме? просто интересно...
Знаешь - мне уже нечего не интересно..Вторые сутки над этой проблемой бьюсь и никак не могу понять в чем дело..:-(
Вообще, что на фрейме рисовать, что на PaintBox"е - принципиальной разницы нету, для винды, то все равно PaintBox"a не существует..
← →
GuAV © (2004-06-06 13:14) [35]в любом случае, а если [33] получится, то тем более, TPaintBox видимо дейсвительно только для того, чтобы в OnPaint статичную картину рисовать :(
← →
jack128 © (2004-06-06 13:15) [36]Кстати, в ходе эксперементов написал прикольный проэкт с офигенным глюком - обработчик события назначен в дезин тайм, но не срабатывает в ран тайм ;-)
Если кто хочет могу выслать..
← →
GuAV © (2004-06-06 13:17) [37]
> Если кто хочет могу выслать..
Вышли. А я вышлю свой глюк - форма таскаемая по моей вкладке свойсв в проводник
← →
GuAV © (2004-06-06 13:58) [38]
> Знаешь - мне уже нечего не интересно..Вторые сутки над этой
> проблемой бьюсь и никак не могу понять в чем дело..:-(
я не понял проблему. есть рабочий пример - так копировать вставить и всё
← →
jack128 © (2004-06-06 15:05) [39]Млин, я дурак. Не фига демка не работает. Если в конструкторе выставить размеры картинки побольше (у мя 800*500) и рисовать достаточно большую линию (пикселей в 400) то все очень даже заметно :-( С другой стороны утешает то, что MS Paint"e обнаружелась такая же фигня. В случае чего на Билли буду пенять :-) В общем по результатам иследований: вывод - "стандартными" методами эту проблему не решить...
← →
GuAV © (2004-06-06 15:22) [40]
> что MS Paint"e обнаружелась такая же фигня.
Что и следовало ожидать. Курсор-то крысы апаратный, но если пригрузить тои его перемещение тормозит.
********
Есть идея такая-скрыть нафиг курсор. рисовать самому курсор вместе с линеей и юзер нифига не заподозрит.
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.033 c