小弟最近在改一個前人留下的程式,
主程式部份是 pascal 寫的, 這部份我可以了解.
但是 input 介面是 Xview, 這我就不行了.
小弟現在是猜測原始程式的意思再自己稍微更改一些小地方而已.
以下這兩段就是小弟利用到的原始程式, 也就是圖上紅色框框的部份.
我可以猜得出這是按照所按下的按鈕傳回 POption 的數值.
SEPARATE AREAS 的 POption=0;
SINGLE AREA 的 POption=1.
*pOption = POption;
xv_create(panel, PANEL_CHECK_BOX,
XV_X, 50,
XV_Y, 75,
PANEL_LABEL_BOLD, TRUE,
PANEL_CHOOSE_ONE, TRUE,
PANEL_LAYOUT, PANEL_HORIZONTAL,
PANEL_VALUE, *pOption,
PANEL_CHOICE_STRINGS, "SEPARATE AREAS", "SINGLE AREA", NULL,
PANEL_NOTIFY_PROC, toggle_option1,
PANEL_CLIENT_DATA, frame,
NULL);
int
toggle_option1(item, value, event)
Panel_item item;
unsigned value;
Event *event;
{
char buf[32];
Frame frame = xv_get(item, PANEL_CLIENT_DATA);
int i;
buf[0] = 0;
if (event_id(event) == MS_LEFT) {
for (POption = 0; value; POption++, value >>= 1)
if (value & 1)
sprintf(buf+strlen(buf), "%s%c ",
xv_get(item, PANEL_CHOICE_STRING, POption),
(value >> 1)? ',' : ' ');
xv_set(frame, FRAME_RIGHT_FOOTER, buf, NULL);
return XV_OK;
}
return XV_ERROR;
}
所以我 copy 了這兩段程式改成藍色框框的部份.
以下是小弟改的, 我的目的是要讓
ELITIST 的 RMOption 傳回 0;
ROULETTE WHEEL 的 RMOption 傳回 1;
TOURNAMENT 的 RMOption 傳回 2;
RANDOM 的 RMOption 傳回 3;
*rmOption = RMOption;
xv_create(panel, PANEL_CHECK_BOX,
XV_X, 75,
XV_Y, 400,
PANEL_LABEL_BOLD, TRUE,
PANEL_CHOOSE_ONE, TRUE,
PANEL_LAYOUT, PANEL_HORIZONTAL,
PANEL_VALUE, *rmOption,
PANEL_CHOICE_STRINGS, "ELITIST", "ROULETTE WHEEL", "TOURNAMENT", "RANDOM", NULL,
PANEL_NOTIFY_PROC, toggle_option6,
PANEL_CLIENT_DATA, frame,
NULL);
int
toggle_option6(item, value, event)
Panel_item item;
unsigned value;
Event *event;
{
char buf[32];
Frame frame = xv_get(item, PANEL_CLIENT_DATA);
int i;
buf[0] = 0;
if (event_id(event) == MS_LEFT) {
for (RMOption = 0; value; RMOption++, value >>= 1)
if (value & 1)
sprintf(buf+strlen(buf), "%s%c ",
xv_get(item, PANEL_CHOICE_STRING, RMOption),
(value >> 1)? ',' : ' ');
xv_set(frame, FRAME_RIGHT_FOOTER, buf, NULL);
return XV_OK;
}
return XV_ERROR;
}
可是很奇怪的是 ELITIST, ROULETTE WHEEL, TOURNAMENT, 都可以正確傳回 0,1,2; 可是 RANDOM 按下後卻還是傳回 2, 而不是 3.
不曉得可不可以請前輩指點一下迷津, 謝謝您的幫忙.

p.s. 版主大人, 這種文章可不可以算是大家閒聊之餘動動腦筋的益智文章啊? po 在閒聊八卦討論區應該沒有犯規吧.




























































































