Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
14-10945
SergP
2003-08-16 09:17
2003.09.04
Proxomitron. Загружаются ли gif ы полностью?


11-10661
Ал
2002-12-26 09:22
2003.09.04
Глюк KOLForm?


4-11016
АТ
2003-07-04 13:03
2003.09.04
Помогите с синтаксисом сообщения WM_SETTEXT


1-10748
SRom
2003-08-19 18:52
2003.09.04
OLE-Automation


3-10582
korvin
2003-08-14 09:25
2003.09.04
---|Ветка была без названия|---





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский