Avatar billede lanstorp Nybegynder
13. februar 2002 - 17:33 Der er 9 kommentarer og
1 løsning

Runtime flyt af TEdit

Har lavet en Edit boks.
Nu skal man kunne tage og flytte rundt med den på den form den er placeret på.
Jeg syntes ikke der findes nogen properti der tillader, at man trækker rundt med en Edit boks i runtime.
Kan det passe ?
Avatar billede cautoo Nybegynder
13. februar 2002 - 17:40 #1
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    edit1: Tedit;
    procedure edit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure edit32MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure edit1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  pos1, pos2: Integer;

implementation

{$R *.DFM}

procedure TForm1.edit1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  edit1.Enabled := False;
  edit1.OnMouseMove := edit1MouseMove;
  Pos1 := X;
  Pos2 := Y;
end;

procedure TForm1.edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if (edit1.left + X - pos1) < 40 then
  begin
    if (edit1.top + Y - pos2) < 40 then
    begin
      edit1.Left := 40;
      edit1.top := 40;
    end
    else if (edit1.top + Y - pos2) > 352 then
    begin
      edit1.Left := 40;
      edit1.top := 352;
    end
    else
    begin
      edit1.top := edit1.Top + Y - pos2;
      edit1.Left := 40;
    end;
  end
  else if (edit1.top + Y - pos2) < 40 then
  begin
    if (edit1.left + X - pos1) > 793 then
    begin
      edit1.top := 40;
      edit1.Left := 793;
    end
    else
    begin
      edit1.left := edit1.left + X - pos1;
      edit1.top := 40;
    end;
  end
  else if (edit1.left + X - pos1) > 793 then
  begin
    if (edit1.top + Y - pos2) > 352 then
    begin
      edit1.Left := 793;
      edit1.top := 352;
    end
    else
    begin
      edit1.top := edit1.Top + Y - pos2;
      edit1.Left := 793;
    end;
  end
  else if (edit1.top + Y - pos2) > 352 then
  begin
    edit1.left := edit1.left + X - pos1;
    edit1.top := 352;
  end
  else
  begin
    edit1.Left := edit1.Left + X - pos1;
    edit1.top := edit1.Top + Y - pos2;
  end;
end;

procedure TForm1.edit32MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Left := left;
end;

procedure TForm1.edit1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  edit1.Enabled := True;
  edit1.OnMouseMove := edit32MouseMove;
end;

end.
Avatar billede morten_s Nybegynder
13. februar 2002 - 17:43 #2
programer den på OnMouseDown, OnMouseMove eventet

sæt left og top og lidt flag når du klikker


procedure TfDBDriver.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Edit1.Left := X;
  Edit1.Top := Y;
end;
Avatar billede cautoo Nybegynder
13. februar 2002 - 17:46 #3
fjern lige enabled false ved onmousedown ellers virker det ikk .-(
Avatar billede lanstorp Nybegynder
13. februar 2002 - 17:48 #4
Giga mange tak - så er jeg videre, /JL
Avatar billede lanstorp Nybegynder
13. februar 2002 - 20:21 #5
Cautoo Er du sikker på det virker ? Der sker ikke noget med min edit1, den bliver stående uanset hvor hårdt man trækker. /JL
Avatar billede lanstorp Nybegynder
13. februar 2002 - 20:33 #6
Nu kører det. Dum som jeg var, havde jeg ikke fået aktiveret eventene i min Object Inspector.
Avatar billede cautoo Nybegynder
14. februar 2002 - 13:38 #7
;-) husk at det er edit32MouseMove der skal sættes til onmousemove !!!
Avatar billede cautoo Nybegynder
14. februar 2002 - 13:41 #8
...elers flytter den sig uden at du overhoved klikker !!!
Avatar billede lanstorp Nybegynder
14. februar 2002 - 14:30 #9
Det havde jeg luret på, men hvad mener du med 'edit32MouseMove der skal sættes til onmousemove'. Det syntes jeg den er, men den flytter sig som du siger uden at man klikker. Når man har klikket den første gang, virker det som det skal. Men hvorfor virker det ikke, inden det første klik ? /JL
Avatar billede cautoo Nybegynder
14. februar 2002 - 20:08 #10
Du har lagt edit1MouseMove på edit1.OnMouseMove

men det skal være
Edit1.OnmouseMove := edit32MouseMove;
;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester