Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WideString in MessageBox ausgeben? (https://www.delphipraxis.net/75173-widestring-messagebox-ausgeben.html)

CodeX 15. Aug 2006 13:25


WideString in MessageBox ausgeben?
 
Ich würde gerne einen Text, der als WideString (wg. multilanguage) vorliegt, in einer MessageBox anzeigen.
Das Problem ist, dass ein PChar erwartet wird und ich es auch durch diverse Castings nicht geschafft habe, den Text korrekt darzustellen.
Kann jemand helfen?

Delphi-Quellcode:
var myTitle, myText : WideSTring;
//[...]
if Application.MessageBox( myText, myTitle, MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) = IDYES then
   //ja ...

_rEdoX 15. Aug 2006 13:30

Re: WideString in MessageBox ausgeben?
 
Hi, versuchs mal so :

Delphi-Quellcode:
PCHar(string(widestr))
greetz

Balu der Bär 15. Aug 2006 13:30

Re: WideString in MessageBox ausgeben?
 
Ganz einfach in nen PChar umwandeln. ;)

Delphi-Quellcode:
if Application.MessageBox(PChar(myText), PChar(myTitle), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) = IDYES then

Luckie 15. Aug 2006 13:35

Re: WideString in MessageBox ausgeben?
 
Warum nimmst du nicht die API Funktion MessageBoxW? Dann kann man den String auch noch lesen, wenn er ausgegeben wird.

CodeX 15. Aug 2006 13:38

Re: WideString in MessageBox ausgeben?
 
Beide Vorschläge führen aber dazu, dass die Zeichen, die nicht in String oder Char enthalten sind, verloren gehen (deshalb ja auch WideString).
Ich habe gerade festgestellt, dass "MessageBoxW" scheinbar existiert, aber wohl nicht dokumentiert ist. Ich werde das mal testen.
edit: Und wie ich sehe, meint Luckie das gleiche.

Luckie 15. Aug 2006 13:42

Re: WideString in MessageBox ausgeben?
 
Wozu Dokumentation? Die Parameter sind identisch mit der von MessageBox, bis auf den Unterschied, dass es eben Unicode-Zeichen sind.

Delphi-Quellcode:
var
  s: WideString;
begin
  s := 'Hello World';
  MessageBoxW(Handle, PWideChar(s), 'Titel', 0);

CodeX 15. Aug 2006 13:44

Re: WideString in MessageBox ausgeben?
 
So scheint das ganze zu funktionieren:
Delphi-Quellcode:
var myTitle, myText : WideString;
//[...]
if MessageBoxW(0, PWideChar(myText), PWideChar(myTitle), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) = IDYES then
"Application." musste weg und der erste Parameter musste ein Handle (hWnd : HWND) sein. Die 0 scheint zu gehen, ich hoffe, das passt so.

edit: @Luckie, naja, exakt gleich sind sie eben nicht. ;)

Bernhard Geyer 15. Aug 2006 13:46

Re: WideString in MessageBox ausgeben?
 
Zitat:

Zitat von CodeX
edit: @Luckie, naja, exakt gleich sind sie eben nicht. ;)

Sind sie schon. Du darfst jedoch nicht die Methode MessageBox der VCL-Klasse TApplication mit der Win32-API-Funktion vergleichen. Es gibt ja auch 'ne MessageBox-Funktion in der Win32-API.

Luckie 15. Aug 2006 13:50

Re: WideString in MessageBox ausgeben?
 
Ich habe auch nie von der Methode MessageBox von TApplication gesprochen, sondern von der API-Funktion MessageBox(W). Die Methode MessageBox von TApplication kapselt übrigens nur die entsprechende API-Funktion. Und hier ist die Dokumenattion: http://msdn.microsoft.com/library/de...messagebox.asp

BTW solltest du als Handle schon das Fenster angeben aus dem die Messagebox aufgerufen wird.

CodeX 15. Aug 2006 13:56

Re: WideString in MessageBox ausgeben?
 
Ihr habt ja Recht. Sorry und Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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