Форум: "WinAPI";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];
ВнизРисование Bitmap на WinApi Найти похожие ветки
← →
ORMADA © (2005-06-09 09:13) [0]Доб день!
Пытаюсь нарисовать простенький битмап используя толко выньапи
делаю так
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;
всё рисуется нормально только вот текст не выводиться почему то...
чё сделать ?
← →
DVM © (2005-06-09 10:14) [1]
> чё сделать ?
Петзольда читать. А то что сверху написано ерунда какая-то наполовину.
← →
ORMADA © (2005-06-09 10:57) [2]2 DVM есть в электронном виде у тя ? или урла какая нить
← →
DVM © (2005-06-09 11:49) [3]http://www.proglib.ru/detail_book.asp?id=192
← →
ORMADA © (2005-06-09 13:32) [4]вот так всё работает
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 но не канает, т.е. получается что кисть не очищает
← →
-=XP=- © (2005-06-09 13:39) [5]Вы хоть понимаете, что делаете? Или порядок вызовов фнукций для Вас не важен?
Вот тут: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 14:00) [6]дааааа уж протормозил....... по полной
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 14:05) [7]
SetBkMode(MemDC, TRANSPARENT);
← →
ORMADA © (2005-06-09 14:20) [8]2 -=XP=-
ПАСИБА!!!!!!!!!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c