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

怎麼讓程式畫面隨著螢幕大小變動?

尚未結案
waterfat
一般會員


發表:22
回覆:16
積分:7
註冊:2003-11-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-13 21:43:44 IP:61.229.xxx.xxx 未訂閱
我的電腦是1024*768 寫好的程式安裝到另一台電腦 800*600的 有些東東跑到螢幕外面去了 有沒有那邊可以簡單調一調 讓程式不管拿到那個解析度瑩幕 都能跟我這台看的一樣 不是拖拉form讓裡面的元件隨著位置變動喔 在精華區有看到用onresize 可是我的程式有十幾個form 每一個元件都要算 而且還有一些元件是webbrowser,pannel,dbgrid 按鈕裡面的字型大小也要跟著改 這太麻煩了吧 我記的vb裡面有一個簡單選項就可以改了 bcb找半天找不到
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-23 09:56:26 IP:211.23.xxx.xxx 未訂閱
在 Design Time 設定 Form1->Scaled=False ; 這樣就可以了!1 ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com
waterfat
一般會員


發表:22
回覆:16
積分:7
註冊:2003-11-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-26 11:14:33 IP:61.229.xxx.xxx 未訂閱
這樣是變成不能拖曳大小吧? 可是原本超出瑩幕的還是超出呀? 怎麼辦呢><
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-26 12:19:26 IP:211.23.xxx.xxx 未訂閱
Scaled=false 可以讓畫面在大字型和小字型時切換而不會亂掉. 你若是把畫面設計成 1024*768, 卻在 800*600 的解析度下跑, 就我所以還沒有任何簡單的方法可以解決. ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-28 21:33:58 IP:211.76.xxx.xxx 未訂閱
對不起,插個話,可不可以說明一下 VB 是如何設定的呢? ... 如果 VB 都有提供的話,按理說 Delphi 應該也會提供才是,如果 Delphi 有提供的話,BCB 就有可能提供...    沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
waterfat
一般會員


發表:22
回覆:16
積分:7
註冊:2003-11-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-29 10:42:45 IP:61.229.xxx.xxx 未訂閱
原來scale是這樣的功能,我還以為只是不能拖曳大小 看來還是沒有簡單的方法 還是得用苦工 我想到的方法是去抓作業系統的解析度 然後再去一個一個算比例 呼 真是麻煩呀
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-01 10:48:51 IP:211.23.xxx.xxx 未訂閱
是的, 只有自己重算位置. 不過這裏頭可大有學問, 尤其是 FORM 上的元件越多就遇難做得好, 就是會塞不下呀!! 另外 VB 應該也沒有可以很好的自動調整位置的功能吧!! 有的話也只是像 DELPHI 的 Scaled , 自動計算在不同解析度下的元件大小, 但是這種自動計算出來的結果通常都很慘!!! ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-04 08:50:08 IP:61.57.xxx.xxx 未訂閱
在設計之初,如果能好好想過視窗的編排,並擅用Align的屬性,再加上狀態列,你就能得到一個不因視窗大小而變調的程式囉!
jimmy_and_you
初階會員


發表:20
回覆:74
積分:33
註冊:2003-05-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-15 15:07:14 IP:203.70.xxx.xxx 未訂閱
你可以試試Anchors這個屬性,所有物件把akLeft,akTop,akRight,akBottom都調成調成false,在form ReSize時全部重新計算大小及位置下面是我的範例程式碼:
 
int OldHeight;
int OldWidth;
int CTop[100];
int CLeft[100];
int CHeight[100];
int CWidth[100];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    OldHeight = Height;
    OldWidth = Width;        TWinControl *TheFirst=NULL,*TheFind;
    TheFirst = FindControl(Handle);
    TheFirst = FindNextControl(TheFirst, true, false, false);
    TheFind = TheFirst;
    int i=0;
    while(1)
    {
        CTop[i] = TheFind->Top;
        CLeft[i] = TheFind->Left;
        CHeight[i] = TheFind->Height;
        CWidth[i] = TheFind->Width;
        i  ;
        if( (TheFind=FindNextControl(TheFind, true, false, false))==TheFirst )
            break;
    }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::FormResize(TObject *Sender)
{
    TWinControl *TheFirst=NULL,*TheFind;
    TheFirst = FindControl(Handle);
    TheFirst = FindNextControl(TheFirst, true, false, false);
    TheFind = TheFirst;
    int i=0;
    while(1)
    {
        TheFind->Top = CTop[i] * Height / OldHeight;
        TheFind->Left = CLeft[i] * Width / OldWidth;
        TheFind->Height = CHeight[i] * Height / OldHeight;
        TheFind->Width = CWidth[i] * Width / OldWidth;
        i  ;
        if( (TheFind=FindNextControl(TheFind, true, false, false))==TheFirst )
            break;
    }
}
yashan27
一般會員


發表:0
回覆:1
積分:0
註冊:2005-08-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-12-07 14:42:27 IP:140.116.xxx.xxx 未訂閱
引言: 你可以試試Anchors這個屬性,所有物件把akLeft,akTop,akRight,akBottom都調成調成false,在form ReSize時全部重新計算大小及位置下面是我的範例程式碼:
 
int OldHeight;
int OldWidth;
int CTop[100];
int CLeft[100];
int CHeight[100];
int CWidth[100];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    OldHeight = Height;
    OldWidth = Width;        TWinControl *TheFirst=NULL,*TheFind;
    TheFirst = FindControl(Handle);
    TheFirst = FindNextControl(TheFirst, true, false, false);
    TheFind = TheFirst;
    int i=0;
    while(1)
    {
        CTop[i] = TheFind->Top;
        CLeft[i] = TheFind->Left;
        CHeight[i] = TheFind->Height;
        CWidth[i] = TheFind->Width;
        i  ;
        if( (TheFind=FindNextControl(TheFind, true, false, false))==TheFirst )
            break;
    }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::FormResize(TObject *Sender)
{
    TWinControl *TheFirst=NULL,*TheFind;
    TheFirst = FindControl(Handle);
    TheFirst = FindNextControl(TheFirst, true, false, false);
    TheFind = TheFirst;
    int i=0;
    while(1)
    {
        TheFind->Top = CTop[i] * Height / OldHeight;
        TheFind->Left = CLeft[i] * Width / OldWidth;
        TheFind->Height = CHeight[i] * Height / OldHeight;
        TheFind->Width = CWidth[i] * Width / OldWidth;
        i  ;
        if( (TheFind=FindNextControl(TheFind, true, false, false))==TheFirst )
            break;
    }
}
我試著用大大的方法 但是出現下列錯誤 [C Error] main_Unit1.cpp(42): E2316 '_fastcall TForm1::FormResize(TObject *)' is not a member of 'TForm1' 已解決 發表人 -
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-12-08 18:01:47 IP:220.130.xxx.xxx 未訂閱
我的做法是自己改寫一個元件(自TCustomControl下來),這個元件可以指定其邏
輯點數(float ScaleWidth, ScaleHeight),所有顯示元件以這個元件為Parent,
然後在此 Parent 元件Resize的時候引發一個Event,然後就可以在相對的
EventHandler內,用      (Control).BoundsRect = CalcRectByLogicPoint();
  (Control).Font.Height = AdjustControl_sFontHeight();    的方式,來調整所有元件的位置,及字形大小.運用上這個Parent元件有點像是一
張墊底的方格紙,並且可以重複使用,因為已經元件化了.        NOTE: Resize時,邏輯點的大小會改變,利用以下的值來計算元件所在的位置.       RatioX = (float) ClientWidth / ScaleWidth;
   RatioY = (float) ClientHeight / ScaleHeight;    
發表人 - jow 於 2005/12/08 18:05:35
系統時間:2024-11-23 18:55:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!