Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
ВнизTextOut и кисть bsClear, как вывести текст без фона? Найти похожие ветки
← →
melnikov (2007-01-09 02:50) [0]Здравствуйте!
У меня возник такой вопрос, при использовании функции 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;
← →
Джо © (2007-01-09 02:51) [1]Ничего не понял.
← →
melnikov (2007-01-09 02:56) [2]Здесь время просто выводится на Рабочий стол. Когда изменяются секунды, то предыдущая цифра не перерисовывается, а поверх неё выводится новая, в результате через некоторое время вместо цифр получаются закрашеные квадратики.
← →
Германн © (2007-01-09 02:57) [3]
> TextOut и кисть bsClear, как вывести текст без фона? [D7,
> XP]
Кисти присваивается некий стиль, но сама кисть нигде не пользуется. Шрифту тоже что-то присваивается, но он-то хоть используется в hCanvas.TextOut.
Но и я тоже не понял вопроса :(
← →
Palladin © (2007-01-09 02:59) [4]
> при выводе строки изображение "наслаивается" на предыдущее,
> как этого можно избежать?
наслаивается понятно, а избежать ты куда этого хочешь? все затереть? тогда будет фон который тебе не нужен, если не нужен фон, тогда изображение наслаивается, что тоже тебе не нужно... может сходишь в магазин? там такие шесты продаются классные... к одному из концов у них привязанны весенние тоненькие веточки... чем привязаны не знаю, но все вместе называется - метла
← →
Джо © (2007-01-09 03:00) [5]> [2] melnikov (09.01.07 02:56)
> Здесь время просто выводится на Рабочий стол. Когда изменяются
> секунды, то предыдущая цифра не перерисовывается, а поверх
> неё выводится новая, в результате через некоторое время
> вместо цифр получаются закрашеные квадратики.
Так а чего ты хочешь-то? С фоном тебе не нравится, без фона — тоже нет :)
← →
melnikov (2007-01-09 03:03) [6]Кисть влияет на вывод функции TextOut, если используется
hCanvas.Brush.Style := bsClear;
то текст выводится без фона, на Рабочий стол Windows, но предыдущий самостоятельно не затирается, т.е. нужно сначала восстановить фон под тем местом, на которое будет выведено следующее значение времени. Если используется стиль
hCanvas.Brush.Style := bsSolid;
то текст выводится нормально, т.е. старый текст "затирается", но текст выводится с фоном, а хотелось бы без фона.
← →
melnikov (2007-01-09 03:07) [7]Хочется использовать стиль bsClear, но нужно как-то сделать, чтобы текст отображался правильно, т.е. не наслаивался на предыдущий.
← →
melnikov (2007-01-09 03:09) [8]
> наслаивается понятно, а избежать ты куда этого хочешь? все
> затереть?
Нет, всё затирать не хочу, хочется чтобы под текстом не было фона от кисти.
← →
RASkov (2007-01-09 05:52) [9]
> [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 06:19) [10]
> RASkov (09.01.07 05:52) [9]
> Попробуй так, не совсем красиво, но так... для примера.
О, спасибо Вам ОГРОМНОЕ за код! Вроде всё работает отлично, именно так, как и хотелось! :))
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.064 c