Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: Bật/tắt dấu con trỏ trong Windows Console

  1. #1
    Ngày gia nhập
    07 2018
    Bài viết
    7

    Mặc định Bật/tắt dấu con trỏ trong Windows Console

    Mọi người cho mình hỏi là có cách nào để tắt dấu con trỏ (cái dấu _) trong cửa sổ Console đi được không ạ?

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    902

    Cái này hay, chưa từng gặp nhu cầu này, các anh em có ý kiến gì chăng ?

  3. #3
    Ngày gia nhập
    08 2017
    Bài viết
    2,567

    nhấn và giữ nút power khoảng 10 giây.

  4. #4
    Ngày gia nhập
    07 2018
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi Monre Xem bài viết
    nhấn và giữ nút power khoảng 10 giây.
    Ko được, nó vẫn ko tắt đc

  5. #5
    Ngày gia nhập
    08 2017
    Bài viết
    2,567

    Lạ, ở máy tôi, làm như trên nó sẽ shutdown, máy tắt tối đen.

    Theo các tài liệu cũ có thể dùng ngắt bằng ASM để show/hide cursor; có thể tìm thấy api tương ứng.

    Bạn có thể cho biết ứng dụng nào cần đến nó không ?

  6. #6
    Ngày gia nhập
    07 2018
    Bài viết
    7

    Mặc định Bật/tắt dấu con trỏ trong Windows Console

    Trích dẫn Nguyên bản được gửi bởi Monre Xem bài viết
    Lạ, ở máy tôi, làm như trên nó sẽ shutdown, máy tắt tối đen.

    Theo các tài liệu cũ có thể dùng ngắt bằng ASM để show/hide cursor; có thể tìm thấy api tương ứng.

    Bạn có thể cho biết ứng dụng nào cần đến nó không ?

    - À thì thực ra giữ nút nguồn thì nó thực hiện chương trình tắt máy hay gì ấy, nhiều lúc máy đơ ko tắt được bằng Task Manager hoặc Sign Out, thì mình toàn tắt bằng cách đó. Nhưng mà thấy bảo tắt bằng cách đấy nó bị gì ấy nên mình hạn chế tắt kiểu đấy. Còn cmt trên của mình nói vui vây thui, ahihi.
    - Mình làm thử mấy cái hiển thị trên màn hình console, cái dấu con trỏ nó cứ nháy nháy, lúc thì nó hiện ở chỗ này, lúc thì nó hiện ở chỗ kia làm cái hình mình cho hiển thị lên nó xấu đi nên mình mới hỏi xem có cách nào tắt nó đi được không. Bởi mấy cái mình cho hiển thị lên không cần nhập thông số

    - - - Nội dung đã được cập nhật ngày 02-02-2019 lúc 02:55 PM - - -

    Đây nè, cái hình bên trái mình chưa cho nó chạy trong while nên ko nhìn thấy cái con trỏ, còn hình bên phải con trỏ nó chạy loạn cả lên, do mình chụp màn hình nên chỉ thấy có 1 vị trí thui. Chỉ cần tắt cái con trỏ đi là được
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Untitled.png
Lần xem:	3
Size:		7.8 KB
ID:		66931

  7. #7
    Ngày gia nhập
    08 2017
    Bài viết
    2,567

    Giả sử có hai hàm
    C Code:
    1. void hideCaret(){
    2.    //... ẩn con trỏ
    3. }
    4. void showCaret(){
    5.    //... hiện con trỏ
    6. }
    bạn gọi nó như thế nào, ở chỗ nào trong code bạn cần ?

    Viết code đưa lên đây, tôi sẽ thử xem được không, rồi mới bàn tiếp.

  8. #8
    Ngày gia nhập
    07 2018
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi Monre Xem bài viết
    Giả sử có hai hàm
    C Code:
    1. void hideCaret(){
    2.    //... ẩn con trỏ
    3. }
    4. void showCaret(){
    5.    //... hiện con trỏ
    6. }
    bạn gọi nó như thế nào, ở chỗ nào trong code bạn cần ?

    Viết code đưa lên đây, tôi sẽ thử xem được không, rồi mới bàn tiếp.
    main.cpp
    Code:
    #include "main.h"
    
    void Init_Frame(int Row, int Col, int Top, int Left);
    void Show_Control(int Row, int Col, int Top, int Left);
    void Show_Display(int Row, int Col, int Top, int Left);
    int main(){
    	Init_Frame(F_Row, F_Col, TOP, LEFT);
    	while(State != EXIT){
    		Show_Control(F_Row, F_Col, TOP, LEFT);
    		Show_Display(F_Row, F_Col, TOP, LEFT);		
    	}	
    }
    
    void Init_Frame(int Row, int Col, int Top, int Left){
    	for(int i = 1; i <= Row; i++){
    		gotoxy(Left, Top + i - 1);
    		for(int j = 1; j <= Col; j++){
    			if(j == 1 || j == Col){
    				if(i == 1 || i == Row) Pos[i][j] = OBJ_FE;
    				else Pos[i][j] = OBJ_FV;
    			} 
    			if(j > 1 && j < Col){
    				if(i == 1 || i == Row) Pos[i][j] = OBJ_FH;
    				else Pos[i][j] = OBJ_UNOBJ;
    			}
    		}
    	}
    }
    
    void Show_Control(int Row, int Col, int Top, int Left){
    	for(int i = 1; i <= Row; i++){
    		gotoxy(Left + Col + 30, Top + i - 1);
    		for(int j = 1; j <= Col; j++){
    			printf("%d", Pos[i][j]);
    		}
    	}
    }
    
    void Show_Display(int Row, int Col, int Top, int Left){
    	for(int i = 1; i <= F_Row; i++){
    		gotoxy(Left, Top + i - 1);
    		for(int j = 1; j <= F_Col; j++){
    			switch(Pos[i][j]){
    				case OBJ_UNOBJ: printf("%c", SHOW_UNOBJ);
    					break;
    				case OBJ_OBJ: printf("%c", SHOW_OBJ);
    					break;
    				case OBJ_FE: printf("%c", SHOW_FE);
    					break;
    				case OBJ_FH: printf("%c", SHOW_FH);
    					break;
    				case OBJ_FV: printf("%c", SHOW_FV);
    					break;
    			}
    		}
    	}
    }
    main.h
    Code:
    #ifndef _main_H_
    #define _main_H_
    
    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>
    #include "var.h"
    #include "gotoxy.h"
    
    
    
    #endif
    var.h
    Code:
    #ifndef _value_H_
    #define _value_H_
    
    #define OBJ_UNOBJ	0
    #define OBJ_OBJ		1
    #define OBJ_FE		2
    #define OBJ_FH		3
    #define OBJ_FV		4
    
    #define SHOW_UNOBJ	32
    #define SHOW_OBJ	254
    #define SHOW_FE		219
    #define SHOW_FH		205	
    #define SHOW_FV		186  
    
    #define LEFT		10
    #define TOP			5
    
    enum INIT_FRAME{
    	F_Col = 20, 
    	F_Row = 22,
    };
    
    int Pos[100][100];
    
    enum STATE{
    	MENU = 0,
    	EXIT = 1,
    };
    int State = MENU;
    #endif
    gotoxy.c
    Code:
    #include "gotoxy.h"
    #include <windows.h>
    void gotoxy(int col, int row)
    {
      static HANDLE h = NULL;  
      if(!h)
        h = GetStdHandle(STD_OUTPUT_HANDLE);
      COORD c = { col, row };  
      SetConsoleCursorPosition(h,c);
    }
    gotoxy.h
    Code:
    #ifndef _gotoxy_H_
    #define _gotoxy_H_
    
    void gotoxy(int col, int row);
    
    
    #endif
    đây bạn xem giúp mình với

  9. #9
    Ngày gia nhập
    07 2018
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi Monre Xem bài viết
    tắt dấu con trỏ (cái dấu _) trong cửa sổ Console đi thì vẫn bị; cho nó ngủ, ví dụ
    Sleep(10);

    sau các lệnh in (printf) nó bớt nhấp nháy màn hình, giảm rõ rệt
    mình tìm được đoạn code trên mạng để tắt nó rồi
    nó im ru luôn ko thấy lòi ra nữa

    - - - Nội dung đã được cập nhật ngày 16-02-2019 lúc 04:00 AM - - -

    Code:
    #include <windows.h>
    
    HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
    
    void setCursor(bool visible, DWORD size) // set bool visible = 0 - invisible, bool visible = 1 - visible
    {
    	if(size == 0)
    	{
    		size = 20;	// default cursor size Changing to numbers from 1 to 20, decreases cursor width
    	}
    	CONSOLE_CURSOR_INFO lpCursor;	
    	lpCursor.bVisible = visible;
    	lpCursor.dwSize = size;
    	SetConsoleCursorInfo(console,&lpCursor);
    }
    - - - Nội dung đã được cập nhật ngày 16-02-2019 lúc 04:07 AM - - -

    Trích dẫn Nguyên bản được gửi bởi Monre Xem bài viết
    tắt dấu con trỏ (cái dấu _) trong cửa sổ Console đi thì vẫn bị; cho nó ngủ, ví dụ
    Sleep(10);

    sau các lệnh in (printf) nó bớt nhấp nháy màn hình, giảm rõ rệt
    - Nhưng mà chỉ sử dụng Sleep được trong 1 số trường hợp, nếu chương trình cần hoạt động liên tục để nhận biết trạng thái thì Sleep có thể sẽ ảnh hướng tới thời gian kích hoạt một số lệnh

  10. #10
    Ngày gia nhập
    08 2017
    Bài viết
    2,567

    C Code:
    1. #include "main.h"
    2.  
    3. void Init_Frame(int Row, int Col, int Top, int Left);
    4. void Show_Control(int Row, int Col, int Top, int Left);
    5. void Show_Display(int Row, int Col, int Top, int Left);
    6. ...
    7. int main(){
    8.     hideCaret(); //giấu con trỏ
    9.     Init_Frame(F_Row, F_Col, TOP, LEFT);
    10.     //while(State != EXIT){ các lệnh in nhanh tới mức caret không kịp xuất hiện
    11.         Show_Control(F_Row, F_Col, TOP, LEFT);
    12.         Show_Display(F_Row, F_Col, TOP, LEFT);     
    13.     //}
    14. }
    15. ...

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn