Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit Message Box-Umwandlung (https://www.delphipraxis.net/130810-problem-mit-message-box-umwandlung.html)

Mysterio08 13. Mär 2009 15:55


Problem mit Message Box-Umwandlung
 
Guten Tag,
ich bins mal wieder. Eigentlich eine einfache Sache: Ich habe einen Wert errechnet und will diesen nun in einer MessageBox ausgeben lassen; ich habe folgenden Code geschrieben:
Delphi-Quellcode:
procedure TForm1.Button_BezahlenClick(Sender: TObject);
begin
  Application.MessageBox ('Sie müssen ' + PChar(Summe) + ' € bezahlen', 'Information', MB_ICONINFORMATION)
  //Summe wurde als Double deklariert
end;
Was mache ich denn falsch, denn HIER steht:

Delphi-Quellcode:
PChar(s)
Nur, wenn ich einen Wert errechnen möchte, kann ich ja nicht PChar nehmen, denn ich dachte, mit diesen Werten kann man Zeichen aufnehmen (ähnlich wie String??), oder? - Ich hab nämlich noch gar nichts mit PChar zu tun gehabt.

Danke schonmal und
mfg.

Bernhard Geyer 13. Mär 2009 15:58

Re: Problem mit Message Box-Umwandlung
 
Der gesamte String ist muß als PChar genommen werden:

Delphi-Quellcode:
procedure TForm1.Button_BezahlenClick(Sender: TObject);
var
  s: String;
begin
  s := 'Sie müssen ' + Summe + ' € bezahlen'
  Application.MessageBox (PChar(s), 'Information', MB_ICONINFORMATION)
  //Summe wurde als Double deklariert
end;

Luckie 13. Mär 2009 16:02

Re: Problem mit Message Box-Umwandlung
 
Wenn Summe als Double deklariert wurde, muss die dan nnicht noch in einen String konvertiert werden?

Mysterio08 14. Mär 2009 07:55

Re: Problem mit Message Box-Umwandlung
 
Zitat:

Zitat von Luckie
Wenn Summe als Double deklariert wurde, muss die dan nnicht noch in einen String konvertiert werden?

Nein, das geht bei MessageBoxen nicht! Da wird der Typ PChar verlangt:
Delphi-Quellcode:
function MessageBox(Text, Caption: PChar; Flags: Word): Integer;

Zitat:

Zitat von Bernhard Geyer
Der gesamte String ist muß als PChar genommen werden:

Delphi-Quellcode:
procedure TForm1.Button_BezahlenClick(Sender: TObject);
var
  s: String;
begin
  s := 'Sie müssen ' + Summe + ' € bezahlen'
  Application.MessageBox (PChar(s), 'Information', MB_ICONINFORMATION)
  //Summe wurde als Double deklariert
end;

Nur wenn ich Summe als String deklariere, kann ich ja nicht mit ihr rechnen, oder?
/Edit
Jetzt hab ich's gerafft! ;D
Funktioniert einwandfrei, danke

jaenicke 14. Mär 2009 07:59

Re: Problem mit Message Box-Umwandlung
 
Trotzdem musst du die Zahl in einen String umwandeln.
Delphi-Quellcode:
Application.MessageBox(PChar('Sie müssen ' + Format('%.2f', [Summe])
  + ' € bezahlen'), 'Information', MB_ICONINFORMATION or MB_OK);
oder
Delphi-Quellcode:
Application.MessageBox(PChar('Sie müssen ' + CurrToStrF(Summe, ffFixed, 2)
  + ' € bezahlen'), 'Information', MB_ICONINFORMATION or MB_OK);

turboPASCAL 14. Mär 2009 08:03

Re: Problem mit Message Box-Umwandlung
 
Delphi-Quellcode:
var
  Summe: Single;

//...

Application.MessageBox(PCHAR(Format('Sie müssen %0.2f € bezahlen', [Summe])), 'Information',MB_ICONINFORMATION or MB_OK);
Ist liederleserlicher;)

jaenicke 14. Mär 2009 08:05

Re: Problem mit Message Box-Umwandlung
 
Wobei statt Single oder Double auch direkt der Datentyp Währung eine Idee wäre, Currency gibt es nämlich auch noch als Datentyp.

Luckie 14. Mär 2009 10:08

Re: Problem mit Message Box-Umwandlung
 
Zitat:

Zitat von Mysterio08
Zitat:

Zitat von Luckie
Wenn Summe als Double deklariert wurde, muss die dan nnicht noch in einen String konvertiert werden?

Nein, das geht bei MessageBoxen nicht! Da wird der Typ PChar verlangt:

Das ist klar. Aber er baut ja in s seine Zeichenkette zusammen und da muss er Summe erst in einen String umwandeln, um die Zeichenkette so zusammenbauen zu können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz