Witam. Mam taki kod jak poniżej, no i on działa, ale nie do końca w poprawny spsoób.
Mianowicie chce uzyskać taki efekt jak przy powiększonym obrazku podglądanym w
chociażby AcdSee. Czyli że moge po kliknięciu na niego przesuwać go myszką w doł,
gótę, lewo lub prawo. Jednak w AcdSee można przy klikniętym przycisku myrzki, po
przesunięciu na przykład w dół zmienić kierunek przesuwania w gótę. Kombinowałem
już, ale nic mi nie wychodzi. Teraz przesuwając w doł mogę dopiero przesunąc - na
przykład - w górę dopiero jak puszcze przycisk myszki i klikne na nowo. Kody, ktore
znalazłem w sieci przesuwają obrazek po formatce przy użyciu merody Drag&Drop i
powodują, że owszem obrazek na inne miejsce można przesunąć ale tylko jeżeli owo
docelowe miejsce jest puste i nie należy do borazka. Jakby ktoś miał jakieś pomysły
lub fragmenty kodów (może kiedyś też dla siebie pisaliście prostą przeglądarkę grafiki)
to proszę piszcie Z góry dziękuję. Oto mój dotychzasowy kod, który działa tak sobie:
var
PreviewForm : TPreviewForm;
Punkt : TPoint;
Kliknieto : boolean;
implementation
{$R *.dfm}
procedure TPreviewForm.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Kliknieto := True;
Punkt := Point(X, Y);
Image1.BeginDrag(True);
end;
procedure TPreviewForm.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Kliknieto := False;
end;
procedure TPreviewForm.Image1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
const
IlePixSkok = 10;
begin
if Y < Punkt.Y then
begin
if Image1.Top <> 0 then
Image1.Top := Image1.Top + IlePixSkok;
end;
if Y > Punkt.Y then
begin
if Image1.Top + Image1.Height > ClientHeight then
Image1.Top := Image1.Top - IlePixSkok;
end;
if X < Punkt.X then
begin
if Image1.Left <> 0 then
Image1.Left := Image1.Left + IlePixSkok;
end;
if X > Punkt.X then
begin
if Image1.Left + Image1.Width > ClientWidth then
Image1.Left := Image1.Left - IlePixSkok;
end;
end;