![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рисование Bitmap на WinApi
ORMADA © (2005-06-09 09:13:00)Доб день!
Пытаюсь нарисовать простенький битмап используя толко выньапи
делаю так
var
PaintInfo: TPaintStruct;
DC: HDC;
function GetFontHandle(BoldFace: Integer): HFont;
begin
Result := CreateFont(8, 0, 0, 0, BoldFace, 0, 0, 0, 0, 0, 0, 0, 0, 'MS Sans Serif');
end;
function BuildSign: HBitmap;
var
Bmp: HBitmap;
MemDC: HDC;
Brush1: HBrush;
Pen: HPen;
R: TRect;
begin
Result := CreateCompatibleBitmap(DC, 16, 16);
MemDC := CreateCompatibleDC(DC);
Bmp := SelectObject(MemDC, Result);
Brush1 := SelectObject(MemDC, Brush);
Pen := SelectObject(MemDC, CreatePen(ps_Solid, 1, GrayColor));
Rectangle(MemDC, 0, 0, 16, 16);
DeleteObject(SelectObject(MemDC, CreatePen(ps_Solid, 1, TextColor)));
R.Left := 0;
R.top := 0;
R.Right := 15;
R.Bottom := 15;
Font := GetFontHandle(0);
SelectObject(DC, Font);
SetTextColor(DC, clBlack);
TextOut(DC,1,1,'x',1);
ExtTextOut(DC, 2, 2, eto_Opaque, @R, 'x', Length('x'), nil);
DeleteObject(SelectObject(MemDC, Pen));
SelectObject(MemDC, Brush1);
SelectObject(MemDC, Bmp);
DeleteDC(MemDC);
end;
//---------------------------------------------------------------
begin
DC := BeginPaint(Handle, PaintInfo);
try
Image1.Picture.Bitmap.Handle := BuildSign;
finally
EndPaint(Handle, PaintInfo);
end;
всё рисуется нормально только вот текст не выводиться почему то...
чё сделать ?
ORMADA (2005-06-09 14:20:00) [1]2 -=XP=-
ПАСИБА!!!!!!!!!
-=XP=- (2005-06-09 14:05:00) [2]
SetBkMode(MemDC, TRANSPARENT);
ORMADA (2005-06-09 14:00:00) [3]дааааа уж протормозил....... по полной
2 -=XP=- ПАСИБА :)
MemDC := CreateCompatibleDC(DC);
Result := LoadBitmap(HInstance, PAnsiChar('DOFW' + IntToStr(DayOfWeek(Now))));
Bmp := SelectObject(MemDC, Result);
Logbrush.lbStyle := BS_HOLLOW;
Logbrush.lbColor := 0;
Logbrush.lbHatch := 0;
FHBrush := CreateBrushIndirect(Logbrush);
SelectObject(MemDC, FHBrush);
Font := CreateFont(14, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, 'Arial');
SelectObject(MemDC, Font);
R := Rect(2, -2, 10, 10);
ExtTextOut(MemDC, 2, -2, eto_Opaque, @R, '09', Length('09'), nil);
DeleteObject(SelectObject(MemDC, FHBrush));
DeleteObject(SelectObject(MemDC, Font));
SelectObject(MemDC, Bmp);
DeleteDC(MemDC);
вот так вроде порядок правильный, но всё равно рисует текст на бэкграунде не прозрачный
-=XP=- (2005-06-09 13:39:00) [4]Вы хоть понимаете, что делаете? Или порядок вызовов фнукций для Вас не важен?
Вот тут:
Logbrush.lbStyle:= BS_HOLLOW ;
FHBrush := CreateBrushIndirect(Logbrush);
SelectObject(MemDC,FHBrush);
MemDC := CreateCompatibleDC(DC);
Bmp := SelectObject(MemDC, Result);
SetTextColor(MemDC, clWhite);
SetBkColor(MemDC, clBlack);
И тут:
Logbrush.lbStyle:= BS_HOLLOW;
FHBrush := CreateBrushIndirect(Logbrush);
SelectObject(MemDC, FHBrush);
MemDC := CreateCompatibleDC(DC);
Bmp := SelectObject(MemDC, Result);
SetTextColor(MemDC, clWhite);
SetBkColor(MemDC, clBlack);
ORMADA (2005-06-09 13:32:00) [5]вот так всё работает
function BuildSign: HBitmap;
var
Bmp: HBitmap;
MemDC: HDC;
R: TRect;
FHBrush: HBRUSH;
begin
R := Rect(0, 0,8, 8);
Result := CreateCompatibleBitmap(DC, 16, 16);
Result := LoadBitmap(HInstance, PAnsiChar('DOFW' + IntToStr(DayOfWeek(Now))));
Logbrush.lbStyle:= BS_HOLLOW ;
FHBrush := CreateBrushIndirect(Logbrush);
SelectObject(MemDC,FHBrush);
MemDC := CreateCompatibleDC(DC);
Bmp := SelectObject(MemDC, Result);
SetTextColor(MemDC, clWhite);
SetBkColor(MemDC, clBlack);
Font := CreateFont(14, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, 'Arial');
SelectObject(MemDC, Font);
ExtTextOut(MemDC, 2, -2, eto_Opaque, @R, '09', Length('09'), nil);
DeleteObject(SelectObject(MemDC, Font));
SelectObject(MemDC, Bmp);
DeleteDC(MemDC);
end;
но есть 1 косяк - по идее Logbrush.lbStyle:= BS_HOLLOW должно быть равноценно XOrMask.Canvas.Brush.Style := bsClear но не канает, т.е. получается что кисть не очищает
DVM (2005-06-09 11:49:00) [6]http://www.proglib.ru/detail_book.asp?id=192
ORMADA (2005-06-09 10:57:00) [7]2 DVM есть в электронном виде у тя ? или урла какая нить
DVM (2005-06-09 10:14:00) [8]
> чё сделать ?
Петзольда читать. А то что сверху написано ерунда какая-то наполовину.