Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.31;
Скачать: CL | DM;

Вниз

Прозрачный TextOut   Найти похожие ветки 

 
Lakearo   (2006-03-16 22:17) [0]

Нужно вывести текст поверх рисунка. Просто Canvas.TextOut выводит с фоном цвета кисти. Пробовал SetBkMode(Canvas.Handle,TRANSPARENT) - просто так помогает, но при использовании жирного или курсива или при назначении onPaint снова начинает выводить с фоном или даже вообще не выводит ничего. Точнее, заметно что, что-то рисуется, но потом стирается вместе с рисунком.

Не подскажете, что делать?


 
mdw ©   (2006-03-16 22:38) [1]

Canvas.Brush.BrushStyle:= bsClear;  ??


 
ECM ©   (2006-03-17 00:03) [2]


> но при использовании жирного или курсива или при назначении
> onPaint снова начинает выводить с фоном или даже вообще
> не выводит ничего. Точнее, заметно что, что-то рисуется,
>  но потом стирается вместе с рисунком.

А исходный код можно увидеть?
Или это секрет...?


 
BaryVetaL ©   (2006-03-17 11:03) [3]

Хотелось бы также узнать как на канве залить какую то ограниченную область не используя FloodFill.

По идее нужно использовать FloodFill(X,Y,fsBorder(fsSurface))

Где (Х,Y) точка внутри ограниченной области.
Но, она не работает(или я чего-то делаю не так), при попытке залить область она делает всю канву такого цвета (контур замкнут и точка сто процентов внутренняя)


 
Lakearo   (2006-03-17 12:06) [4]

> А исходный код можно увидеть?

Ну хотя бы вот такой пример...

program Project1;

uses Windows,KOL;

var F,R:PControl;

procedure onClick(Dummy:Pointer;Sender:PObj);
var A:PBitmap;
begin
 A:=NewBitmap(0,0);
 A.LoadFromFile("d:\test.bmp");
 A.Draw(F.Canvas.Handle,0,0);
 A.Free;

 if F.Font.FontStyle=[] then F.Font.FontStyle:=[fsBold] else F.Font.FontStyle:=[];
 SetBkMode(F.Canvas.Handle,TRANSPARENT);
 F.Canvas.TextOut(300,300,"1234567890");
end;

begin
 F:=NewForm(Applet,"123");
 R:=NewButton(F,"098");
 R.OnClick:=TOnEvent(MakeMethod(nil,@onClick));
 Run(F);
 F.Free;
end.


 
ECM ©   (2006-03-17 13:05) [5]

F.Canvas.RequiredState(HandleValid or FontValid or BrushValid);
SetBkMode(F.Canvas.Handle,TRANSPARENT);


Но я считаю, что отрисовывать всё надо в методе OnPaint (OnEraseBkgnd - им даже можно назначить общий обработчик - меньше будет мельканий).
Любой контрол должен уметь правильно отображать своё состояние в любой момент времени. Это как раз и достигается, когда вся прорисовка идет в OnPaint. Попробуйте вызвать у себя onClick а затем свернуть-развернуть окно - вся доп. отрисовка пропадёт...А если бы отрисовка была в OnPaint такого бы не происходило....:))
А в onClick для перерисовки нового состояния вызовите F.Invalidate - система пошлет контролу WM_PAINT (но предварительно WM_ERASEBKGND) и соответсвенно вызовется OnPaint


 
Lakearo   (2006-03-17 14:24) [6]

В принципе, я обычно и пишу в onPaint, это сейчас для примера просто не стал писать, ведь все равно должно было отрисоваться... Ну да ладно... Вообщем, с RequiredState все работает именно так, как должно =))

PS. Кстати, сначала забыл в onClick написать F.Invalidate, а форма все равно обновлялась. Видимо, при смене шрифта этот вызов все равно происходит...



Страницы: 1 вся ветка

Текущий архив: 2006.12.31;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.04 c
15-1165809672
Думкин
2006-12-11 07:01
2006.12.31
Мастера Бо, Бориса Новгородова - С Днем.


2-1165659568
bagos
2006-12-09 13:19
2006.12.31
hint


2-1165900730
Данил.Ялта
2006-12-12 08:18
2006.12.31
Большие *.тхт


15-1165438654
ferr
2006-12-06 23:57
2006.12.31
Может кто и не знает :)


6-1155121126
Юра
2006-08-09 14:58
2006.12.31
TClientSocket и интернет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский