Einzelnen Beitrag anzeigen

surfer007

Registriert seit: 16. Jan 2010
51 Beiträge
 
Delphi 7 Professional
 
#2

AW: Graphics32 - EAccessViolation - Mausevent unter TImgView32

  Alt 10. Jan 2011, 02:12
Hi,

ist mir gerade auch passiert
Es knallt bei MouseDown und MouseUp.
Wäre schon interessant zu erfahren warum das passiert.

Meine Lösung bis jetzt ist diese:
Code:
function TLayerCollection.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer): TCustomLayer;
begin
  if Assigned(MouseListener) then
    Result := MouseListener
  else
    Result := FindLayerAtPos(X, Y, LOB_MOUSE_EVENTS);

  // ##########################################################################
  // Start Modified
  // ##########################################################################

//  if (Result <> MouseListener) and ((Result = nil) or ((Result.FLayerOptions and LOB_NO_CAPTURE) = 0)) then
//    MouseListener := Result; // capture the mouse

  if (Result <> MouseListener) then begin
    if ((Result = nil) or ((Result.FLayerOptions and LOB_NO_CAPTURE) = 0)) then MouseListener := Result; // capture the mouse
  end;

  // ##########################################################################
  // End Modified
  // ##########################################################################
 
  if Assigned(MouseListener) then
  begin
    Include(MouseListener.FLayerStates, CStateMap[Button]);
    MouseListener.MouseDown(Button, Shift, X, Y);
  end;
end;
und
Code:
function TLayerCollection.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer): TCustomLayer;
begin
  Result := MouseListener;
  if Result = nil then Result := FindLayerAtPos(X, Y, LOB_MOUSE_EVENTS);

  if Assigned(Result) then
  begin
    Exclude(Result.FLayerStates, CStateMap[Button]);
    Result.MouseUp(Button, Shift, X, Y);
  end;

  // ##########################################################################
  // Start Modified
  // ##########################################################################

//  if Assigned(MouseListener) and
//    (MouseListener.FLayerStates *
//      [lsMouseLeft, lsMouseRight, lsMouseMiddle] = []) then
//    MouseListener := nil; // reset mouse capture

  if Assigned(MouseListener) then
    if (MouseListener.FLayerStates * [lsMouseLeft, lsMouseRight, lsMouseMiddle] = []) then MouseListener := nil; // reset mouse capture

  // ##########################################################################
  // End Modified
  // ##########################################################################

end;
Sind wir die einzigsten mit diesem Problem???
  Mit Zitat antworten Zitat