線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:831
推到 Plurk!
推到 Facebook!

如何把字体中的内容显示在combobx下拉框中

尚未結案
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-08 23:25:16 IP:222.183.xxx.xxx 未訂閱
各位大大好: 我希望把把指定字体中的内容显示在combobx下拉框中,请问如何实现,或者提点思路,谢谢!
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-09 02:31:05 IP:61.222.xxx.xxx 未訂閱
1. combobx style 設為 csOwnerDrawFixed 2. 在 DrawItem 事件中依據指定字體 重繪。
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-09 08:14:43 IP:210.65.xxx.xxx 未訂閱
Hi zzmbeyond01,    不知這是不是你要的效果:    http://delphi.ktop.com.tw/topic.php?topic_id=42363 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-09 12:58:04 IP:222.183.xxx.xxx 未訂閱
Fishman: 你好,我是想把字体内的具体的各个符号绘出来,比如像word中从“字符映射表”中选择各个符号插入一样。
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-09 13:04:46 IP:222.183.xxx.xxx 未訂閱
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-09 14:47:33 IP:61.222.xxx.xxx 未訂閱
不難啊!交給 Grid 畫就可以了。    
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items := Screen.Fonts;
  ComboBox1.Sorted := True;
  StringGrid1.RowCount := 0;
end;    procedure TForm1.ComboBox1Change(Sender: TObject);
var
  ACol,ARow,ACode :Integer;
begin
  StringGrid1.Font.Name := ComboBox1.Items[ComboBox1.ItemIndex];
  StringGrid1.RowCount  := 32;      For ARow:= 0 to 31 do
    For ACol:=0 to 7 do
    begin
      ACode := Succ(ACol)*Succ(AROW);
      if ACode<255 then StringGrid1.Cells[ACol,ARow] := CHR(ACode) else Exit;
    end;
end;
我是列出所有 ASCII 碼。由於有些 Code 是不顯示的。 建議可以自訂 字型表 如 FontTable = '!#$%^&*())012345789 ..' 如您的圖一般。 就這樣吧!
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-09 15:19:48 IP:222.183.xxx.xxx 未訂閱
wameng: 我如何知道某种字体中有多少种符号呢?我在创建字体的时候,为每个符号(symbol)赋予了名字(post),能用名字来获得指定的符号吗?    CHR 函数为什么就可以获得字体对应的符号?不明白它的用法。< > 谢谢! 学习,学习,再学习! < > 發表人 - zzmbeyond01 於 2004/11/09 15:26:04
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-09 15:31:38 IP:61.222.xxx.xxx 未訂閱
目前已知使用 ASCII 為 21~FE 超過的部分,用Unicode。
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-09 15:45:31 IP:222.183.xxx.xxx 未訂閱
wameng大大:   我现在把字体符号添加到combobox供用户选择,但是有这么一个问题,希望对每个符号都添加上名称,怎么画布出来?  
    procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  ACode: Integer;
begin
  combobox1.Font.Name := '仿宋';
  for i := 32 to 255 do
  begin
    ACode := i;
    if i = 33 then
//尝试在 Add(CHR(ACode) '  第一个字符'); 但是好像不行耶,出来的都不知道是什么符号
      Combobox1.Items.Add(CHR(ACode) );
    if i = 34 then
      Combobox1.Items.Add(CHR(ACode) );
  end;
end;    procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with combobox1 do
  begin
    canvas.FillRect(rect);
    if Index = 0 then
//这么也没有画出来
      canvas.TextOut(rect.Left   10, rect.Top   2, '  hello');
    if index = 1 then
      canvas.TextOut(rect.Left   10, rect.Top   2, ' sfe');
  end;
end;
 
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-09 15:59:34 IP:61.222.xxx.xxx 未訂閱
我之前已說過,Combobox 要自己畫(DrawItem)Style := csOwnerDrawFixed 這是比較正式的程式碼。 http://www.efg2.com/Lab/Library/Delphi/Strings/showfont.zip
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-09 16:10:03 IP:222.183.xxx.xxx 未訂閱
多谢!< >< >
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-11-09 16:27:19 IP:222.183.xxx.xxx 未訂閱
大大: 关键我用  
 
//combobx style已经 設為 csOwnerDrawFixed     procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with combobox1 do
  begin
    canvas.FillRect(rect);
    if Index = 0 then
//这么也没有画出来hello耶,怎么显示的都是方块??
      canvas.TextOut(rect.Left   10, rect.Top   2, Combobox1.Items[combobox1.itemindex]  '  hello');
    if index = 1 then
      canvas.TextOut(rect.Left   10, rect.Top   2, Combobox1.Items[combobox1.itemindex]  ' sfe');
 。。。
  end;
end;    方块的原因是因为我自己创建的字体符号库(combobox1.canvas.font.name:='myfont')中没有后面添加的字符串吧。    怎么加进去,我再想想
發表人 - zzmbeyond01 於 2004/11/09 16:44:42
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-11-09 17:05:08 IP:61.222.xxx.xxx 未訂閱
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  I :Integer;
begin
  ComboBox2.Items.Clear;
  For I:=33 to 254 do ComboBox2.Items.Add(inttostr(I));
end;    procedure TForm1.ComboBox2DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  With Combobox2 do
  begin
    Canvas.FillRect(Rect);
    if (Index>-1) and (Index    DrawItem 使用為index {表示在畫哪一項目}
不能使用 Combobox1.Items[combobox1.itemindex] {表示每一次都畫一樣}    由於 直接 Combobox2.items.add(CHR(ACode));
會導致該 Char 值不對。因此先用 Combobox2.items.add(inttostr(ACode));
再畫時,在轉換為 CHAR         
        
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-11-09 17:14:51 IP:222.183.xxx.xxx 未訂閱
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-11-09 18:26:26 IP:222.183.xxx.xxx 未訂閱
Combobox2.items.add(CHR(ACode)); 會導致該 Char 值不對。 没有测出来,感觉是对的
系統時間:2024-06-14 5:09:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!