2013-01-31 131 views
4

我開發了一個傳統的Delphi 6應用程序,並且我想增加其中一個窗體的字體大小。所有其他形式有Microsoft Sans Serif 8pt,但是這一個設置爲Microsoft Sans Serif 7pt。所有控件都有ParentFont = True,所以我可以簡單地將表單的字體大小設置爲8pt。問題在於表單及其控件不會調整大小,並且標籤的文本會重疊。是否有一種調整字體大小後調整窗體大小的簡單方法,而無需在窗體編輯器中手動調整窗體大小?在窗體編輯器中調整字體大小後調整Delphi窗體的大小

回答

4

在設計時您可以通過手動編輯.dfm文件來實現更改。確保將表格保存爲Scaled屬性設置爲True

然後,在Delphi中關閉您的項目,或完全關閉Delphi。接下來在文本編輯器中打開.dfm文件並調整TextHeight屬性的形式。例如,如果要從7pt縮放到8pt,並且TextHeight設置爲13,則應將其更改爲11。然後重新加載項目並在設計器中打開表單,表單將被縮放。這不會是一個完美的縮放比例,因爲您不允許浮點值爲TextHeight。但它可能夠好。


在運行時,你可以調用ChangeScale

ChangeScale(NewFont.Size, OldFont.Size); 

注意ChangeScale是一個受保護的成員。所以,根據你在哪裏調用這個,你可能需要使用受保護的成員hack。

然後,一個選項是在運行時調用表單持久性框架以生成.dfm文件的縮放版本。這將使你更精確的控制不是玩弄花招與TextHeight

例如,您可以附加以下爲OnShow事件的形式:

procedure TMyForm.FormShow(Sender: TObject); 
var 
    BinaryStream, TextStream: TStream; 
begin 
    BinaryStream := TMemoryStream.Create; 
    Try 
    BinaryStream.WriteComponent(Self); 
    BinaryStream.Position := 0; 
    TextStream := TFileStream.Create('MyForm.dfm', fmCreate); 
    Try 
     ObjectBinaryToText(BinaryStream, TextStream); 
    Finally 
     TextStream.Free; 
    End; 
    Finally 
    BinaryStream.Free; 
    End; 
end; 

這將基於該新.DFM文件運行時狀態。然後,您可以將其與您的版本控制系統中的.dfm文件的版本進行比較。將會有一些您不想接受的更改,但大多數更改將是您希望的位置和大小更改。

+0

謝謝大衛,但我想調整窗體的「開發時間」,而不是「運行時」。 – kol

+0

對不起,錯過了。嘗試我的更新。 –

+0

@kol我個人的感覺是'ChangeScale'的運行時選項仍然是最好的。這會給你最準確的縮放比例。 –