Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: beim doppelclick kein Mousedown event

  Alt 24. Nov 2005, 19:31
Am Einfachsten kannst du das machen, in dem du dein zweites Panel (bzw. alle analogen Eigenschaften) erst anzeigst, wenn die Maus bewegt wird. Dazu einfach folgende Methoden ändern:

Delphi-Quellcode:
procedure TMovingPanel.OnMouseDown;
begin
  if (self.FComesFrom = fPool) or (self.FComesFrom = fPlan) then
    begin
      screen.Cursor := crdrag
    end // if (self.FComesFrom = fPool) or (self.FComesFrom = fPlan)
  else
    begin
      screen.Cursor := crno;
    end;

  if (MoveWho <> mwNone) then
    begin
      OldLeft := self.ScreenToClient(Mouse.CursorPos).X;
      OldTop := self.ScreenToClient(Mouse.CursorPos).Y;
      P_tmpDraw := TPanel.Create(self);
      P_tmpDraw.Caption := Self.Caption;
      P_tmpDraw.Width := self.Width;
      P_tmpDraw.Height := self.Height;
      P_tmpDraw.Color := self.Color;
      P_tmpDraw.Visible := false; // <-- Unsichtbar solange nicht bewegt
      case FComesFrom of
        fPlan:
          begin
            PPlan.InsertControl (P_tmpDraw);
          end; // fPlan
        fPool:
          begin
            PPool.InsertControl (P_tmpDraw);
          end; // fPool
      end; // case FComesFrom

      P_tmpDraw.BringToFront;
      Moving := True;
    end; // if (MoveWho <> mwNone) and (Button = mbLeft)
end; // of procedure TMovingPanel.OnMouseDown;
Delphi-Quellcode:
procedure TMovingPanel.MouseMove (Shift: TShiftState; X, Y: Integer);
begin
  // inherited MouseMove(Shift, X, Y);
  if (MoveWho <> mwNone) and Moving then
    begin
      p_tmpDraw.Visible := true; // Und wieder sichtbar bei Mausbewegung
      ...
Kannst du natürlich ganz analog mit z.B. dem Cursor machen, falls du den Drag-Cursor erst sehen möchtest, wenn die Maus bewegt wird. Leider lässt es sich nicht ganz hübsch trennen, ob es sich um einen Doppelklick handelt oder nicht, da jedes Mausereignis ein Interrupt auslöst, so dass du von Delphi immer entsprechende Events bekommst.
Falls du aber wirklich unbedingt beides komplett trennen möchtest, solltest du die Eigenschaft Moving (und alles weitere) durch einen Timer setzen. Den würde dann ein Mausdown starten, ein MouseUp und/oder Doppelklick stoppen, aber du müsstest damit auch deine Zeit für einen Doppelklick verwenden, nicht die Windwos eigene. Bzw. die kann man sicher auch irgendwie auslesen, aber bestimmt nicht der schönste Weg.
  Mit Zitat antworten Zitat