Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.04;
Скачать: CL | DM;

Вниз

Нарисовать стрелки...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.028 c
6-10865
AlexGof
2003-06-30 13:35
2003.09.04
как переименовать Attachments фай в NMPOP3 Fastnet


1-10794
malamba
2003-08-21 14:35
2003.09.04
самый простейший вопрос - свой var на основе TStrings


7-10990
Mikhael
2003-06-20 23:14
2003.09.04
Звук


14-10956
VEG
2003-08-13 17:51
2003.09.04
Дообновлял свою BIOS...


14-10983
Igor__
2003-08-14 07:40
2003.09.04
Ох эти цыклы!!!!