inputbox的提示字字數會少SHOW出來 |
尚未結案
|
gigitahoo
一般會員 發表:8 回覆:2 積分:2 註冊:2004-09-16 發送簡訊給我 |
各位前輩: 不知inputbox的提示字若SHOW出來會少...該參數要去那修改呢?
我的程式碼如下:在麻煩前輩幫忙解答..小女子感激不盡.... procedure TForm1.FormCreate(Sender: TObject);
var
i,j,k:integer;
begin
button1.Caption:='計算排名';
button2.Caption:='結果(&X)';
stdnum:=strtoint(inputbox('輸入人數','請輸入','5'));
with stringgrid1 do
begin
colcount:=3;
rowcount:=6;
cells[0,0]:='座號';
cells[1,0]:='成績';
cells[2,0]:='名次';
for i:=1 to stdnum do
begin
stringgrid1.Cells[0,i]:=inttostr(i);
stringgrid1.Cells[1,i]:=inputbox('成績輸入' ,'請輸入第' inttostr(i) '位的成績','');
stringgrid1.Cells[2,i]:=inttostr(0);
end;
end;
end;
|
huangeider
高階會員 發表:288 回覆:492 積分:231 註冊:2003-02-26 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
會發生這個問題主要的原因,為 Delphi 預設的字型為
DefFontData: TFontData = (
Handle: 0;
Height: 0;
Pitch: fpDefault;
Style: [];
Charset : DEFAULT_CHARSET;
Name: 'MS Sans Serif'); 為英文字型,故在判斷中文長度時會失算。 您可以在
procedure TForm1.FormCreate(Sender: TObject);
begin 添加
DefFontData.Name := '新細明體'; 就可以了,如此能避免被切一半的命運! DefFontData.Name := '新細明體';
inputbox('成績輸入' ,'請輸入第1位的成績','');
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
gigitahoo:類似問題我於BCB討論區回答過好幾次, 原文參考對岸 http://www.ccrun.com/doc/go.asp?id=598 C Builder 研究 雖然是BCB但引用全是Delphi我相信沒問題! InputBox 可以做到應用面看你自己處理, 原Vcl\Source\dialogs.pas 不要動,也不要改(不知Delphi是否也是此。) 將dialogs.pas copy至你專案檔案下 開啟你的專案目錄下dialogs.pas 找到function InputQuery裡的注意紅字部分是你要加入或修改的部分! function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean; var Form: TForm; Prompt: TLabel; Edit: TEdit; fstyle: dWord; //這是用API實現數值型Edit! DialogUnits: TPoint; ButtonTop, ButtonWidth, ButtonHeight: Integer; begin Result := False; Form := TForm.Create(Application); with Form do try Canvas.Font := Font; DialogUnits := GetAveCharSize(Canvas); BorderStyle := bsDialog; Caption := ACaption; ClientWidth := MulDiv(180, DialogUnits.X, 4); ClientHeight := MulDiv(63, DialogUnits.Y, 8); Position := poScreenCenter; Prompt := TLabel.Create(Form); with Prompt do begin Parent := Form; Left := MulDiv(8, DialogUnits.X, 4); Top := MulDiv(8, DialogUnits.Y, 8); MulDiv(164, DialogUnits.X, 4); // 保證中文顯示沒問題 AutoSize := False; Caption := APrompt; end; Edit := TEdit.Create(Form); with Edit do begin Parent := Form; Left := Prompt.Left; Top := MulDiv(19, DialogUnits.Y, 8); Width := MulDiv(164, DialogUnits.X, 4); MaxLength := 255; // PasswordChar:='*'; // 密碼方式輸入 Text := Value; SelectAll; end; fstyle := GetWindowLong(Edit.Handle, GWL_STYLE); //API實現數值型Edit SetWindowLong(Edit.Handle, GWL_STYLE, fstyle or ES_NUMBER); //API實現數值型Edit ButtonTop := MulDiv(41, DialogUnits.Y, 8); ButtonWidth := MulDiv(50, DialogUnits.X, 4); ButtonHeight := MulDiv(14, DialogUnits.Y, 8); with TButton.Create(Form) do begin Parent := Form; Caption := '確定'; // SMsgDlgOK; // 改成中文 ModalResult := mrOk; Default := True; SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth, ButtonHeight); end; with TButton.Create(Form) do begin Parent := Form; Caption := '取消'; SMsgDlgCancel; // 改成中文 ModalResult := mrCancel; Cancel := True; SetBounds(MulDiv(92, DialogUnits.X, 4), ButtonTop, ButtonWidth, ButtonHeight); end; if ShowModal = mrOk then begin Value := Edit.Text; Result := True; end; finally Form.Free; end; end; 紅字部分請依需要自行處理 只要你的這隻同目錄下的dialogs.pas 加入你的project即可 記著你的專案檔案只要 project-> add 專案目錄下dialogs.pas 程式裡不要Include dialogs.pas 要不將此function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean; Copy至你程式改個名字,如MyInputQuery也可以。 請參考!Andy Chang 發表人 - andychang1690 於 2004/10/13 09:12:40
------
Andy Chang |
gigitahoo
一般會員 發表:8 回覆:2 積分:2 註冊:2004-09-16 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |