Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


> чё сделать ?

Петзольда читать. А то что сверху написано ерунда какая-то наполовину.


Наверх

Титульная страница Поиск, карта сайта Написать письмо