что делать с потрей контекста ???

scorpyx
Дата: 25.06.2009 15:17:14
Доброго времени суток. Использую в проекте GDI+, при вызове процедуры рисования(вызывается в цикле) происходит потеря контекста(Hendel) канвы, пробовал перед каждым вызовом рисования передавать хендел и пересоздавать обьект GDI+ всё работает, но пересоздавать обьект перед рисованием каждой линии согласитесь не хорошо, написал процедурку, в которую передаю контекст канвы, и сверяю с контекстом содержащимся в обьекте GDI+, в случае если не совпадает, пересоздаю обьект с новым контекстом, почемуто срабатывает не всегда, вот код процедуры пересоздания:
 
type
  TGDIPGraphics = class
  private
    FGPGraphics: TGPGraphics;
......
end;

procedure TGDIPGraphics.HWNDAlignment(AHWND: Integer);
begin
  if not(Assigned(FGPGraphics)) or not(FGPGraphics.GetHDC = AHWND) then
  begin
    FGPGraphics.Free;
    FGPGraphics := TGPGraphics.Create(Integer(AHWND));
    FGPGraphics.SetSmoothingMode(SmoothingModeAntiAlias);  
    FGPGraphics.SetPageUnit(UnitPixel);
  end;
end;
Может ктонибудь подскажет как можно отслеживать изменение контекста канвы?
scorpyx
Дата: 25.06.2009 15:21:02
Всем спасибо за внимание разобрался сам, похоже что функция TGPGraphics.GetHDC либо работает не совсем правильно, либо я неправильно понял её значение, в итоге ввёл внутреннею классовую переменную, в которую записываю текущий контекст канвы.
Соколинский Борис
Дата: 25.06.2009 20:03:04
Просто Canvas.Lock и контекст сохранится. И Canvas.UnLock когда закончишь рисовать.