全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1985
推到 Plurk!
推到 Facebook!

小弟初新手尋求各位前輩幫忙

答題得分者是:herbert2
string4862
一般會員


發表:1
回覆:3
積分:0
註冊:2019-07-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2019-07-04 05:29:00 IP:114.33.xxx.xxx 未訂閱
感謝各位大大們的幫忙
小弟的Delphi7 裝有Cnpack插件
並非自己簡化成這樣 ...
Button
edit = edt

se= SpinEdit
(插件會自動減化)

目前剩下的是比較6個數字並排列大小
(名次的部分)
因為不知道怎麼用其他方式來縮短程式碼
所以乖乖寫了90組
每一個然後在比對右邊的設定來顯示在lable上
想知道如何比較 由大到小 1 - 6
在另外顯示在其他的Lable上

附加檔案:5d1d1e1c1a8ee_計分.rar
編輯記錄
string4862 重新編輯於 2019-07-12 23:20:14, 註解 無‧
string4862 重新編輯於 2019-07-13 03:30:09, 註解 無‧
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2019-07-10 01:06:51 IP:202.39.xxx.xxx 未訂閱
每一個 TComboBox 的 Items 各有7個 Item, 那 a_1 ~ a_15 要對應什麼?"
se1.Value ~ se7.Value 是那90個 TComboBox 的 7 個 Item 的 Value,

它的值不是 String 嗎? 怎能直接填入 integer 變數? 而且 90 個 TComboBox 的各 7 個 Item 都同名?
for j: = 1 to Form1.ComponentCount -1 do
您都知道 Max. Component 的 Index 是 ComponentCount -1, 那怎麼從 1 而非 0 開始?
既然您全部 Component 都檢查了一次, 只要其一是 TComboBox, 且 ItemIndex = -1 ( := -1 是賦值, 不是邏輯判斷式吧! ),
就把 a_0 ~ a_15 都填 0, 您的程式是這麼寫的呀!
如果您能用中文說清楚您的需求, 而非用不完整且諸多錯誤的程式碼來提問, 或許有人能幫您!


※回文編輯器會吃掉部分文句, 且抓不到規則.
編輯記錄
herbert2 重新編輯於 2019-07-10 01:12:21, 註解 無‧
herbert2 重新編輯於 2019-07-10 01:15:24, 註解 無‧
herbert2 重新編輯於 2019-07-10 01:16:43, 註解 無‧
herbert2 重新編輯於 2019-07-10 01:18:03, 註解 無‧
herbert2 重新編輯於 2019-07-10 01:18:53, 註解 無‧
herbert2 重新編輯於 2019-07-10 01:19:36, 註解 無‧
herbert2 重新編輯於 2019-07-10 01:20:04, 註解 無‧
herbert2 重新編輯於 2019-07-10 01:21:01, 註解 無‧
herbert2 重新編輯於 2019-07-10 01:22:10, 註解 無‧
herbert2 重新編輯於 2019-07-10 01:22:41, 註解 無‧
herbert2 重新編輯於 2019-07-10 01:24:01, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2019-07-11 08:12:39 IP:36.226.xxx.xxx 未訂閱
我先假設你只是要問90組的combobx要怎麼樣才能用更簡潔的方式來做, 所有的元件都已先開出來在畫面的前提下
以下程式碼是有縮排的, 但本站的編排格式可能會跑掉
我沒有實作, 但編譯是通過的, 代表語法是OK的
程式的+是全形, 不知道為什麼站內的 半形"加" 會不見, 所以你自己要修正一下

procedure TForm1.Button1Click(Sender: TObject);
var cbb : TCombobox;
se : TSpinEdit;
i, j: integer;
a : array[0..89, 0..6] of integer;
begin
for i := 1 to 90 do
begin
cbb := TCombobox(FindComponent('cbb' + inttostr(i) ) );
for j:= 1 to 7 do
begin
se := TSpinEdit(FindComponent('se' + Inttostr(j) ) );

if (cbb <> nil) and (se <> nil) then
begin
if cbb.ItemIndex = -1
then a[i-1, j-1] := 0
else a[i-1, j-1] := se.Value;
end;
end;
end;
end;
編輯記錄
P.D. 重新編輯於 2019-07-11 08:15:09, 註解 無‧
P.D. 重新編輯於 2019-07-11 08:17:06, 註解 無‧
string4862
一般會員


發表:1
回覆:3
積分:0
註冊:2019-07-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2019-07-12 23:08:16 IP:114.33.xxx.xxx 未訂閱

===================引 用 herbert2 文 章===================
每一個 TComboBox 的 Items 各有7個 Item, 那 a_1 ~ a_15 要對應什麼?"
se1.Value ~ se7.Value 是那90個 TComboBox 的 7 個 Item 的 Value,

