2017-06-15 57 views
-1

我們有兩個不同的開發人員機器使用相同的.pas文件
任何時候一個開發人員可以在.dfm文件的form.width文件中更改某些內容改變
一個機器形式的調查(寬度= 651)和(ClientWidth = 635)
其它機器表格(寬度= 643)和(ClientWidth = 635)
德爾福表格高度寬度在不同開發人員機器上的.DFM文件中更改

我想知道爲什麼(寬度和高度)在形式上改變.dfm文件

我想看在運行時的
(ClientHeight和高度)和(ClientWidth和寬度)

所以如果(寬度= 651)和(ClientWidth = 635)之間的差的計算+原因的擊穿
我怎麼可以在運行時檢查窗口邊框寬度或任何我需要鍛鍊這些值之間的差異?

+0

什麼是你的問題,節省? –

+0

我想查看寬度和客戶端寬度之間差異的實際值。例如邊框尺寸等 – Dangas56

+0

這就是全部?你不是已經在做這個數學嗎? 'WidthDiff:= Width - ClientWidth; HeightDiff:= Height - ClientHeight;'或者你還在計算窗口標題區域的非客戶端高度? –

回答

1

的.DFM文件被改變是因爲有在Windows註冊表中設置兩臺機器
之間的一些差異 電腦\ HKEY_CURRENT_USER \控制面板\桌面\ WindowMetrics
這是導致邊框,標題,窗體標題的原因高度/寬度是不同

如果您運行使用相同的exe文件,你有可能得到不同的結果

高度計算
以下功能//這得到ŧ他窗體標題身高
GetSystemMetrics的(SM_CYCAPTION)
//這得到了表格邊框寬度
GetSystemMetrics的(SM_CYFRAME)
//這讓窗體MainMenu的高度
GetSystemMetrics的(SM_CYMENU)

這裏是一個例如功能,以顯示高度計算

function CalcHeightDifference : String; 
    var iActualHeightDifference : integer; 
     iCalcHeightDifference : integer; 
     sInfo : String; 
begin 
    iCalcHeightDifference := 0; 
    iActualHeightDifference := self.Height - Self.ClientHeight; 

    //Caption 
    iCalcHeightDifference := iCalcHeightDifference + GetSystemMetrics(SM_CYCAPTION); 
    sInfo := ' + Form Caption = ' + inttostr(GetSystemMetrics(SM_CYCAPTION)); 

    //Borders 
    iCalcHeightDifference := iCalcHeightDifference + GetSystemMetrics(SM_CYFRAME) + GetSystemMetrics(SM_CYFRAME); 
    sInfo := sInfo + sLineBreak + ' + Border Height(' + inttostr(GetSystemMetrics(SM_CYFRAME)) + ') times two = ' + inttostr(GetSystemMetrics(SM_CYFRAME)+GetSystemMetrics(SM_CYFRAME) ); 

    //Menu 
    if self.Menu <> nil then begin 
    iCalcHeightDifference := iCalcHeightDifference + GetSystemMetrics(SM_CYMENU); 
    sInfo := sInfo + sLineBreak + ' + Form MainMenu = ' + inttostr(GetSystemMetrics(SM_CYMENU)); 
    end; 

    result := format('Form.ClientHeight=%d', [Self.ClientHeight]) 
      + sLineBreak 
      + format('Form.Height=%d', [Self.Height]) 
      + sLineBreak 
      + format('The Height Difference of %d is made up of', [Self.Height-Self.ClientHeight]) 
      + sLineBreak 
      + sInfo 
      + sLineBreak 
      + format(' Total(%d)', [iCalcHeightDifference])  ; 
end; 

寬度計算的解體
//這個獲取表格邊框寬度
GetSystemMetrics的(SM_CXFRAME)

這裏有一個例子函數來顯示寬度計算

function CalcWidthDifference : String; 
    var iActualWidthDifference : integer; 
    iCalcWidthDifference : integer; 
    sInfo : String; 
begin 
    iCalcWidthDifference := 0; 
    iActualWidthDifference := self.Width - Self.ClientWidth; 

    //Borders 
    iCalcWidthDifference := GetSystemMetrics(SM_CXFRAME) + GetSystemMetrics(SM_CXFRAME); 
    sInfo := ' + Border Width(' + inttostr(GetSystemMetrics(SM_CXFRAME)) + ') times Two = ' + inttostr(GetSystemMetrics(SM_CXFRAME)+GetSystemMetrics(SM_CXFRAME)); 

    result := format('Form.ClientWidth=%d', [Self.ClientWidth]) 
      + sLineBreak 
      + format('Form.Width=%d', [Self.Width]) 
      + sLineBreak 
      + format('The Width Difference of %d is made up of', [Self.Width-Self.ClientWidth]) 
      + sLineBreak 
      + sInfo 
      + sLineBreak 
      + format(' Total(%d)', [iCalcWidthDifference]) ; 
end; 

這一切都因爲我們有兩個窗口發展的解體機器是隨機更改窗體上的.DFM文件寬度和麪板等
我已經包含了一些屏幕截圖,從同一個exe文件在不同的機器上運行,以顯示寬度不同。如果我想在設計時改變這種形式的東西。DFM文件將具有不同寬度

機1 Machine 1 機2 Machine 2

+0

這就是答案? –

+0

我已經編輯了答案,現在它更有意義嗎?我可以刪除這個問題,如果它不會對任何人有用,只是認爲它可以幫助遇到同一問題的其他人 – Dangas56