OnMouseDown na dynamicznej formie

0

Witam. Mam takie pytanie. Mianowicie w moim programie po naciśnięciu buttona tworzona jest dynamicznie forma.

var
    kartka: array of TForm;

....

procedure TForm1.Button1Click(Sender: TObject);
var
    H: Integer;
Begin
    ilosc := ilosc + 1;

    setlength(kartka, ilosc);
    kartka[ilosc-1] := TForm.Create(self);
    kartka[ilosc-1].top := 50;
    kartka[ilosc-1].Left := 50;
    kartka[ilosc-1].Name := 'karta' + inttostr(ilosc);

    H := FindWindow('Progman',nil);
    Windows.SetParent(kartka[ilosc-1].Handle, H);

    kartka[ilosc-1].Show;
end;

jak widać forma stworzona dynamicznie wysyłana jest na pulpit i tam zostaje. chciał bym teraz na każdej z utworzonych w ten sposób form wywołać zdarzenie OnMouseDown. konkretnie chodzi o wykonanie kodu który pozwala na przeciąganie formy chwytając za jej obszar a nie belke. coś jak poniżej

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
    i: integer;
begin
    If button = mbleft then begin
        releasecapture;
        form1.Perform (WM_syscommand, $F012, 0);
    end;
end;
0

I w czym problem? Rozumiem, że nie wiesz jak ro zrobić?
Na przykład tak jak poniżej, sprawdziłem i działa poprawnie.

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    If button = mbleft then begin
        releasecapture;
        with Sender as TForm do
        begin
        Perform(WM_syscommand, $F012, 0);
        end;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    H: Integer;
Begin
    ilosc := ilosc + 1;

    setlength(kartka, ilosc);
    kartka[ilosc-1] := TForm.Create(self);
    kartka[ilosc-1].top := 50;
    kartka[ilosc-1].Left := 50;
    kartka[ilosc-1].Name := 'karta' + inttostr(ilosc);
    kartka[ilosc-1].OnMouseDown := FormMouseDown;
    H := FindWindow('Progman',nil);
    Windows.SetParent(kartka[ilosc-1].Handle, H);

    kartka[ilosc-1].Show;
end;
0

poniższy kawałek kodu jest właśnie jest tym czego szukałem

with Sender as TForm do     //dokładnie ta linijka ;)
begin
Perform(WM_syscommand, $F012, 0);
end;

dzięki wielkie [browar]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.