Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Рамка [WinXP]


Nightmare ©   (2007-06-17 12:32:00) 

Привет всем!!!
 Ниже приведён код, который рисует рамку на рабочем столе, но при прорисовке рамка оставляет за собой шлейф.

Var cur_pos: TPoint; r:TRect; Dc:HDC;
Begin
GetCursorPos(cur_pos);
r:=rect(frm.Left,frm.Top,cur_pos.X,cur_pos.Y);
DC: = GetDC(0);
DrawFocusRect(DC, r);
ReleaseDC(0, DC);
End;

Не могли бы вы подсказать как от него избавиться.


Nightmare   (2007-06-17 15:01:00) [1]

homm, беру свои слова назад, все работает, спасибо.
P.S. довольно интересный способ, хотя скорее всего единственный.


homm   (2007-06-17 15:00:00) [2]

С формой бредовый тормозной вариант. Будешь на кождое движение мыши регион строить и заменять? Было бы еше куда нишло, если бы ты его ручками смог построить, но ведб ты же, насколько я понимаю будешь рисовать на битмапе, а потом убирать один из цветов, как невидимый.


Nightmare   (2007-06-17 14:52:00) [3]

Сj, это конечно вариант использовать вторую форму, я наверное так и буду делать, так даже кода меньше, и кстате проще расположить на 2 форме не Shape, а опять же обрезать форму по битмапу.


homm   (2007-06-17 14:51:00) [4]

> function onmouseip

onmouseup


homm   (2007-06-17 14:50:00) [5]

ну и еше:

function onmouseip
begin
if flag
 DrawFocusRect(DC, OldRect);
end;


homm   (2007-06-17 14:49:00) [6]

Так попробуй.


var oldRect: TRect;
 flag: true;
procedure DrawRect();
Var cur_pos: TPoint; r:TRect; Dc:HDC;
Begin
GetCursorPos(cur_pos);
r:=rect(frm.Left,frm.Top,cur_pos.X,cur_pos.Y);
DC: = GetDC(0);
if flag then
DrawFocusRect(DC, OldRect);
DrawFocusRect(DC, r);
ReleaseDC(0, DC);
OldRect := r;
flag := TRUE;
End;

function onmousedown
begin
flag := FALSE;
end;


Cj   (2007-06-17 14:37:00) [7]

...и при OnMouseUp чтобы эта форма убиралась, а первая становилась размером с эту


Cj   (2007-06-17 14:34:00) [8]


> Мне надо форма чтобы растягивалась как у винампа, тоесть
> рамкой.

а, ну так то, дай подумаю...
попробуй создать еще одну, прозрачную форму с Shape и у Shape.Pen.Style:=[какойто-там с черточками] выберешь. ну вообщем попытайся так


Nightmare   (2007-06-17 14:26:00) [9]

Мне надо форма чтобы растягивалась как у винампа, тоесть рамкой.


Cj   (2007-06-17 14:07:00) [10]


> А теперь объясни нормально, что тебе нужно

точно!

Если ты хочеш себе форму как у винампа то используй регионы (Regions)


homm   (2007-06-17 14:03:00) [11]

> Моя форма обрезана по битмапу,поэтому приходится рисовать
> прямо на рабочем столе.

Нельзя рисовать на рабочем столе. Ты можешь рисовать тлько в своих созданных окнах, все остальное кривость и косость.

А теперь объясни нормально, что тебе нужно (или нарисуй)


Nightmare   (2007-06-17 13:42:00) [12]

этот пример опять же рисует на форме.

Моя форма обрезана по битмапу,поэтому приходится рисовать прямо на рабочем столе.


Cj   (2007-06-17 13:33:00) [13]

вот из FAQ
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988624857&n=16

а у винампа я рамки не видел


Nightmare   (2007-06-17 13:27:00) [14]

Cj, твой код рисует рамку только на форме, это немного не то.
Мне же скорее всего, надо обновлять рабочий стол после прорисовки рамки.

А как например это делает винамр?


Cj   (2007-06-17 13:18:00) [15]

А еще можешь перекрыть метод NCPaintили как-то там, у формы


Cj   (2007-06-17 13:17:00) [16]


> GetDC( 0);


если я тебя понял, то ты на столе рисуеш рамку для формы, (иначе как она может оставлять шлейф), неуверен но попробуй так:

DC: = GetDC(form1.handle);


Наверх

Титульная страница Поиск, карта сайта Написать письмо