Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[103] [잡담] Drag & Drop / 가상 Zoom(가칭)
godori67 [ ] 2984 읽음    1997-11-06 20:47
procedure TimgFullForm.imgFullMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
     with Sender as Tcontrol do DragBox:= Rect(Left, Top, Width, Height);

     PntCapture := Point(X,Y);
     SMode      := 1;
     if Start then Start:= FALSE; //'드래그 시작'
end;

procedure TimgFullForm.imgFullMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
     if Smode = 1 then
     begin
          SaveBox := DragBox; // '드래그 중'

          with Sender as Tcontrol do DragBox:= Rect(Left + X - PntCapture.X,
                                                    Top  + Y - PntCapture.Y,
                                                    Width, Height);
          pnlImageFullDragDrop(pnlImageFull, Sender,
                               DragBox.Left + PntCapture.X,
                               DragBox.Top  + PntCapture.Y);
     end;
end;

procedure TimgFullForm.imgFullMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
     SMode := 0;      // '드래그 끝'
     Start := TRUE;
     pnlImageFullDragDrop(pnlImageFull, Sender,
                          DragBox.Left + PntCapture.X,
                          DragBox.Top  + PntCapture.Y);

     with Sender as Tcontrol do SaveBox:= Rect(Left, Top, Width, Height);
end;

procedure TimgFullForm.pnlImageFullDragDrop(Sender, Source: TObject; X,
  Y: Integer);
var Moved: TControl; { Tlabel etc..}
    Still: TPanel;    { ScrollBox etc.. }
