[ホスト名] [回数]
www.google.co.jp 36
■■■■■■■■
www9.plala.or.jp 9
■■
以前もお世話になりました。ありがとうございました。
VC6.0、コンソールで上記のように表示させています。
sHost[]にはホスト名、sNum[]にはホストレコード数が
nHostCntにはホスト名の格納されたsHost[]の数が入っています。
■は5回単位で1つ、繰り上げ表示です。
表示が多いとコンソール画面がスクロールしてしまうので
8データ(16行)で表示を止め、上下キーで
1データ(2行)ずつスクロールするようにしたいのですが、
どうにもうまくいきません。お力を貸していただけませんでしょうか。
char sStr[4][30] = {"[ホスト名]","[回数]","[←][→] 日付移動","[↑][↓] 上下スクロール"};
i = 0;
j = 8;
while(1){
// タイトルオプション(日付代入)
sprintf(pcTransactName, TITLE, iYear, iMonth, iDay);
// 画面クリア関数
aspCslClr();
// タイトル表示
aspShowTitle(pcTransactName, nOption);
// [ホスト名][回数]表示
printf("%14s%57s\n", sStr[0], sStr[1]);
// 表示
if(nHostCnt<j){
while(i<=k){
printf(" %-60s%8s\n ", sHost[i], sNum[i]);
iNum = atoi(sNum[i]);
for(n=1; (n<=(iNum+4)/5); n++)
printf("■");
printf("\n");
i++;
}
}
else{
while(i<=j){
printf(" %-60s%8s\n ", sHost[i], sNum[i]);
iNum = atoi(sNum[i]);
for(n=1; (n<=(iNum+4)/5); n++)
printf("■");
printf("\n");
i++;
}
}
// [←][→] 日付移動、[↑][↓] 上下スクロール表示
printf("%20s%27s\n", sStr[2], sStr[3]);
printf(" 行いたい処理のキーを押してください。");
// キー入力待ち
cKeyCode = aspGetCslPressKey();
switch(cKeyCode){
case ASP_KEY_ARROW_UP:
// ↑:上スクロール
break;
case ASP_KEY_ARROW_DOWN:
// ↓:下スクロール
break;
case ASP_KEY_ESC:
// ESCならメインメニューに戻る
return 0;
}
}
> どうにもうまくいきません。
で?
現状どうなっていて、それをどうしたいのかが書かれていないようだが。
単に追記前に再描写を止めて、追記後、スクロール判定を行ない、
必要に応じてスクロール戻しを行なった上で再描写開始、とかでは、
だめですか?
申し訳ありませんでした。
質問する際はしっかり必要なことを書くようにします。
void printCnt(char* sNum)
{
int n = 0;
int iNum = atoi(sNum);
if(iNum<161){
for(n=1; (n<=(iNum+4)/5); n++)
printf("■");
}
else if(iNum>160){
for(n=0; n<32 ; n++)
printf("■");
printf(">>");
}
printf("\n");
}
///////
i = 0;
nLimit = 8;
nFirstIndex = 0;
while(1){
sprintf(pcTransactName, TITLE, iYear, iMonth, iDay);
aspCslClr();
// タイトル表示
aspShowTitle(pcTransactName, nOption);
// [ホスト名][回数]表示
printf("%14s%56s\n", sStr[0], sStr[1]);
for(i=0; i<nLimit; i++) {
printf(" %-60s%7s\n ", sHost[nFirstIndex+i], sNum[nFirstIndex+i]);
printCnt( sNum[nFirstIndex+i] );
// 最大値チェック
if( (nFirstIndex+i) > k ) {
break;
}
}
// [←][→] 日付移動、[↑][↓] 上下スクロール表示
printf("\n%20s%27s\n\n", sStr[2], sStr[3]);
printf(" 行いたい処理のキーを押してください。");
// キー入力待ち
cKeyCode = aspGetCslPressKey();
switch(cKeyCode){
case ASP_KEY_ARROW_LEFT:
// 最小チェック
tTime -= 86400;
break;
case ASP_KEY_ARROW_RIGHT:
// 最大チェック
tTime += 86400;
break;
case ASP_KEY_ARROW_UP:
if( nFirstIndex > 0 ) {
nFirstIndex--;
}
break;
case ASP_KEY_ARROW_DOWN:
if( (nFirstIndex + nLimit) < k ) {
nFirstIndex++;
}
break;
case ASP_KEY_ESC:
// ESCならメインメニューに戻る
return 0;
}
if(cKeyCode == ASP_KEY_ARROW_LEFT || cKeyCode == ASP_KEY_ARROW_RIGHT)
break;
}
ツイート | ![]() |