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

Вниз

Рисование 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.05 c
4-1117818174
kami
2005-06-03 21:02
2005.08.07
несколько FileDescriptor в FileGroupDescriptor


1-1121927266
MAVr
2005-07-21 10:27
2005.08.07
Возможно ли изменить атрибуты файла?


14-1121535493
Piter
2005-07-16 21:38
2005.08.07
Помогите опознать фильм


14-1121153826
БарЛог
2005-07-12 11:37
2005.08.07
Правильно ли дарить подарки так...


14-1120217146
Kerk
2005-07-01 15:25
2005.08.07
Яндекс. Статистика запросов. Эксперимент.