Главная страница
    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
2-1165928979
Handle
2006-12-12 16:09
2006.12.31
TTreeView


15-1165349640
Lovd_E
2006-12-05 23:14
2006.12.31
Stringgrid


15-1165767749
Kolan
2006-12-10 19:22
2006.12.31
Забавный скроллбар


2-1165740492
ctudent
2006-12-10 11:48
2006.12.31
Изменение позиции MDI окна


4-1156405675
maxistent
2006-08-24 11:47
2006.12.31
Иконки...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский