的.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 機2
什麼是你的問題,節省? –
我想查看寬度和客戶端寬度之間差異的實際值。例如邊框尺寸等 – Dangas56
這就是全部?你不是已經在做這個數學嗎? 'WidthDiff:= Width - ClientWidth; HeightDiff:= Height - ClientHeight;'或者你還在計算窗口標題區域的非客戶端高度? –