![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TextOut и кисть bsClear, как вывести текст без фона? [D7, XP]
melnikov © (2007-01-09 02:50:00)Здравствуйте!
У меня возник такой вопрос, при использовании функции TextOut и кисти со стилем bsClear, при выводе строки изображение "наслаивается" на предыдущее, как этого можно избежать? Если используется стиль кисти bsSolid, то всё нормально, но тогда под текстом выводится фон, который вовсе не нужен :( Вот мой код, если кто-то сможет, помогите пожалуйста. Заранее благодарен за помощь!
procedure TForm1.Timer1Timer(Sender: TObject);
var
hCanvas: TCanvas;
begin
hCanvas := TCanvas.Create;
hCanvas.Handle := GetDC(HWND_DESKTOP);
hCanvas.Font.Size := 10;
hCanvas.Font.Name := 'Tahoma';
hCanvas.Font.Color := clYellow;
// hCanvas.Brush.Style := bsSolid;
hCanvas.Brush.Style := bsClear;
hCanvas.TextOut(20, 20, TimeToStr(Time));
ReleaseDC(HWND_DESKTOP, hCanvas.Handle);
end;
melnikov (2007-01-09 06:19:00) [1]
> RASkov (09.01.07 05:52) [9]
> Попробуй так, не совсем красиво, но так... для примера.
О, спасибо Вам ОГРОМНОЕ за код! Вроде всё работает отлично, именно так, как и хотелось! :))
RASkov (2007-01-09 05:52:00) [2]
> [0] melnikov (09.01.07 02:50)
Попробуй так, не совсем красиво, но так... для примера.
var
Form1: TForm1;
Bm: TBitMap;
hCanvas: TCanvas;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
hCanvas := TCanvas.Create;
hCanvas.Handle := GetDC(HWND_DESKTOP);
Bm:=TbitMap.Create;
Bm.Width:=60;
Bm.Height:=20;
Bm.Canvas.CopyRect(Bm.Canvas.ClipRect, hCanvas, Rect(100, 100, 160, 120));
hCanvas.Font.Size := 10;
hCanvas.Font.Name := 'Tahoma';
hCanvas.Font.Color := clYellow;
hCanvas.Brush.Style:=bsClear;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
BM.Free;
ReleaseDC(HWND_DESKTOP, hCanvas.Handle);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
hCanvas.CopyRect(Rect(100, 100, 160, 120), Bm.Canvas, Bm.Canvas.ClipRect);
hCanvas.TextRect(Rect(100, 100, 160, 120), 100, 100, TimeToStr(Time));
end;
melnikov (2007-01-09 03:09:00) [3]
> наслаивается понятно, а избежать ты куда этого хочешь? все
> затереть?
Нет, всё затирать не хочу, хочется чтобы под текстом не было фона от кисти.
melnikov (2007-01-09 03:07:00) [4]Хочется использовать стиль bsClear, но нужно как-то сделать, чтобы текст отображался правильно, т.е. не наслаивался на предыдущий.
melnikov (2007-01-09 03:03:00) [5]Кисть влияет на вывод функции TextOut, если используется
hCanvas.Brush.Style := bsClear;
то текст выводится без фона, на Рабочий стол Windows, но предыдущий самостоятельно не затирается, т.е. нужно сначала восстановить фон под тем местом, на которое будет выведено следующее значение времени. Если используется стиль
hCanvas.Brush.Style := bsSolid;
то текст выводится нормально, т.е. старый текст "затирается", но текст выводится с фоном, а хотелось бы без фона.
Джо (2007-01-09 03:00:00) [6]> [2] melnikov (09.01.07 02:56)
> Здесь время просто выводится на Рабочий стол. Когда изменяются
> секунды, то предыдущая цифра не перерисовывается, а поверх
> неё выводится новая, в результате через некоторое время
> вместо цифр получаются закрашеные квадратики.
Так а чего ты хочешь-то? С фоном тебе не нравится, без фона — тоже нет :)
Palladin (2007-01-09 02:59:00) [7]
> при выводе строки изображение "наслаивается" на предыдущее,
> как этого можно избежать?
наслаивается понятно, а избежать ты куда этого хочешь? все затереть? тогда будет фон который тебе не нужен, если не нужен фон, тогда изображение наслаивается, что тоже тебе не нужно... может сходишь в магазин? там такие шесты продаются классные... к одному из концов у них привязанны весенние тоненькие веточки... чем привязаны не знаю, но все вместе называется - метла
Германн (2007-01-09 02:57:00) [8]
> TextOut и кисть bsClear, как вывести текст без фона? [D7,
> XP]
Кисти присваивается некий стиль, но сама кисть нигде не пользуется. Шрифту тоже что-то присваивается, но он-то хоть используется в hCanvas.TextOut.
Но и я тоже не понял вопроса :(
melnikov (2007-01-09 02:56:00) [9]Здесь время просто выводится на Рабочий стол. Когда изменяются секунды, то предыдущая цифра не перерисовывается, а поверх неё выводится новая, в результате через некоторое время вместо цифр получаются закрашеные квадратики.
Джо (2007-01-09 02:51:00) [10]Ничего не понял.