2016-12-17 76 views
1

我的cxmemo限制爲150個字符(maxlenght)。 我想用cxProgressBar來直觀地表示這個限制。 我該怎麼做? 我想:使用進度條顯示備忘錄的文本限制

procedure TMain_Form.cxMemo1PropertiesChange(Sender: TObject); 
begin 
if not (trim(cxmemo1.lines.Text) = '') then begin 
cxProgressBar1.Position := cxProgressBar1.Position +cxmemo1.Properties.MaxLength - Length(cxmemo1.Text); 
end; 
end; 

但它不工作... 我想要的進度時用戶鍵入的上升和收縮,如果他在備忘錄中刪除字符。 我該如何做這項工作?

+1

設置'progressbar.max'到MAXLENGTH和更新'長度(cxmemo1.Text)的位置;' –

+0

爲什麼現在的進度永不回到0%?即使備忘錄爲空,它仍然保持在1%。 - 非常好的答案謝謝。 – user3351050

+0

進度條的最小值是多少?當備忘錄爲空時,你還有沒有更新進度條的檢查? –

回答

0
procedure TMain_Form.cxMemo1PropertiesChange(Sender: TObject); 
begin 
    if Trim(cxMemo1.Lines.Text) <> '' then begin 
    cxProgressBar1.Visible := True; 
    cxProgressBar1.Position := Length(cxMemo1.Text); 
    if Length(cxMemo1.Text) = cxMemo1.Properties.MaxLength then 
     ShowMessage('You exceeded the maximum number of characters !' + #13#10 +'Limit is : 150 '+ #13#10 +'For more, use the field "memo" .'); 
    end else begin 
    if cxMemo1.Lines.Text.IsEmpty then 
     cxProgressBar1.Position := 0; 
    cxProgressBar1.Visible := False; 
    end; 
end; 
+1

正如建議一樣,嘗試改進縮進!代碼很難閱讀 –

+1

每次讀取「文本」時,都會分配一個新的「字符串」。此代碼分配4個字符串,只需要1個字符串。將修剪過的「文本」緩存到局部變量,並根據需要隨處使用。 –

+0

@ Remy Lebeau你是完全正確的...... – user763539