簡體   English   中英

如何將TStringGrid從Delphi 7轉換為Delphi XE

[英]How to convert TStringGrid from Delphi 7 to Delphi XE

只是為了測試我將Delphi 7程序轉換為Delphi XE 5的難度,我在Delphi 7上編寫了簡單的應用程序 - 在Form上放置了TStringGrid,並在表單上添加了代碼:

procedure TFMain.FormCreate(Sender: TObject);
begin
  With StringGrid1 do
    begin
      Cells[0,0]:='čęжэ€';
    end;
end;

(實際上它寫為Cells [0,0]:='ce ??€',但我預計會這樣做)。 編譯,構建,運行,沒有Unicode,原因。 然后在Delphi XE 5中重新打開項目,再次將行更改為Cells [0,0]:='čęжэ€',編譯,構建,運行 - 並且沒有Unicode(類似於čę|||)! 這對我來說很奇怪。 在Delphi Xe 5上使用相同代碼從零開始構建新項目,同樣的TStringGrid正在按預期工作。 我知道這里有一些簡單的技巧,也許是項目設置中的一些變化,但我不能谷歌...也許有人可以提供幫助?

最好的祝福。

Delphi 7使用的默認字體是MS Sans Serif。 在Unicode Delphi下使用此字體時,字符串網格控件似乎不能正確地使用該字體繪制文本。 許多其他控件將以該字體正確繪制文本。 但由於某種原因,字符串網格控件無法設法這樣做。

當您將舊項目升級到XE5時,您繼承了Delphi 7的默認值。 當您在XE5中創建一個新項目時,我認為Tahoma的默認字體是不同的,並且字符串網格繪制正確地顯示了該字體中的西里爾字母。

您可以使用Tahoma或Segoe UI等其他字體解決此問題。 你肯定不想使用MS Sans Serif。 報表視圖樣式中的列表視圖將是另一個不錯的選擇。 尤其是因為它是本機平台控件。

我必須承認,我真的不明白為什么字符串網格控件表現不佳。 如果其他人可以對此有所了解,那將是很好的。

正如David所提到的,問題是字符串網格中使用的字體。 但是,說Delphi中的默認字體是MS Sans Serif並不嚴格准確。 它曾經是MS Sans Serif,Tahoma中改變(在Delphi 2006中)

您可以通過檢查特定Delphi版本的RTL源中的Graphics單元的源來查看特定版本的Delphi如何選擇默認字體(因為IDE是使用該代碼構建的)。 特別是InitDefFontData程序(以及舊版本的Delphi中的DefFontData記錄)。

從(至少) Delphi XE4開始 ,默認的Tahoma字體將替換為標識為MS Shell Dlg 2的值的字體替換的任何設置,如注冊表中所設置:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes\

NB -從XE4檢查代碼可能的是,如果該鍵不存在或不能被訪問,或者如果不存在用於MS外殼DLG 2字體無取代的條目,那么MS無襯線將仍然可以使用。 很難說,因為這是定義“CLR”時的行為,因為Delphi不再支持.NET而且IDE可能不是用CLR定義編譯的,所以不應該是這種情況,但是沒有辦法成為某些只是檢查代碼在編譯IDE時可能應用的條件定義。

但是,無論IDE使用哪種字體,然而選擇該字體,這只會影響在IDE中創建的表單。

對於現有的表單,就像在這種情況下一樣,問題不在於TStringGrid ,而是在Delphi版本中創建項目的事實,該版本應用了支持Unicode的默認字體。

在較新版本的Delphi中打開項目的行為並未更改表單中使用的字體,因此在Delphi XE5中打開時,使用MS Sans Serif字體保存在Delphi 7中的表單仍然使用該字體。

然后TStringGrid控件使用MS Sans Serif字體,因為這是表單上設置的字體,表單上控件的默認設置是使用其父控件字體。

TStringGrid的這個特定實例正在使用MS Sans Serif,因為它所使用的形式 (仍然)使用MS Sans Serif

在這種情況下,您應該將表單字體更改為Tahoma或其他合適的Unicode啟用字體。

表單上的所有控件仍設置為使用其父控件的字體,然后也將采用此字體。 在實際應用程序上執行此操作時,您可能會發現一些使用ParentFont設置為FALSE的控件需要單獨處理,即使字體設置被“繼承”,您的表單設計也可能需要進一步的工作來整理由於外觀變化而導致的問題由於字體的改變而產生的。

請注意,即使對Tahoma的這種更改已被Windows本身的更改所取代,如果您希望應用其他一些默認字體(在新表單/項目中),您可以在此處找到有用的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM