Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.01.2013, 15:43
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию пауза консольки и crt32

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils,crt32,windows;
 
type
 coord  = record
  x: integer;
  y: integer;
 end;
 
 var
 m: array[1..22] of array[1..80] of char;
 
 
procedure Show;
var
i,n: integer;
begin
ClrScr;
  for i:=1 to 22 do
  for n:=1 to 80 do  write(m[i,n]);
end;
 
 
var
i,n,t1,tng1,tt1,ttt: integer;
 sbi: TConsoleScreenBufferInfo;
sw:string;
key: char;
p1:COORD;
p2:COORD;
go1: boolean;
 
begin
go1:=false;
  { TODO -oUser -cConsole Main : Insert code here }
for i:=1 to 80 do m[1,i]:='0';
for i:=2 to 21 do
 begin
  m[i,1]:='0';
  m[i,80]:='0';
 end;
p2.x:=3;
p2.y:=20;
p1.x:=77;
p1.y:=20;
m[p2.y,p2.x]:='2';
m[p1.y,p1.x]:='1';
for i:=1 to 80 do m[22,i]:='0';
Show;
t1:=9;
tng1:=0;
ttt:=0;
While key<>#121 do
 begin
  if go1 then
   begin
    inc(tng1);
    if (tt1=t1) then
     begin
      if(tng1>10) then
       begin
        go1:=false;
        t1:=9;
        tng1:=0;
       end;
      end
     else
      tt1:=t1;
   end;
  key:=readkey;
  //Writeln(key,' ',ord(key));
 
  case ord(key) of
  37:
   begin
    go1:=true;
 
    inc(t1);
    if t1=10 then t1:=0;
    tt1:=t1;
    if t1<>0 then continue;
    WriteChrXY(p1.x,p1.y,' ');
    //m[p.x,p1.y]:=' ';
    p1.x:=p1.x-1;
    //m[p.y,p.x]:='1';
    WriteChrXY(p1.x,p1.y,'1');
    GotoXY(1,23);
 
   // ClrEol;
   end;
  38:
   begin
    WriteChrXY(p1.x,p1.y,' ');
    //m[p.x,p.y]:=' ';
    p1.y:=p1.y-1;
    //m[p.y,p.x]:='1';
    WriteChrXY(p1.x,p1.y,'1');
    GotoXY(1,23);
   // ClrEol;
   end;
  39:
   begin
    WriteChrXY(p1.x,p1.y,' ');
    //m[p.x,p.y]:=' ';
    p1.x:=p1.x+1;
    //m[p.y,p.x]:='1';
    WriteChrXY(p1.x,p1.y,'1');
    GotoXY(1,23);
   // ClrEol;
   end;
  40:
   begin
    WriteChrXY(p1.x,p1.y,' ');
    //m[p.x,p.y]:=' ';
    p1.y:=p1.y+1;
    //m[p.y,p.x]:='1';
    WriteChrXY(p1.x,p1.y,'1');
    GotoXY(1,23);
   // ClrEol;
   end;
  65:
   begin
    WriteChrXY(p2.x,p2.y,' ');
    //m[p.x,p1.y]:=' ';
    p2.x:=p2.x-1;
    //m[p.y,p.x]:='1';
    WriteChrXY(p2.x,p2.y,'2');
    GotoXY(1,23);
   // ClrEol;
   end;
  87:
   begin
    WriteChrXY(p2.x,p2.y,' ');
    //m[p.x,p.y]:=' ';
    p2.y:=p2.y-1;
    //m[p.y,p.x]:='1';
    WriteChrXY(p2.x,p2.y,'2');
    GotoXY(1,23);
   // ClrEol;
   end;
  68:
   begin
    WriteChrXY(p2.x,p2.y,' ');
    //m[p.x,p.y]:=' ';
    p2.x:=p2.x+1;
    //m[p.y,p.x]:='1';
    WriteChrXY(p2.x,p2.y,'2');
    GotoXY(1,23);
   // ClrEol;
   end;
  83:
   begin
    WriteChrXY(p2.x,p2.y,' ');
    //m[p.x,p.y]:=' ';
    p2.y:=p2.y+1;
    //m[p.y,p.x]:='1';
    WriteChrXY(p2.x,p2.y,'2');
    GotoXY(1,23);
   // ClrEol;
   end;
  end;
 end;
