2011-10-22 44 views
6

Tôi đang cố gắng tạo một con trỏ spinner/wait trong ứng dụng bảng điều khiển Delphi. Tôi có thể làm điều đó nhưng tôi chắc chắn rằng mã có thể được sắp xếp hợp lý/cải thiện đáng kể. Xin hãy tha thứ mã nghèo:Tạo Spinner trong Bảng điều khiển Delphi

Procedure PositionXY(x , y : Integer); 
var 
hStdOut: HWND; 
ScreenBufInfo: TConsoleScreenBufferInfo; 
Coord1: TCoord; 
z: Integer; 
Begin 
    sleep(100); 
    hStdOut := GetStdHandle(STD_OUTPUT_HANDLE); 
    GetConsoleScreenBufferInfo(hStdOut, ScreenBufInfo); 
    Coord1.X := x; 
    Coord1.Y := y; 
    SetConsoleCursorPosition(hStdOut, Coord1); 
End; 

begin 
while True do begin 
Write('|'); 
    PositionXY(0,0); 
Write('/'); 
    PositionXY(0,0); 
Write('-'); 
    PositionXY(0,0); 
Write('\'); 
    PositionXY(0,0); 
end; 
ReadLn; 
end. 

Cảm ơn trước Paul

+1

Mitpickers': hStdOut là ** không ** một HWND nhưng chỉ là một HANDLE/THANDLE. –

+2

Một vấn đề rõ ràng với đoạn mã ở trên là không chính xác là 'PositionXY' chứa' sleep (100) '. –

+0

Skool cũ. 1 cho geekery console. –

Trả lời

9

này có thể hướng dẫn bạn đến một số tối ưu:

Write('|'#8); Sleep(100); 
Write('/'#8); Sleep(100); 
Write('-'#8); Sleep(100); 
Write('\'#8); Sleep(100); 

Gợi ý: # 8 là một BackSpace.

+0

Thankyou ... Tôi đã bắt đầu cố gắng tập luyện backspace nhưng đã không thành công ... –

1

Sử dụng Mã của bạn tôi sẽ thay đổi nó một chút,

Procedure WriteXY(x , y : Integer, s : string); 
var 
hStdOut: HWND; 
ScreenBufInfo: TConsoleScreenBufferInfo; 
Coord1: TCoord; 
Begin 
    hStdOut := GetStdHandle(STD_OUTPUT_HANDLE); 
    GetConsoleScreenBufferInfo(hStdOut, ScreenBufInfo); 
    Coord1.X := x; 
    Coord1.Y := y; 
    Write(s); 
    SetConsoleCursorPosition(hStdOut, Coord1); 
End; 

begin 
while True do begin 
    WriteXY(0,0,'|'); Sleep(100); 
    WriteXY(0,0,'/'); Sleep(100); 
    WriteXY(0,0,'-'); Sleep(100); 
    WriteXY(0,0,'\'); Sleep(100); 
end; 
ReadLn; 
end. 

Điều này làm cho WriteXY hơn một chút sử dụng đầy đủ đối với tôi hơn là chỉ PositionXY

2

Giải pháp của tôi sau câu trả lời nhất định và phản hồi.
Nhờ Uwe và Christopher

const Frame: array[0..3] of char = ('|','/','-','\'); 

var i : Integer; 

begin 
while True do begin 
    for i := 0 to Length(Frame)-1 do begin 
    Write(Frame[i]+#8); Sleep(100); 
end; 
    ///do something 
end; 
    ReadLn; 
end. 

Chọn tùy chọn này để cho phép thay đổi dễ dàng hơn trong những chars Ie: góc Cooler ASCII Spinners?

Các vấn đề liên quan