![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рамка [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);