PDA

View Full Version : Dòng chữ chạy ngang qua màn hình



lehang_gb1
22-07-2009, 22:27
Viết chương trình để nhập 1 xâu kí tự từ bàn phím và đưa xâu đó ra màn hình có dạng dòng chữ chạy giữa màn hình văn bản 25 x 80.

quangtq
22-07-2009, 22:35
Bài này thuộc dạng vẽ hình chuyển động.
Cách đơn giản nhất là xóa đi vẽ lại.


Đặt (x,y) là tọa độ bắt đầu dòng chữ.
Repeat
SetColor(Yellow);
OutTextXY(x,y,st);
Delay(10); // làm trễ
SetColor(Black);
OutTextXY(x,y,st);
x:=x+dx; // dx là bước nhảy, dx càng lớn thì chạy càng nhanh
If x+Length(st)>GetMaxX then x:="Giá trị x ban đầu";
Until KeyPressed;

Cách 2: Sử dụng biến động, cách này vẽ đẹp hơn.
Cần thì post sau.

hang_vt
22-07-2009, 23:11
uses crt;
var i:integer;
a:string;
begin
a:='Chao Mung Ban Den Dien Dan Tin Hoc';
for i:=1 to 78 do
a:=' '+a;
a:=a+a;
clrscr;
repeat
inc(i);
gotoxy(1,12);
write(copy(a,i,79));
delay(150);
if i=120 then
begin
i:=0;
clrscr;
end;
until keypressed;
end.

quangtq
22-07-2009, 23:15
Pà chị chơi ở Text Mode à?
Cái chữ chuyển động thế này Text Mode xấu lắm. Graph Mode mới chấp nhận được.

hang_vt
22-07-2009, 23:34
c chỉ bik thế này thôi :) . Nghịch cho vui thôi chứ đâu có thi mí cái nì

lehang_gb1
23-07-2009, 07:37
Các bạn tham, gia các cách viết chương trình

bld
23-07-2009, 08:14
học pas gần 1 năm trời rồi mà mình có biết gì đến đồ họa đâu , chắc cũng chỉ chơi text mode thôi :(

quangtq
23-07-2009, 16:01
Đồ họa khá nhiều cái hay. Thi xong thử học đi.
Nhân tiện post cách 2:
1. Lưu hình: Để lưu hình bất kì, tính HCN bao hình đó:
Dùng hàm


ImageSize(x1,y1,x2,y2:Integer):Integer;

Hàm này trả về kích thước HCN bao có đỉnh trên trái (x1,y1), dưới phải (x2,y2).
2. Bố trí bộ nhớ để cất hình:
Thủ tục:


GetMem(Var P:Pointer; n:Word);

Thủ tục này sử dụng con trỏ ko định kiểu P, tạo ra 1 biến động có độ lớn n byte.
Để giải phóng:
FreeMem(Var P:Pointer;n:Word);
3. Chép hình vào bộ nhớ:
Sử dụng thủ tục:


GetImage(x1,y1,x2,y2:Integer; Var P:Pointer);

TT này chép các điểm ảnh trong HCN (x1,y1,x2,y2) trên màn hình vào vùng nhớ được con trỏ P trỏ tới.
4. Khôi phục hình đã cất = GetImage, sử dụng thủ tục:


PutImage(x,y:Integer;Var P:Pointer;Mode:Word);

Thủ tục này chép hình lưu trong biến động được trỏ tới bởi P vào vị trí x,y.
Mode có các giá trị:
CopyPut=0: Sao chép đè lên. Hình cũ mất
XORPut=1: Không nhớ, nhưng dùng cái này để tạo hình chuyển động.
Hình như còn AndPut hay OrPut thì phải, quên rồi.
Vậy thì các bước cần làm là:


1. Vẽ chữ. Lưu vào biến động ko định kiểu.
2. Tạo trễ (Delay)
3. Xóa hình, khôi phục nền cũ với PutImage và phép XORPut.
4. Vẽ ở vị trí mới

Đơn giản thôi mà.
Cần thêm ví dụ không?

congchivo
18-10-2010, 13:32
cho tôi hỏi thứ tự làm cho dòng chữ chạy trên màn hình destop