Toon posts:

[Delphi] MultiLine ShowMessage

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zat eerder altijd in C++ te programmeren, maar moet nu even uitwijken naar de dephi variant, maar heb een vraag over ShowMessage.

In C++ Builder,
ShowMessage("Hallo Rik\n we gaan afsluiten");
\n = een enter

in delphi is het geen \n maar wat wel??

Verwijderd

ShowMessage("Hallo Rik"+#13#10+"we gaan afsluiten");

Verwijderd

Topicstarter
#13#10 is dan een enter begrijp ik?
Beetje vreemd, maar wel lekker

  • Hertog
  • Registratie: Juni 2002
  • Laatst online: 20:53

Hertog

Aut bibat, aut abeat

13 en 10 zijn de asci-codes voor carriage return en line feed, en (onder windows) is dat een nieuwe regel.

"Pray, v. To ask that the laws of the universe be annulled in behalf of a single petitioner, confessedly unworthy." --Ambrose Bierce, The Devil's Dictionary


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Hertog schreef op 18 december 2002 @ 10:03:
13 en 10 zijn de asci-codes voor carriage return en line feed, en (onder windows) is dat een nieuwe regel.
Not to mention fout en overbodig. DOS gebruikt de klassieke CRLF, maar onder Windows volstaat een LF. Enkel de 10 is dus genoeg.

Gebruik van CR wordt over het algemeen oogluikend toegestaan (ergo genegeerd), maar zal bij bepaalde constructies die DrawText (in)direct gebruiken krijg je er als default char vierkantjes voor omdat de betreffende charset 13 als unknown char definieert.

Professionele website nodig?


  • Hertog
  • Registratie: Juni 2002
  • Laatst online: 20:53

Hertog

Aut bibat, aut abeat

DOS gebruikt de klassieke CRLF, maar onder Windows volstaat een LF. Enkel de 10 is dus genoeg.
Volgens mij klopt dat niet. Unix-systemen gebruiken, als ik het goed heb, alleen LF en als je een unix-bestand in windows opent zie je juist blokjes, volgens mij omdat windows met alleen een LF niets doet.
Volgens mij is de vbNewLine in Visual Basic ook een CRLF
Googlen op 'crlf windows\ levert onder andere:
The problem is that unix expects linebreaks in the 'LF' format (\n), while Windows expects them in the 'CRLF' format (\r\n).

[ Voor 4% gewijzigd door Hertog op 18-12-2002 11:29 . Reden: Hoe schrijf je quote? ;) ]

"Pray, v. To ask that the laws of the universe be annulled in behalf of a single petitioner, confessedly unworthy." --Ambrose Bierce, The Devil's Dictionary


  • CyeZ
  • Registratie: September 2001
  • Laatst online: 25-08 08:09

CyeZ

Vroem vroem!!!

curry684 schreef op 18 december 2002 @ 10:40:
[...]

Not to mention fout en overbodig. DOS gebruikt de klassieke CRLF, maar onder Windows volstaat een LF. Enkel de 10 is dus genoeg.

Gebruik van CR wordt over het algemeen oogluikend toegestaan (ergo genegeerd), maar zal bij bepaalde constructies die DrawText (in)direct gebruiken krijg je er als default char vierkantjes voor omdat de betreffende charset 13 als unknown char definieert.
Dat is dan toch echt een fout van die charsets, want ascii 13 hoort geen zichtbaar character te geven normaliter. De reden dat de #13#10 gebruikt wordt is om op die manier (min of meer) compatible te zijn met zowel unix als macintosh systemen. Op unix systemen wordt alleen #10 gebruikt, en dat volstaat meestal in windows ook prima. Echter op een macintosh wordt #13 standaard gebruikt voor newlines en zal alleen een #10 dus niet correct werken.

Wel is het zo dat dit in delphi niet zo heel erg storend is, aangezien voor zover ik weet er geen macintosh ondersteuning is en je hier dus nooit last van zult hebben.

[18:54] <Prammenhanger> |HunterPro|eet
[18:55] <Prammenhanger> lijkt best op
[18:55] <Prammenhanger> |HunterProFeet


  • Hertog
  • Registratie: Juni 2002
  • Laatst online: 20:53

Hertog

Aut bibat, aut abeat

CyeZ schreef op 18 december 2002 @ 12:52:
[...]

Op unix systemen wordt alleen #10 gebruikt, en dat volstaat meestal in windows ook prima.
Volgens mij klopt dat toch echt niet hoor. Als je een unix-bestand op een windows-systeem opent krijg je geen mooie newlines maar een blokje aan het eind van iedere regel.
Dat komt, dacht ik, doordat het unix-newlines en geen windows-newlines zijn.
Een vriend van me heeft een programmatje geschreven dat #10 om kan zetten in #10#13 en dan werkt het wel. Zie ook de vorige post van mij trouwens...

"Pray, v. To ask that the laws of the universe be annulled in behalf of a single petitioner, confessedly unworthy." --Ambrose Bierce, The Devil's Dictionary


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Hertog schreef op 18 december 2002 @ 11:29:
Volgens mij klopt dat niet. Unix-systemen gebruiken, als ik het goed heb, alleen LF en als je een unix-bestand in windows opent zie je juist blokjes, volgens mij omdat windows met alleen een LF niets doet.
Volgens mij is de vbNewLine in Visual Basic ook een CRLF
Googlen op 'crlf windows\ levert onder andere:
Txt-files != API.

Probeer het maar eens gewoon:
C++:
1
MessageBox(NULL, "This\nis\na\nmultiline\nmessagebox", "Blabla", 0);

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Openingspost was dus:
Verwijderd schreef op 18 december 2002 @ 09:51:
In C++ Builder,
ShowMessage("Hallo Rik\n we gaan afsluiten");
\n = een enter

in delphi is het geen \n maar wat wel??
\n is gewoon C++ voor insert ascii 10 hier. Need I say more?

Professionele website nodig?


Verwijderd

Delphi (6) zelf gebruikt in o.a. datum-format-functies, wordwrap-functies e.d. de constante sLineBreak om een linebreak in te voegen. Wat blijkt? In system.pas:
code:
1
2
const
  sLineBreak = {$IFDEF LINUX} #10 {$ENDIF} {$IFDEF MSWINDOWS} #13#10 {$ENDIF};
Pagina: 1