end.

не могу понять почему после нажатия он ожидает следующий ввод с клавиатуры и только тогда выполняет один раз цикл, и опять ждет


CRT32
http://rghost.ru/43226992
Ответить с цитированием
  #2  
Старый 22.01.2013, 15:54
my33oh my33oh вне форума
Новичок
 
Регистрация: 17.12.2012
Сообщения: 93
Репутация: -579
По умолчанию

зацени, эксклюзив

Последний раз редактировалось my33oh, 22.01.2013 в 17:58.
Ответить с цитированием
  #3  
Старый 22.01.2013, 16:16
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Заценил, но работает как то не корректно write он почему то как writeln делает например...
Ответить с цитированием
  #4  
Старый 22.01.2013, 17:11
my33oh my33oh вне форума
Новичок
 
Регистрация: 17.12.2012
Сообщения: 93
Репутация: -579
По умолчанию

Цитата:
Сообщение от ALexandr555
Заценил, но работает как то не корректно write он почему то как writeln делает например...
ну блин он 99г выпуска, поколдуй малясь
Ответить с цитированием
  #5  
Старый 22.01.2013, 17:40
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Да эт какой то сомнительный эксклюзив был)
Там еще косяков уйма
модуль я обычный оставил, а для клавиш нашел лучше альтернативу
GetAsyncKeyState()

отслеживает к тому же все нажатые

а вот нельзя ли в консольке убрать нижнее подчеркивание которое мигает?

Последний раз редактировалось ALexandr555, 22.01.2013 в 17:46.
Ответить с цитированием
  #6  
Старый 22.01.2013, 17:57
my33oh my33oh вне форума
Новичок
 
Регистрация: 17.12.2012
Сообщения: 93
Репутация: -579
По умолчанию

Цитата:
Сообщение от ALexandr555
а вот нельзя ли в консольке убрать нижнее подчеркивание которое мигает?
енто курсор чтоле ? покури SetConsoleCursorInfo
Ответить с цитированием
  #7  
Старый 22.01.2013, 18:11
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Код:
1
2
3
ConHandle := GetStdHandle(STD_OUTPUT_HANDLE);
CCI.dwSize:=1;
SetConsoleCursorInfo(ConHandle, CCI);
так помогло
CCI.bVisible:=false; почему то не хотел работать
Ответить с цитированием
  #8  
Старый 22.01.2013, 18:23
my33oh my33oh вне форума
Новичок
 
Регистрация: 17.12.2012
Сообщения: 93
Репутация: -579
По умолчанию

Цитата:
Сообщение от ALexandr555
Код:
1
2
3
ConHandle := GetStdHandle(STD_OUTPUT_HANDLE);
CCI.dwSize:=1;
SetConsoleCursorInfo(ConHandle, CCI);
так помогло
CCI.bVisible:=false; почему то не хотел работать
если сайз вне диапазона 1-100 то функция вообще не пашет, и если ты его не задавал естесно он был = 0 и функция ушла в игнор
Ответить с цитированием
  #9  
Старый 22.01.2013, 18:33
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

задавал с нулем, а вобще по умолчанию думал он true стоит
Ответить с цитированием
  #10  
Старый 22.01.2013, 18:44
my33oh my33oh вне форума
Новичок
 
Регистрация: 17.12.2012
Сообщения: 93
Репутация: -579
По умолчанию

Цитата:
Сообщение от ALexandr555
а вобще по умолчанию думал он true стоит
да не ,это же SETфункция что впихнеш то и пошлет
вобщем когда сайз 1-100 (это процент размера ячейки символа который заполняет курсор) то и визибл работает иначе "давай досвидания!"
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:49.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025