Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2010.10.03;
Скачать: [xml.tar.bz2];

Вниз

Проблемма с 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 вся ветка

Форум: "Media";
Текущий архив: 2010.10.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
2-1278512975
Norfolk
2010-07-07 18:29
2010.10.03
Помогите с линейной интерполяцией пожалуйста.


4-1235666335
_bass
2009-02-26 19:38
2010.10.03
Поиск хэндла.


15-1278427024
Virgo_Style
2010-07-06 18:37
2010.10.03
"стратегия" общения с проблемным сервером


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


15-1278002591
KilkennyCat
2010-07-01 20:43
2010.10.03
В поисках оптоволокна наткнулся на "больных"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский