全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2006
推到 Plurk!
推到 Facebook!

如何把圖檔可以在image上移動

尚未結案
frankh
一般會員


發表:25
回覆:36
積分:12
註冊:2005-05-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-18 22:55:28 IP:220.134.xxx.xxx 未訂閱
原本我的程式是可以把圖檔崇form3拖到form2的image2裡面...但是卻很難放到想要的位置..一定要對好指標的位置..想請問一下能不能把圖拖到image裡面但可以作移動的動作來調整圖檔擺放的位置?
void __fastcall TForm2::Image2DragOver(TObject *Sender, TObject *Source,
      int X, int Y, TDragState State, bool &Accept)
{
 if(Source == Form3->ListView1 || Source == Form4->ListView1 ||Source == Form5->ListView1)
   Accept = true;
}
//---------------------------------------------------------------------------    void __fastcall TForm2::Image2DragDrop(TObject *Sender, TObject *Source,
      int X, int Y)
{
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
 AnsiString GoFile;     if(Source == Form3->ListView1)
    GoFile = "D:\\eyebrow100\\" + Form3->ListView1->Selected->Caption;
       else if(Source == Form4->ListView1)
       GoFile = "D:\\eyebrow100\\" + Form4->ListView1->Selected->Caption;
          else
          GoFile = "D:\\eyebrow100\\" + Form5->ListView1->Selected->Caption;        Image3->Picture->LoadFromFile(GoFile);
    Image3->Width=Image3->Picture->Width;
    Image3->Height=Image3->Picture->Height;        Bmp->Assign(Image3->Picture->Bitmap);
    Bmp->Transparent=true;
    Image2->Canvas->Draw(X,Y,Bmp);
    delete Bmp;
void __fastcall TForm2::FormCreate(TObject *Sender)
{
Image1->Canvas->Refresh();
Image2->Canvas->Refresh();
Image2->ControlStyle<
    
        
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-19 01:34:25 IP:61.230.xxx.xxx 未訂閱
frankh 您好:    您在圖像載入後,可以直接設定其位置,如果要在載入後要能隨意的調整位置,可以參考下列作法:
// 設定下列全域變數
int oldX, oldY;
bool MoveFlag = false;    void __fastcall TForm1::FormCreate(TObject *Sender)
{
    // 設定 "要移動圖像之上層物件" 的 DoubleBuffered 為 true,
    // 以避免 (或降低) 圖像移動時的閃爍現象,此處假設前述物件為 Panel1。
    Panel1->DoubleBuffered = true;
}    // 下列三個滑鼠事件處理程序請自行設給要處理的 Image 元件
void __fastcall TForm1::ImageMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if (Shift.Contains(ssLeft) && !MoveFlag) {  // 按下滑鼠左鍵時準備拖曳圖像
        SetCaptureControl(dynamic_cast(Sender));  // 設定圖像為接收所有滑鼠訊息的狀態
        oldX = X;  // 記錄下圖像現在的位置
        oldY = Y;
        MoveFlag = true;  // 設定移動圖像旗號
    }
}    void __fastcall TForm1::ImageMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    if (Shift.Contains(ssLeft) && MoveFlag) {  // 若為滑鼠左鍵按下狀態,且移動圖象旗號為真
        ((TImage*)Sender)->Left = ((TImage*)Sender)->Left   (X - oldX);  // 調整圖像到新的位置
        ((TImage*)Sender)->Top  = ((TImage*)Sender)->Top    (Y - oldY);
    }
}    void __fastcall TForm1::ImageMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    if (Shift.Contains(ssLeft) && MoveFlag) {  // 若為滑鼠左鍵按下狀態,且移動圖象旗號為真
        ReleaseCapture();    // 取消圖像接收所有滑鼠訊息的狀態
        MoveFlag = false;  // 取消移動圖像旗號
    }
}
7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/19 01:52:38
系統時間:2024-04-27 23:46:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!