Форум: "WinAPI";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];
ВнизРамка Найти похожие ветки
← →
Nightmare (2007-06-17 12:32) [0]Привет всем!!!
Ниже приведён код, который рисует рамку на рабочем столе, но при прорисовке рамка оставляет за собой шлейф.
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;
Не могли бы вы подсказать как от него избавиться.
← →
Cj © (2007-06-17 13:17) [1]
> GetDC(0);
если я тебя понял, то ты на столе рисуеш рамку для формы, (иначе как она может оставлять шлейф), неуверен но попробуй так:
DC: = GetDC(form1.handle);
← →
Cj © (2007-06-17 13:18) [2]А еще можешь перекрыть метод NCPaint или как-то там, у формы
← →
Nightmare (2007-06-17 13:27) [3]Cj, твой код рисует рамку только на форме, это немного не то.
Мне же скорее всего, надо обновлять рабочий стол после прорисовки рамки.
А как например это делает винамр?
← →
Cj © (2007-06-17 13:33) [4]вот из FAQ
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988624857&n=16
а у винампа я рамки не видел
← →
Nightmare (2007-06-17 13:42) [5]этот пример опять же рисует на форме.
Моя форма обрезана по битмапу,поэтому приходится рисовать прямо на рабочем столе.
← →
homm © (2007-06-17 14:03) [6]> Моя форма обрезана по битмапу,поэтому приходится рисовать
> прямо на рабочем столе.
Нельзя рисовать на рабочем столе. Ты можешь рисовать тлько в своих созданных окнах, все остальное кривость и косость.
А теперь объясни нормально, что тебе нужно (или нарисуй)
← →
Cj © (2007-06-17 14:07) [7]
> А теперь объясни нормально, что тебе нужно
точно!
Если ты хочеш себе форму как у винампа то используй регионы (Regions)
← →
Nightmare (2007-06-17 14:26) [8]Мне надо форма чтобы растягивалась как у винампа, тоесть рамкой.
← →
Cj © (2007-06-17 14:34) [9]
> Мне надо форма чтобы растягивалась как у винампа, тоесть
> рамкой.
а, ну так то, дай подумаю...
попробуй создать еще одну, прозрачную форму с Shape и у Shape.Pen.Style:=[какойто-там с черточками] выберешь. ну вообщем попытайся так
← →
Cj © (2007-06-17 14:37) [10]...и при OnMouseUp чтобы эта форма убиралась, а первая становилась размером с эту
← →
homm © (2007-06-17 14:49) [11]Так попробуй.
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;
← →
homm © (2007-06-17 14:50) [12]ну и еше:
function onmouseip
begin
if flag
DrawFocusRect(DC, OldRect);
end;
← →
homm © (2007-06-17 14:51) [13]> function onmouseip
onmouseup
← →
Nightmare (2007-06-17 14:52) [14]Сj, это конечно вариант использовать вторую форму, я наверное так и буду делать, так даже кода меньше, и кстате проще расположить на 2 форме не Shape, а опять же обрезать форму по битмапу.
← →
homm © (2007-06-17 15:00) [15]С формой бредовый тормозной вариант. Будешь на кождое движение мыши регион строить и заменять? Было бы еше куда нишло, если бы ты его ручками смог построить, но ведб ты же, насколько я понимаю будешь рисовать на битмапе, а потом убирать один из цветов, как невидимый.
← →
Nightmare (2007-06-17 15:01) [16]homm, беру свои слова назад, все работает, спасибо.
P.S. довольно интересный способ, хотя скорее всего единственный.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c