begin
     Moved := Source as TControl;
     Still := Sender as TPanel;

     Moved.Parent := Still;
     Moved.Left   := X - PntCapture.X;
     Moved.Top    := Y - PntCapture.Y;

     {if Moved.Left < 10 then Moved.Left := conMinBrank
     else
         if (Moved.Left + Moved.Width) > (pnlPaper.Width - conMinBrank) then
             Moved.Left := pnlPaper.Width - (Moved.Width + conMinBrank);

     if Moved.Top  < 10 then Moved.Top  := conMinBrank
     else
         if (Moved.Top + Moved.Height) > (pnlPaper.Height - conMinBrank) then
             Moved.Top := pnlPaper.Height - (Moved.Height + conMinBrank);{}
end;

procedure TimgFullForm.pnlImageFullDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept:= Source is Tcontrol; //'드래그 중'
end;

procedure TimgFullForm.spdBtnZoomNomlClick(Sender: TObject);
begin
     imgFull.Left   := 0;   // imgFull Left Clear
     imgFull.Top    := 0;   // imgFull Top Clear

     cntZooms := 0;       // Zoom Resister Clear

     //pnlSpdBtnMenu.caption := '0';
     ZoomMode := ZmNone;

     imgFull.Width  := wSource;
     imgFull.Height := hSource;
end;

procedure TimgFullForm.ZoomTimerTimer(Sender: TObject);
var blZmExit : boolean;
    ZoomVal  : real;
    dempT    : integer;
    dempB    : integer;
    dempW    : integer;
    dempH    : integer;
begin
   blZmExit := false;
   if (blZmTime) then
   begin
      inc(cntTimer);
      if (cntTimer = 3) then
      begin
         cntTimer := 0;
         case ZoomMode of
           ZmIn:
             begin
               if (cntZooms = 20) then
               begin
                    blZmTime := false;
                    Exit;
               end;
               inc(cntZooms);
               if (cntZooms > 0) then
               begin
                    ZoomVal := (cntZooms * 2 / 10) + 1;
                    dempW   := Trunc(wSource * ZoomVal);
                    dempH   := Trunc(hSource * ZoomVal);
               end
               else
                   if (cntZooms < 0) then
                   begin
                        ZoomVal := Abs(cntZooms * 2 / 10) + 1;
                        dempW   := Trunc(wSource / ZoomVal);
                        dempH   := Trunc(hSource / ZoomVal);
                   end
                   else
                       begin
                            imgFull.Top    := 0;
                            imgFull.Left   := 0;
                            dempW := wSource;
                            dempH := hSource;
                       end;
             end;
           ZmOut:
             begin
               if (cntZooms = -20)                then blZmExit := true;
               if (blNotZmOut) and (cntZooms = 0) then blZmExit := true;
               if not(blNotZmOut) and
                  ((imgFull.Width  <= 50)  or
                   (imgFull.Height <= 50))        then blZmExit := true;

               if (blZmExit) then Exit;

               Dec(cntZooms);
               if (cntZooms > 0) then
               begin
                    ZoomVal := (cntZooms * 2 / 10) + 1;
                    dempW   := Trunc(wSource * ZoomVal);
                    dempH   := Trunc(hSource * ZoomVal);
               end
               else
                   if (cntZooms < 0) then
                   begin
                        ZoomVal := Abs(cntZooms * 2 / 10) + 1;
                        dempW   := Trunc(wSource / ZoomVal);
                        dempH   := Trunc(hSource / ZoomVal);
                   end
                   else
                       begin
                            imgFull.Top    := 0;
                            imgFull.Left   := 0;
                            dempW := wSource;
                            dempH := hSource;
                       end;
             end;
         end; // case end
         //pnlSpdBtnMenu.caption := FloatToStr(ZoomVal);
         imgFull.Width  := dempW;
         imgFull.Height := dempH;
      end; // if (cntTimer = 3) then ==> end
   end; // if (blZmTime) then ==> end
end;

procedure TimgFullForm.spdBtnZoomInClick(Sender: TObject);
var blZmExit : boolean;
    ZoomVal  : real;
    dempT    : integer;
    dempB    : integer;
    dempW    : integer;
    dempH    : integer;
begin
     if (cntZooms = 20) then Exit;

     inc(cntZooms);
     if (cntZooms > 0) then
     begin
          ZoomVal := (cntZooms * 2 / 10) + 1;
          dempW   := Trunc(wSource * ZoomVal);
          dempH   := Trunc(hSource * ZoomVal);
     end
     else
         if (cntZooms < 0) then
         begin
              ZoomVal := Abs(cntZooms * 2 / 10) + 1;
              dempW   := Trunc(wSource / ZoomVal);
              dempH   := Trunc(hSource / ZoomVal);
         end
         else
             begin
                  imgFull.Top    := 0;
                  imgFull.Left   := 0;
                  dempW := wSource;
                  dempH := hSource;
             end;
     //pnlSpdBtnMenu.caption := FloatToStr(ZoomVal);
     imgFull.Width  := dempW;
     imgFull.Height := dempH;
end;

procedure TimgFullForm.spdBtnZoomInMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
     cntTimer := 0;
     blZmTime := true;
     ZoomMode := ZmIn;
     ZoomTimer.Enabled := true;
end;

procedure TimgFullForm.spdBtnZoomInMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
     cntTimer := 0;
     ZoomMode := ZmNone;
     blZmTime := false;
     ZoomTimer.Enabled := false;
end;

procedure TimgFullForm.spdBtnZoomOutClick(Sender: TObject);
var ZoomVal  : real;
    dempT    : integer;
    dempB    : integer;
    dempW    : integer;
    dempH    : integer;
begin
     if (cntZooms = -20) then Exit;
     if (imgFull.Width  <= 50) or (imgFull.Height <= 50) then Exit;

     Dec(cntZooms);
     if (cntZooms > 0) then
     begin
          ZoomVal := (cntZooms * 2 / 10) + 1;
          dempW   := Trunc(wSource * ZoomVal);
          dempH   := Trunc(hSource * ZoomVal);
     end
     else
         if (cntZooms < 0) then
         begin
              ZoomVal := Abs(cntZooms * 2 / 10) + 1;
              dempW   := Trunc(wSource / ZoomVal);
              dempH   := Trunc(hSource / ZoomVal);
         end
         else
             begin
                  imgFull.Top    := 0;
                  imgFull.Left   := 0;
                  dempW := wSource;
                  dempH := hSource;
             end;
     imgFull.Width  := dempW;
     imgFull.Height := dempH;
end;

procedure TimgFullForm.spdBtnZoomOutMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
     cntTimer := 0;
     blZmTime := true;
     ZoomMode := ZmOut;
     ZoomTimer.Enabled := true;
end;

procedure TimgFullForm.spdBtnZoomOutMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
     cntTimer := 0;
     ZoomMode := ZmNone;
     blZmTime := false;
     ZoomTimer.Enabled := false;
end;



+ -

관련 글 리스트
103 [잡담] Drag & Drop / 가상 Zoom(가칭) godori67 2984 1997/11/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.