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

Delphi Sources



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

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

Код:
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
По умолчанию

Код:
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
Код:
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, время: 07:34.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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