Przenoszenie okna

0

Chcę zrobić takie coś, że jak będę miał wciśnięty lpm, a mysz będzie na ort! image1, to będę przenosił okno myszą. Tylko musi być tak, że nie zacznie się przenosić, jeśli najadę z już wciśniętym przyciskiem, tylko jeśli kliknę na image1 i zacznę z wciśniętym lpm ruszać myszą. I jest możliwość, że na image1 będzie zachodzić inny ort! (np label1) i wtedy też musi się przenosić, nawet jeśli mysz zachodzi na label1.

0

Zajrzyj do źródła PilotMP3. Link w stopce. Tam forma CocpitForm jest w podobny sposób przesuwana.

0

Niestety nie mogę otworzyć tego w delphi :(
Napisze jak próbowałem to zrobić. Może ktoś mi powie gdzie popełniam błąd

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x: Integer;
  y: Integer;
  przenoszenie: Boolean;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
x:= Mouse.CursorPos.x-Left;
przenoszenie:= True;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
x:= 0;
przenoszenie:= False;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if przenoszenie = true then
left:= Mouse.CursorPos.X-x;
end;

end.

Tu jest oczywiście tylko przenoszenie w poziomie, ale jeśli będę wiedział jak zrobić poziomo to pionowo sobie też poradzę. Jeśli ktoś wie co tu jest źle to niech pomoże

// Stosuj tag <code class="delphi"></code> [diabel] - Q

0
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ssleft in Shift then
  begin
    left:=Mouse.CursorPos.X-Image1.left;
    Caption:=Char(Random(50)+50);
  end;
end;

To ci powinno pomóc ale nie działa do końca, bo nie mam czasu dopracować bo ide na wigilie :P

0

Wygeneruj procedurę onMouseDown dla FORMY
Następnie przypisz tą procedurę onMouseDown dla TImage

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button= mbLeft then
 begin
   SendMessage(Handle, WM_LButtonUp, 0, 0);
   SendMessage(Handle, WM_NCLButtonDown, htCaption, 0 );
 end;
end;
0

zmienne globalne:

var
  MD : Boolean;
  P : TPoint; 

i teraz w zdarzeniach:

procedure TImage.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MD := True;
  P :=  Point(X, Y);
end;

procedure TImage.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if MD then
  begin
    Left := Left + (X - P.X);
    Top := Top + (Y - P.Y);
  end;
end;

procedure TImage.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MD := False;
end;

Pomyłka !! powinno być tak:

zmienne globalne:

var
  MD : Boolean;
  P : TPoint; 

i teraz w zdarzeniach:

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MD := True;
  P :=  Point(X, Y);
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if MD then
  begin
    Left := Left + (X - P.X);
    Top := Top + (Y - P.Y);
  end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MD := False;
end;

sorki za błąd.

0

OnMouseMove obrazka

if Button = mbleft then
begin
ReleaseCapture;
Form1.Perform(WM_SysCommand, SC_SIZE+9 ,0);
end;
oczywiscie zamiast form1 dasz sobie nazwe formy czy co tam przenosisz :P</b>

0

OnMouseDown:

begin
  if Button = mbLeft then
  begin
    ReleaseCapture;
    SendMessage(Handle, WM_NCLButtonDown, htCaption, 0);
  end;
end;
0

Moim zdaniem jest to najprostsze</ort> przenoszenie okna:

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;

I jak jest jeszcze na Image jakiś Label to zrob tak:

Wpisz całe polecenie na nowo lub jeszcze prościej w Label ustaw w Events OnMouseDown na Image1MouseDown.

I już...

Pozdrawiam...

// Tag <code class="delphi"></code> - Q

0

Ludzie juź mi pomógł Inter :) Ale skoro macie tyle pomysłów to fajnie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1