スクロールのように2行ずつ切替表示をするには

解決


Jack06  2006-02-15 03:00:37  No: 60712

[ホスト名]            [回数]
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;
 }
}


RAPT  2006-02-15 09:02:37  No: 60713

> どうにもうまくいきません。
で?
現状どうなっていて、それをどうしたいのかが書かれていないようだが。

単に追記前に再描写を止めて、追記後、スクロール判定を行ない、
必要に応じてスクロール戻しを行なった上で再描写開始、とかでは、
だめですか?


Jack06  2006-02-16 05:12:36  No: 60714

申し訳ありませんでした。
質問する際はしっかり必要なことを書くようにします。

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;
                }


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加