Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
ВнизНарисовать стрелки... Найти похожие ветки
← →
MetalFan (2003-08-19 15:39) [0]...поверх всех компонент формы.
на чем надо риовать, чтобы соединить стрелками например центры двух кнопок на форме? (вариант - рисовать карандашем на мониторе не пойдет)))
Алгоритм рисования, если можно...
надо чтобы эти стрелки "висели" на виду, пока я сам внутренним методом их не изничтожу)
заранее спасибо за советы!!!
← →
clickmaker (2003-08-19 15:49) [1]Как вариант, в OnPaint формы
var dc: HDC;
dc := GetDC(0);
pt1 := ClientToScreen(pt1);
pt2 := ClientToScreen(pt2);
MoveToEx(dc, pt1.x, pt1.y, nil);
LineTo(dc, pt2.x, pt2.y);
ReleaseDC(0, dc);
где pt1, pt2 - координаты центров
← →
Игорь Шевченко (2003-08-19 15:49) [2]Создай окно с регионом стрелки и рисуй его сверху всех окон на форме
← →
Юрий Федоров (2003-08-19 15:53) [3]>>Игорь Шевченко © (19.08.03 15:49) [2]
Класс ! :-)))
← →
MetalFan (2003-08-19 15:56) [4]надо, чтобы бытро работало)
вариант clickmaker"а мне больше нравится...
счас буду пробовать
← →
MetalFan (2003-08-19 16:00) [5]исчо в эту же тему...
как потом "залить" нужным цветом получившуюся фигуру?
← →
KSergey (2003-08-19 16:04) [6]Вариант clickmaker © (19.08.03 15:49) не канает в данной постановке, даже не пытайтесь
Кнопки - это отдельные окна, а потому только Игорь Шевченко © (19.08.03 15:49)
Единственное, я не уверен, что создание кривого окна - это лучший выход. Вполне можно успокоиться на прямоугльном окне поверх всех остальных, а отрисовывать лишь стрелку на нем, не отрисовывая фон. Возможноэ, это будет быстре, чем работа с "кривыми" окнами.
← →
MetalFan (2003-08-19 16:12) [7]мдя... дейтвительно не канает(((
а если стрелок надо 10...20? много ресурсов уйдет на отрисовку...
← →
MetalFan (2003-08-19 16:13) [8]"создать кривое окно" это как?
мона пример?
← →
clickmaker (2003-08-19 16:20) [9]Честно говоря, не понял, почему не канает. Отрисовывать стрелку на отдельном окне всяко больше ресурсов затребует, чем на том же самом...
← →
KSergey (2003-08-19 16:21) [10]MetalFan (19.08.03 16:12)
мдя... дейтвительно не канает(((
а если стрелок надо 10...20? много ресурсов уйдет на отрисовку...
послучайте, вас смущает, что ВСЕ кнопки, присутствующие на экране, отрисовывают свой фейс? Ну так а чего же переживать за собственную отрисовку? Сделать ее аккуратно - вот и все.
Для множества стрелочек можно создать одно окно и на нем все отрисовывать (все необходимые стрелочки).
Про кривые окна - да поищите в инете!! Инфы - горы!! (регионы окна delphi)
Только проблема: если стрелочки не просто показали и все, а еще и кликабельность кнопок должна присутствовать - то тут такие грабли: клики мыши будут валиться в это вершнее окно, откуда их нужно будет самостоятельно диспечерезировать в нижние окна. В принципе ничего страшного, просто аккуратненько, придется напрячься. Возможно, сдель вариант Игорь Шевченко с "кривыми" окнами проще в реализации окажется, хотя ресурсов по прежнему отожрет больше.
← →
KSergey (2003-08-19 16:23) [11]clickmaker © (19.08.03 16:20)
Честно говоря, не понял, почему не канает. Отрисовывать стрелку на отдельном окне всяко больше ресурсов затребует, чем на том же самом...
Поясняю еще раз: кнопки -отдельные окна!
Тогда уж часть стрелочки надо рисовать на форме, часть - на кнопках (если они, как я понял, поверх кнопок должны проходить). Геморрой еще тот по состыковке всего этого винегрета. Хотя как вариант - наверное возможен.
← →
clickmaker (2003-08-19 16:27) [12]KSergey © (19.08.03 16:23) [11]
clickmaker © (19.08.03 16:20)
Честно говоря, не понял, почему не канает. Отрисовывать стрелку на отдельном окне всяко больше ресурсов затребует, чем на том же самом...
Поясняю еще раз: кнопки -отдельные окна!
Тогда уж часть стрелочки надо рисовать на форме, часть - на кнопках (если они, как я понял, поверх кнопок должны проходить). Геморрой еще тот по состыковке всего этого винегрета. Хотя как вариант - наверное возможен.
Так GetDC( 0). В нем стрелка и будет поверх кнопок. И клики отлавливать не придется
← →
NAlexey (2003-08-19 16:30) [13]>Так GetDC(0). В нем стрелка и будет поверх кнопок
Так точна!
← →
MetalFan (2003-08-19 16:36) [14]не хотит по верх всех рисоваться(((
← →
NAlexey (2003-08-19 16:37) [15]Покажи код.
← →
MetalFan (2003-08-19 16:41) [16]one moment
← →
Игорь Шевченко (2003-08-19 16:43) [17]clickmaker © (19.08.03 16:27)
FormPaint вызывается до прорисовки дочерних контролов формы. (controls.pas TWinControl.PaintHandler)
← →
MetalFan (2003-08-19 16:47) [18]странно... на memo рисуте поверх, а на Panel не хотит(
← →
NAlexey (2003-08-19 16:54) [19]procedure TForm1.Button1Click(Sender: TObject);
var
pt1, pt2: TPoint;
dc: HDC;
begin
//R := Rect(10, 10, 100, 100);
//DrawArrow(R, false);
pt1.X := Button1.Left + (Button1.Width div 2);
pt1.Y := Button1.Top + (Button1.Height div 2);
pt2.X := Button2.Left + (Button2.Width div 2);
pt2.Y := Button2.Top + (Button2.Height div 2);
dc := GetDC(0);
pt1 := Form1.ClientToScreen(pt1);
pt2 := Form1.ClientToScreen(pt2);
MoveToEx(dc, pt1.x, pt1.y, nil);
LineTo(dc, pt2.x, pt2.y);
ReleaseDC(0, dc);
end;
← →
KSergey (2003-08-19 16:56) [20]clickmaker © (19.08.03 16:27)
Так GetDC(0). В нем стрелка и будет поверх кнопок. И клики отлавливать не придется
Хм, хотел сразу "кинуться в бой", но на всякий случай проверил - а ведь и правда, для GetDC(0) поверх всего рисует...
Единственное, если это в OnPaint формы сажать, но кнопки как-бы позже отрисовываются, и получается, что при создании формы линия действительно к моменту "стабилизации состояния" прерывается на кнопках, хотя если застиать перерисоваться форму (например, переместить за экран и назад) - то все классно.
ну тут видимо извернуться как-то надо. Хотя нажатие на кнопку - и опять линия "прервалась", т.к. форма-то не перерисовалась, а кнопка - перерисовалась.. Даааа, тут придется еще голову поломать куда сей код повешать, однако идея навенрное весьма удачная...
← →
Игорь Шевченко (2003-08-19 16:58) [21]KSergey © (19.08.03 16:56)
Minimize/Restore - и кнопки тоже после линии рисуются. Окно с регионом надежнее.
← →
KSergey (2003-08-19 17:03) [22]Игорь Шевченко © (19.08.03 16:58)
Minimize/Restore - и кнопки тоже после линии рисуются. Окно с регионом надежнее.
О чем и речь, ситуаций таких - масса...
Но почему прямоугольное окно не надежнее? Я не понимаю ;) Единственное - это реализовать диспетчеризацию кликов мыши. Хотя, возможно, я предвзято отношусь к кривым окнам, только ведь их будет не 1 или 2, а с два десятка, по утверждению автора. Как это будет работать на слабых машинах?
← →
MetalFan (2003-08-19 17:03) [23]ага, делаешь активным другое окно... и на нем плоки рисуются)))
а если делать не через регионы, а рисовать на формочке, которая сделана вот так:
{Brush.Style:=bsClear;
SetWindowLong(handle,GWL_EXSTYLE,GetWindowLong(handle,GWL_EXSTYLE) or WS_EX_TRANSPARENT);}
← →
KSergey (2003-08-19 17:05) [24]MetalFan (19.08.03 17:03)
Ну я о том и говорю, но повторюсь - клики мыши будут уходить этому окну...
← →
MetalFan (2003-08-19 17:06) [25]подскажите, как их "перелать ниже", PLZ!
← →
Игорь Шевченко (2003-08-19 17:06) [26]KSergey © (19.08.03 17:03)
> только ведь их будет не 1 или 2, а с два десятка, по утверждению
> автора. Как это будет работать на слабых машинах?
Также, как и с прямоугольными окнами :) Прямоугольные окна тоже в итоге через регионы рисуются :) Фень Юань это объясняет
← →
Юрий Федоров (2003-08-19 17:08) [27]Кстати, наверно можно одно кривое окно для всех стрелок сделать - через комбинацию регионов ?
← →
KSergey (2003-08-19 17:10) [28]Игорь Шевченко © (19.08.03 17:06)
> только ведь их будет не 1 или 2, а с два десятка, по утверждению
> автора. Как это будет работать на слабых машинах?
Также, как и с прямоугольными окнами :) Прямоугольные окна тоже в итоге через регионы рисуются :)
Вот только прямоугольные регоны, думаю, требуют меньше внутренних вычислений, верно? ;)
Фень Юань это объясняет
Почитав сегодняшний форум и мне загорелось ее купить.. Тем более, что цена какая-то небольшая заявлена издательством.. Может это просто й них уже залежалый товар стал?
← →
Игорь Шевченко (2003-08-19 17:12) [29]KSergey © (19.08.03 17:10)
> Вот только прямоугольные регоны, думаю, требуют меньше внутренних
> вычислений, верно?
GDI в некотором роде оптимизирован для работы с регионами :)
> Тем более, что цена какая-то небольшая заявлена издательством
Ну не знаю, мне она дорогая попалась, но книжка очень стоящая. Еще бы кто по user32.dll подобную книгу написал - цены бы не было :)
← →
NAlexey (2003-08-20 07:56) [30]>Ну не знаю, мне она дорогая попалась, но книжка очень стоящая. Еще бы кто по user32.dll подобную книгу написал - цены бы не было :)
А если не трудно объясни о чем речь. Может и мне это надо? :)
← →
Спрашивающий_ (2003-08-20 08:25) [31]А если все и кнопки и стрелки рисовать, впринципе обработать клик
по определенной координате можно без проблем,конечно все зависит что из себя представлять должна форма.
← →
MetalFan (2003-08-20 11:03) [32]значит останавливаемся на "кривой" форме))) через регионы?
а все таки как "переслать" клики "ниже"? видел где-то пример... про "прозрачную" для кликов форму... но не помню где(
← →
MetalFan (2003-08-20 11:04) [33]уточню - без вычисления координат всяких)
← →
reonid (2003-08-20 13:32) [34]>MetalFan (20.08.03 11:03) [32]
>а все таки как "переслать" клики "ниже"?
Возрращать HTTRANSPARENT в обработчике WM_NCHITTEST
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.01 c