Ir ao conteúdo
  • Cadastre-se

Pascal - Dúvida no Gotoxy();


Visitante

Posts recomendados

Boa noite, gostava de saber como faço para meter um fim no GOTOXY() , por exemplo eu se meter o GOTOXY() a partir daqui o texto vai todo para aquela posição... Exemplo:
 

GOTOXY(2,2);Begin End;

 
(Sei que esse código não existe, é só para dar uma ideia do que estou a falar)
 
Fico à espera de resposta, obrigado! :cool:  

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

Vou tentar resumir o que entendo desse contexto...

 

O GotoXY(), se não me engano pertence a CRT (ou WinCRT), tem o objetivo apenas de deslocar o cursor para a coordenada especificada.. é análogo a deslocar um papel e posicionar onde vai sair a próxima letra numa máquina de escrever. Como você deve saber, a tela do Pascal (como normalmente são elas) é divida em colunas e linhas. Acho que o padrão é 80x25 (colunas x linhas).... ao dar por exemplo um GotoXY(10,3), simplesmente vai posicionar na coluna 10 da linha 3 e só.

 

Até ai acho que você já sabia, correto?

 

Então, tudo vai depender da necessidade. Se você quer imprimir na tela apenas um texto a partir da posição 2,2, basta imprimir o texto depois do comando e pronto.

 

Se por exemplo, você quer ficar imprimindo mais coisas nessa posição, basta chamado novamente o comando.. ex.:
 

GotoXY(2,2); writeln('Eu comecei a sair na coluna 2, linha 2');
Delay(500);
GotoXY(2,2); writeln('Após 500 milisegundos, eu também sai da a partir da coluna 2, linha 2 e acabei encobrindo o texto antigo');

Obs.: O comando não precisa ficar no lado, apenas deixo assim que fica mais sugestivo e organizado... o que separa os comandos é o ";".

 

Deu para entender?

 

O foco é entender que o GotoXY apenas descolar o cursor para a posição XY, e fim... o papel dele é apenas descolar... se der um ENTER, o cursos vai para "1,3"... etc...

 

Se quer por exemplo, "alinhar a partir da segunda coluna"...

GotoXY(2,2); writeln('Era uma vez...');
GotoXY(2,3); writeln('Bla bla bla bla');
GotoXY(2,4); writeln('flahfaf hffh feahf iafhaif haif');

Existem outros comandos relacionados a posicionamento:

 

WhereX - retorna a atual posição horizontal do cursor (coluna)

WhereY - retorna a atual posição vertical do cursor (linha)
 

Windows - cria uma janela (área de uso) dentro da janela principal. É necessária as coordenadas do "primeiro ponto acima e esquerda" e "último abaixo e a direita", ex.:

Window(25,8,38,20);

Uma ponta da janela tá no 25,8 e a outra no 38,20...

 

Daí, as coordenadas de posicionamento passam a ser dentro só dessa tela, ou seja, um GotoXY(3,7), seria a terceira coluna da linha sete dessa janela (e não mais da principal), entendeu?. Um ClrScr só vai limpar as coordenada dentro da janela.. etc.

 

Para fazer uma borda de um espaçamento para cada lado..., acho que seria algo assim:

Windows(2,2,79,24);

Tá dando para entender?

 

 

Outros comandos úteis... ClrSCr, TextColor, TextoBackGround etc

 

 

Então, vai depender do que você quer/precisa...

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Boa noite, agradeço o esforço por tentar me ensinar como funciona, mas isso eu já sei.. Acho que não me fiz bem entender..  Por exemplo: 

Gotoxy(1,1);
Write('Olá');   //Vai para a posição 1,1
Write('Adeus'); //Também vai para a posição 1,1..
//O que queria fazer era parar o gotoxy, uma vez usado ele aplica as mesmas coordenadas às outras linhas abaixo a não ser que eu introduza outro gotoxy, exemplo:
Gotoxy(1,1);
Write('Olá');  //Vai para a posição 1,1
Gotoxy(1,2); 
Write('Adeus'); //Vai para a posição 1,2

Cumprimentos.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá...

 

Eu ainda não entendi muito bem o que você quer... o seu código abaixo é o que (1) você quer ou o que (2) você acha que ocorre na realidade?

 

Em 30/05/2015 às 20:48, iAz0x disse:

Boa noite, agradeço o esforço por tentar me ensinar como funciona, mas isso eu já sei.. Acho que não me fiz bem entender..  Por exemplo: 


Gotoxy(1,1);
Write('Olá');   //Vai para a posição 1,1
Write('Adeus'); //Também vai para a posição 1,1

 

 

1) Se for o que você quer, no caso que imprima nas posições 1,1 para as duas linhas, seria análogo a:

Gotoxy(1,1);
Write('Olá');  //Vai para a posição 1,1
Gotoxy(1,1);
Write('Adeus'); //Também vai para a posição 1,1

Nesse caso, não vai funcionar! pois os comandos são executados em sequência, ou seja, na tela iria só aparecer o "Adeus". (na realidade imprimiria os 2, mas só ia dar tempo de ver o último, pois ele iria sobrescrever o primeiro.

 

 

 

2) Se for o que você acha que ocorre, então você ainda não entendeu como funciona o GotoXYSe não é isso, ignore o complemento..

Então, o GotoXY serve APENAS para posicionar após ser executado. Depois disso a vida continua normalmente..., ou seja, no seu código original o "Adeus" NÃO VAI imprimir na posição 1,1, mas sim onde o cursor estiver no momento em que o write é chamado... no caso, vai sair depois do "Olá" (já que foi a ultima coisa impressa na tela, e o cursor deverá está logo após a última letra), ficando algo como "OláAdeus".

 

***

 

Então, se deseja ficar imprimindo várias linhas na mesma posição, você tem duas* possibilidades:    (*pelo menos duas, no memento só sei/lembro essas)

 

1) chama novamente um GotoXY a cada vez que precisar imprimir na posição. Como no código do "1)";

ou

2) Cria uma janela que tem apenas uma linha. Tudo que imprimir vai sair nessa linha. Daí, para "sair da posição única", você criaria uma nova janela que voltaria a ter o tamanho original (ex.: 80x25   ou   80x40, ou outra que o Pascal estiver configurado).

 

 

Para ambos os casos (que colocar para sair do mesmo lugar), precisará tratar a "velocidade da impressão", como por exemplo com o Delay que citei na outra postagem..

 

 

 

 

PS: Basicamente depende da verdadeira intenção. Por exemplo, se quiser fazer uma especie de letreio que fica exibindo na mesma linha, daria para usar um laço de repetição e alguma estrutura que controlasse os textos...

for i:=1 to 10 do
  begin
  GotoXY(1,1);
  Delay(750);
  write(Frases[i]);
  end;

Por ai vai...

 

PS2: Outro exemplo, e ao mesmo tempo um dica seria criar um procedimento que já posiciona e imprime, algo como:

WriteXY(1,1,'Olá');
WriteXY(3,4,'Adeus');

* no caso uma procedure com 3 coordenadas: coluna, linha e texto. Ah! e WritelnXY para usar descendo uma linha após imprimir, é claro.

 

 

No aguardo

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...