Главная страница
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-1278503255
linuxoid
2010-07-07 15:47
2010.10.03
загрузка из базы в Treeview


2-1278941491
JohnKorsh
2010-07-12 17:31
2010.10.03
Альбомная ориентация листа при печати.


2-1278159774
alex810
2010-07-03 16:22
2010.10.03
Запрос с нечувствительностью к регистру


13-1126182925
Ilya39
2005-09-08 16:35
2010.10.03
Потоки в C#


15-1278262287
AlexDn
2010-07-04 20:51
2010.10.03
Hello World!