[delphi+ascii] lf bez cr jak zrobić ?? ;)

0

Line Feed
jak w aplikacji konsolowej pod delphi zrobić lf bez cr ??
cr=#13
lf=#10
mi przy wyrzuceniu na ekran #10 automatycznie przechodzi do poczatku wiersza

0

ale osso chodzi???

0

cr powrót karetki >> przesuwa kursor w konsoli do lewego brzegu
lf (nie pamietam) line feed >> przesuwa kursor linie nizej(teoretycznie) ponieważ wypisujac lf dodaje system cr jak zrocić aby tak nie robił ??

0

źle rozumujesz - crlf to znak końca lini ale tylko w windowsie - w linuxie jest (chyba) tylko lf a bodajrze w MacOS tylko cr (albo jakoś tak). W każdym bądz razie crlf to zaszłość po z przeszłości i jeśli chodzi o ekran to i cr i lf działa tak samo - przenosi kursor do nowej lini i ustawia go z lewej strony

0

ale w linuxie lamiac linie w c np musisz wpisac \n \0 oile dobrze pamietam a pod windom wystarczy \n
a jesli chodzi o delphi to #10 i #13 nie działaja tak samo sprawdzenie jest banalne
(write('tekst aby przesunac kursor w prawo',#10,'texy ktory powinienl byc ponizej',#13,'text od lewej');
powinno wyświetlić to tak :

tekst aby przesunac kursor w prawo
text od lewej                                 texy ktory powinienl byc ponizej

jesli cr=lf to wygladać powinnn tak:

tekst aby przesunac kursor w prawo
texy ktory powinienl byc ponizej
text od lewej

a wyglada (przynajjmniej u mnie)

tekst aby przesunac kursor w prawo
text od lewejwinienl byc ponizej
                 ^tu stoi kursor (pod i)

i tu moje pytanie czy jest jakiś sposób aby wydrukować lf BEZ cr np w drukarce odpowiada za to jeden kabelek tzn dodaje automatyczniedo cr lf ??
pozdr

0
coffeinka napisał(a)

a jesli chodzi o delphi to #10 i #13 nie działaja tak samo sprawdzenie jest banalne
(write('tekst aby przesunac kursor w prawo',#10,'texy ktory powinienl byc ponizej',#13,'text od lewej');
powinno wyświetlić to tak :

tekst aby przesunac kursor w prawo
text od lewej                                 texy ktory powinienl byc ponizej

jesli cr=lf to wygladać powinnn tak:

tekst aby przesunac kursor w prawo
texy ktory powinienl byc ponizej
text od lewej

a wyglada (przynajjmniej u mnie)

tekst aby przesunac kursor w prawo
text od lewejwinienl byc ponizej
                 ^tu stoi kursor (pod i)

ano rzeczywiście - tyle lat w nieświadomości żyłem :)

i tu moje pytanie czy jest jakiś sposób aby wydrukować lf BEZ cr np w drukarce odpowiada za to jeden kabelek tzn dodaje automatyczniedo cr lf ??

to będzie najprawdopodobniej (nie na 100% bo by trzeba się przyjrzeć bliżej procedurom write i writeln) jest spowodowane tym, że na drukarce możesz po prostu wysunąć papier nie ruszając głowicy, natomiast w konsoli jak zjedziesz linijkę niżej to kursor wraca do lewej strony bo dla niego tam kończy się ta linijka - żeby być gdzieś indziej niż z lewej strony musiał by "wydrukować" np. spacje

0

no cóż człowiek całe zycie sie uczy :) czyli zostaja mi wstawki w asm ??

0

Po co wstawki asma? Komu w Pascalu/Delphi asm potrzebny? To już chyba 5 post w tym tygodniu, gdzie autor myśli, że asm rozwiąże jego problemy.. "Bosze".. Ale wróćmy do tematu.

Po pierwsze: nie jest to kwestia Delphi tylko ogólnie Windows. Prosty przykład sprawdzenia, z użyciem czystego WINAPI:

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;
const
  text = 'tekst aby przesunac kursor w prawo'#10'text ktory powinien byc ponizej'#13'text od lewej';
var
  written:dword;
begin
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), PChar(text), strlen(text), written, nil);
readln;
end.

To jest kwestia specyfiki konsoli Windows. Z założenia działa to tak:
#13 - Carriage Return - powrót kursora do brzegu strony
#10 - Line Feed - przejście do nowej linii z powrotem kursora (w czasach MsDOS kursor nie wracał do brzegu, stąd od tego czasu stosowało się #13#10 razem; początkowy #13 był w najgorszym razie ignorowany, bo samo #10 też cofało kursor).

Dlatego #10 wystarczy, by przejść do nowej linii. Warto zaznaczyć, że jest to tylko specyfika konsoli, bo w trybie graficznym, na przykład okienka MessageBox mają już traktować #13 (CR) oraz #10 (LF) tożsamo - z dwoma wyjątkami: jeśli występuje #13#10 lub #10#13 traktowane jest to jako jeden znak #10.

Kiedyś w MSDN był o tym artykuł, ale nie wiem, czy na szybko teraz go znajdę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1