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

Вниз

Проблемма с GDI+   Найти похожие ветки 

 
unknowing   (2008-03-15 09:32) [0]

Всем привет! Вот код класса (примерно):

uses
Windows,GDIPAPI,GDIPOBJ;
type
TGyroHorizon = class(TObject)
private
 graphics : TGPGraphics;
 Bitmap : TGpBitmap;
 MplayBack : TGPGraphics;
 cBitmap: TGPCachedBitmap;
 Pen: TGPPen;

// protected

public

constructor Create (AOwner: TObject; Playback : HDC);
destructor  Destroy; override;
procedure View();

end;

implementation

constructor TGyroHorizon. Create (AOwner: TObject; Playback : HDC);
begin
 Bitmap:= TGpBitmap.Create(100 ,100 ,2498570);
 graphics := TGPGraphics.Create(Bitmap);
 graphics.Clear(aclBlack);
 MplayBack :=TGPGraphics.Create(Playback);
 Pen := TGPPen.Create(aclWhite);
 View(20);
  inherited Create;
end;

destructor  TGyroHorizon.Destroy;
begin
 Pen.Free;
 graphics.Free;
 MplayBack.Free;
 Bitmap.Free;
inherited Destroy;
end;

procedure TGyroHorizon.View(R : integer);
begin

cBitmap:= TGPCachedBitmap.Create(bitmap,MplayBack);
graphics.DrawEllipse(Pen, 10, 20, R, R);
MplayBack.DrawCachedBitmap(cBitmap, 0, 0);
cBitmap.Free;
end;
Вызываю конструктор GyroHorizon. Create в событии OnCreate основной формы.
При вызове GyroHorizon.View ничего не происходит..:) Где ошибка? Куда девался DC?


 
JohnJ   (2008-03-19 00:57) [1]

У меня похожая проблема:
Когда делаю прорисовку как в примерах (в PaintBox), то всё рисуется, но хочется всё это рисовать на собственный Bitmap:
procedure TForm1.FormDestroy(Sender: TObject);
begin
 Bitmap.Free;
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
 with Image1.Picture.Bitmap do
  begin
    Width := Bitmap.Width;
    Height := Bitmap.Height;
    Canvas.CopyRect(Canvas.ClipRect, Bitmap.Canvas, Bitmap.Canvas.ClipRect);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
    FN: string;
    Y: integer;
begin
 Bitmap := TBitmap.Create;
 Bitmap.Width := PaintBox1.Width;
 Bitmap.Height := PaintBox1.Height;
 GDIPlusInstr := TGDIP.Create(Bitmap.Handle);
 GDIPlusInstr.Clear(GDIPlusInstr.ARGBColor(255, 236, 233, 216));
 for i := Low(Instr) to High(Instr) do
  begin
    FN := ExtractFilePath(Application.ExeName) + "pics\"+Instr[i];
    Y := Y0 + (W_INSTR + 2 * (S_INSTR + R_INSTR)) * i;
    if FileExists(FN) then
     GDIPlusInstr.DrawImageFile(FN, X0, Y, W_INSTR, W_INSTR);
    GDIPlusInstr.DrawRect(X0 - S_INSTR, Y - S_INSTR, W_INSTR + 2 * S_INSTR, W_INSTR + 2 * S_INSTR, R_INSTR, GDIPlusInstr.ARGBColor(255, 236, 233, 216));
  end;
 Y := Y0 + (W_INSTR + 2 * (S_INSTR + R_INSTR)) * CurInstr;
 GDIPlusInstr.DrawRect(X0 - S_INSTR, Y - S_INSTR, W_INSTR + 2 * S_INSTR, W_INSTR + 2 * S_INSTR, R_INSTR, GDIPlusInstr.ARGBColor(255, 128, 128, 200));
 GDIPlusInstr.Free;
end;

В результате после клика на Image1 появляется белый прямоугльник, с размерами PaintBox, но в нём ничего нет, как-будто в Bitmap ничего не рисовалось, подскажите пожалуйста как справиться с этой проблемой.


 
JohnJ   (2008-03-19 00:59) [2]

забыл добавить что GDIPlusInstr это объект класса, производного от TGPGraphics и не делает ничего особо нового (повторю, что в PaintBox всё работает).


 
JohnJ   (2008-03-19 22:27) [3]

усё, разобрался ) ошибка в строке
GDIPlusInstr := TGDIP.Create(Bitmap.Handle);
надо передавать хэндл на канвас
GDIPlusInstr := TGDIP.Create(Bitmap.Canvas.Handle); - так работает


 
unknowing   (2008-03-19 22:49) [4]


> JohnJ   (19.03.08 22:27) [3]

Я передаю хэндл на канвас и у меня не работает...


 
Кузан Дмитрий   (2008-03-24 09:47) [5]

Так как указатель на объект и указатель на канву - это разные вещи , хотя и обы представлены указателем, то путать их не надо.


 
Кузан Дмитрий   (2008-03-24 09:48) [6]

Так как указатель на объект и указатель на канву - это разные вещи , хотя и обы представлены указателем, то путать их не надо.


 
Кузан Дмитрий   (2008-03-24 09:48) [7]

Так как указатель на объект и указатель на канву - это разные вещи , хотя и обы представлены указателем, то путать их не надо.



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.008 c
2-1278707050
demon
2010-07-10 00:24
2010.10.03
Запрос действия пользователя из потока


3-1245837856
serepun'ka
2009-06-24 14:04
2010.10.03
как вернуть иерархические данные


2-1278606821
Tima
2010-07-08 20:33
2010.10.03
ado и access


11-1224845500
Кто б сомневался
2008-10-24 14:51
2010.10.03
Аналог Timage для PNG - положить картинку на форму


15-1278403825
DaveRT
2010-07-06 12:10
2010.10.03
Нужен код