Announcement

Collapse
No announcement yet.

Verschieben von TPanel zur Laufzeit

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verschieben von TPanel zur Laufzeit

    hallo,
    da ich eine scrollbar mit extrafunktionen benötige, möchte ich ein TPanel zur laufzeit verschieben. mit perform(syscommand, scmove + 2, 0) geht es ja auch gut, aber das panel darf nur in der x bzw. in der y-achse verschoben werden. mit perform geht es aber in allen richtungen. hat jemand eine lösung für mich?
    danke
    bernd tauscher

  • #2
    hi

    Die Form:

    <Pre>
    object Form1: TForm1
    Left = 192
    Top = 107
    Width = 870
    Height = 640
    Caption = 'Form1'
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    OldCreateOrder = False
    PixelsPerInch = 96
    TextHeight = 13
    object Panel1: TPanel
    Left = 632
    Top = 80
    Width = 185
    Height = 41
    Caption = 'Panel1'
    Color = clRed
    TabOrder = 0
    OnMouseDown = Panel1MouseDown
    OnMouseMove = Panel1MouseMove
    OnMouseUp = Panel1MouseUp
    end
    end
    </pre>

    der Code

    <Pre>
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    ExtCtrls;

    type
    TForm1 = class(TForm)
    Panel1: TPanel;
    procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;
    OldMousePos : TPoint;

    implementation

    {$R *.DFM}

    procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    if ssLeft in Shift then
    oldMousePos := mouse.CursorPos;

    end;

    procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    begin
    if ssLeft in Shift then
    begin
    panel1.Left := Panel1.Left - (oldMousePos.x-Mouse.CursorPos.x);
    oldMousePos := mouse.CursorPos;
    end;
    end;

    procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    oldMousePos.x := 0;
    oldMousePos.y := 0;
    end;

    end.
    </Pre>

    gruss
    bernhar

    Comment


    • #3
      hallo,
      danke, hatte ich auch schon probiert. geht auch gut, wenn wenn ich das panel nur verschiebe. ein bischen mehr prgrammcode dazwischen, und es ist ein flackern...., kann ich keinen anbieten.
      kann man nicht irgedwie tiefer in das system gehen?
      bern

      Comment


      • #4
        Vielleicht nützt es was, eine Ableitung von TPanel zu schreiben und darin WM_MOVING abzufangen?
        <br>Ciao, Uli

        Comment


        • #5
          alles klar, danke
          bern

          Comment

          Working...
          X