Страница 1 из 1
Бегущая строка на Делфи кодинг графики
#1
Отправлено 03 September 2005 - 18:40
Уважаемые люди.
Мне нужна помощь в создании бегущей строки поверх всех окон.
Я делаю так:
procedure TForm1.DrawTextDC(x, y: integer; color: TColor; txtMsg : String; clsT : integer);
var
DC : HDC;
Canv : TCanVas;
OldBkMode : integer;
begin
Canv := TCanVas.Create ;
DC := GetDC (0);
Canv.Handle := DC;
with Canv do
begin
if clsT = 1 then
begin
Font.Color := Color;
Font.Size := 32;
Font.Name := 'Arial';
OldBkMode := SetBkMode(canv.Handle, TRANSPARENT);
TextOut(x, y, txtMsg);
InvalidateRect(DC, nil, False);
SetBkMode(Handle, OldBkMode);
ReleaseDC(0, DC);
end
else
begin
InvalidateRect(DC, nil, False);
ReleaseDC(0, DC);
end;
Free;
end;
end;
и таймером рисую
procedure TForm1.Timer1Timer(Sender: TObject);
begin
DrawTextHDC(x, y, clBlue, 'Бегущая Строка',0);
if x > 0 then
x := x - 5
else
begin
x := w;
y := h-200;
end;
DrawTextHDC(x, y, clBlue, 'Бегущая Строка',1);
end;
так вот после прогона стороки, у меня остаётся полоса. Как её убрать. Или посоветуйте другой код программы. Заранее блогадарен.
Мне нужна помощь в создании бегущей строки поверх всех окон.
Я делаю так:
procedure TForm1.DrawTextDC(x, y: integer; color: TColor; txtMsg : String; clsT : integer);
var
DC : HDC;
Canv : TCanVas;
OldBkMode : integer;
begin
Canv := TCanVas.Create ;
DC := GetDC (0);
Canv.Handle := DC;
with Canv do
begin
if clsT = 1 then
begin
Font.Color := Color;
Font.Size := 32;
Font.Name := 'Arial';
OldBkMode := SetBkMode(canv.Handle, TRANSPARENT);
TextOut(x, y, txtMsg);
InvalidateRect(DC, nil, False);
SetBkMode(Handle, OldBkMode);
ReleaseDC(0, DC);
end
else
begin
InvalidateRect(DC, nil, False);
ReleaseDC(0, DC);
end;
Free;
end;
end;
и таймером рисую
procedure TForm1.Timer1Timer(Sender: TObject);
begin
DrawTextHDC(x, y, clBlue, 'Бегущая Строка',0);
if x > 0 then
x := x - 5
else
begin
x := w;
y := h-200;
end;
DrawTextHDC(x, y, clBlue, 'Бегущая Строка',1);
end;
так вот после прогона стороки, у меня остаётся полоса. Как её убрать. Или посоветуйте другой код программы. Заранее блогадарен.
#2
Отправлено 03 September 2005 - 22:33
Попробуй перед выводом надписи сохранять кусок GetDC(0). Потом им и сотрешь свою надпись.
#4
Отправлено 04 September 2005 - 01:45
Так ты его присвоил в Canv: TCanvas, а у него есть метод CopyRect (кажется), координаты надписи ты знаешь, размеры можешь определить, вот и копирую например в переменную BitMap: TBitMap;
#5
Отправлено 11 September 2005 - 01:17
Есть прога(с pas-ми файлами), может понадобится, напиши почтовый ящик, скину. Разбираться самому неахота, да она и не большая. Делал давно, и дельфи устанавливать неохота чтобы сделать бегущую строку. Программа использует API функции. Вместо рисований линий попробуй поставить свой текст, а потом перерисовывай экран.
#6
Отправлено 14 September 2005 - 12:30
[aim] (11 September 2005, 1:17) писал:
Есть прога(с pas-ми файлами), может понадобится, напиши почтовый ящик, скину. Разбираться самому неахота, да она и не большая. Делал давно, и дельфи устанавливать неохота чтобы сделать бегущую строку. Программа использует API функции. Вместо рисований линий попробуй поставить свой текст, а потом перерисовывай экран.


Если не влом то скинь pas файлы, погляжу, мож что и выйдет у меня. :swoon:
Скинь на мыло [email protected]. :happy:
Заренее спасибо. Жду :secret:
#8
Отправлено 15 September 2005 - 01:03
[aim] (14 September 2005, 20:31) писал:
Принял твой исходник, спасибо. :secret:
#9
Отправлено 07 November 2005 - 01:39
полоску Refreshом можно убрать...
А если хочешь на PrimaryDC работать (его получаешь GetDC(0)) то почитай MSDN про графику... SaveDC ReleseDC и т.д.
добавлено:
А вообще я бы на твоем месте не делал бы себе лишний гемор...
Сделал прозрачную форму и двигай по ней Label (или PictureBox для картинки)
А если хочешь на PrimaryDC работать (его получаешь GetDC(0)) то почитай MSDN про графику... SaveDC ReleseDC и т.д.
добавлено:
А вообще я бы на твоем месте не делал бы себе лишний гемор...
Сделал прозрачную форму и двигай по ней Label (или PictureBox для картинки)
Страница 1 из 1