它的值不是 String 嗎? 怎能直接填入 integer 變數? 而且 90 個 TComboBox 的各 7 個 Item 都同名?
for j: = 1 to Form1.ComponentCount -1 do
您都知道 Max. Component 的 Index 是 ComponentCount -1, 那怎麼從 1 而非 0 開始?
既然您全部 Component 都檢查了一次, 只要其一是 TComboBox, 且 ItemIndex = -1 ( := -1 是賦值, 不是邏輯判斷式吧! ),
就把 a_0 ~ a_15 都填 0, 您的程式是這麼寫的呀!
如果您能用中文說清楚您的需求, 而非用不完整且諸多錯誤的程式碼來提問, 或許有人能幫您!


※回文編輯器會吃掉部分文句, 且抓不到規則.

Item統計分數用的 ....
如果 item = 0 的話 a1 = se1.Value (設定的分數
每一個 Combobox 都有一個對應的數值
string4862
一般會員


發表:1
回覆:3
積分:0
註冊:2019-07-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2019-07-15 00:19:13 IP:114.33.xxx.xxx 未訂閱
小弟有重新上傳了一下
在請您過目一下
不過這個有裝CnPack插件
所以可能跟您的版本有所差異
目前大概是這樣
只剩下比較六個數字的部分
(沒辦法簡化我只好寫90組 .....
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2019-07-17 00:56:03 IP:202.39.xxx.xxx 未訂閱
不是很熟悉 delphi 語法, 大致改為如下:

[code delphi]
var
cbb1 : array[0..89] of TComboBox; // 原 cbb1 ~ cbb90 臨時工作用
cbb : array[0..5,0..14] of TComboBox; // 原 cbb1 ~ cbb90 分成六組各15個之二維陣列
v : array[0..5,0..14] of Integer; // 原 a1 ~ a15, b1 ~ b15, .... f1 ~ f15
r : array[0..5] of Integer; // 原 a,b,c,d,e,f
se : array[0..6] of TSpinEdit;
k : Integer;
begin
se := [se1, se2, se3, se4, se5, se6, se7]; // TComboBox 之 ItemIndex 0 .. 6 與 TSpinEdit 對應
cbb1 := [cbb0,cbb1, . . . . . ., cbb89];
for j := 0 to 14 do
begin
for i := 0 to 5 do
begin
cbb[i][j] := cbb1[i j*6]; // 0..5, 6..11, 12..17, .... 84..89
end;
end;


for j := 0 to 14 do
begin
for i := 0 to 5 do
begin
// 0,0~0,5, 1,0~1,5, . . . . 13,0~13,5, 14,0~14,5
k := cbb[i][j].ItemIndex;
if k = -1 then
begin
v[i][j] := 0;
end
else
begin
v[i][j] := se[k].Value;
end;
end;
end;
end;
// 這也可以寫成 for i:= 0 to 5 do 及 for j := 0 to 14 do 兩層迴圈
r[0] := v[0][0] + v[0][1] + v[0][2] + v[0][3] + v[0][4] + v[0][5] + v[0][6] + v[0][7] + v[0][8] + v[0][9] + v[0][10] + v[0][11] + v[0][12] + v[0][13] + v[0][14];
r[1] := v[1][0] + v[1][1] + v[1][2] + v[1][3] + v[1][4] + v[1][5] + v[1][6] + v[1][7] + v[1][8] + v[1][9] + v[1][10] + v[1][11] + v[1][12] + v[1][13] + v[1][14];
r[2] := v[2][0] + v[2][1] + v[2][2] + v[2][3] + v[2][4] + v[2][5] + v[2][6] + v[2][7] + v[2][8] + v[2][9] + v[2][10] + v[2][11] + v[2][12] + v[2][13] + v[2][14];
r[3] := v[3][0] + v[3][1] + v[3][2] + v[3][3] + v[3][4] + v[3][5] + v[3][6] + v[3][7] + v[3][8] + v[3][9] + v[3][10] + v[3][11] + v[3][12] + v[3][13] + v[3][14];
r[4] := v[4][0] + v[4][1] + v[4][2] + v[4][3] + v[4][4] + v[4][5] + v[4][6] + v[4][7] + v[4][8] + v[4][9] + v[4][10] + v[4][11] + v[4][12] + v[4][13] + v[4][14];
r[5] := v[5][0] + v[5][1] + v[5][2] + v[5][3] + v[5][4] + v[5][5] + v[5][6] + v[5][7] + v[5][8] + v[5][9] + v[5][10] + v[5][11] + v[5][12] + v[5][13] + v[5][14];
end;
[/code]

若元素位置沒與您想要的對上, 請自行修正.
加號真的會被吃掉.
編輯記錄
herbert2 重新編輯於 2019-07-17 00:59:43, 註解 無‧
herbert2 重新編輯於 2019-07-17 01:06:25, 註解 無‧
herbert2 重新編輯於 2019-07-17 01:12:22, 註解 無‧
string4862
一般會員


發表:1
回覆:3
積分:0
註冊:2019-07-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2019-07-18 22:08:01 IP:114.33.xxx.xxx 未訂閱
其他人有都有幫助謝謝大家的幫忙
雖然我最後還是用自己的方法
不過還是感謝你們
系統時間:2024-04-30 0:21:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!