![]() |
Problem mit MessageBox
Hi,
ich will folgenden Text mit MessageBox ausgeben: 'Der angegebene User ('+CurSelUser+') wurde nicht gefunden.'. Was mache ich? Ich gebe folgenden Source ein:
Delphi-Quellcode:
EAccessViolation => Ende
MessageBox(hWnd, PChar('Der angegebene User ('+CurSelUser+') wurde nicht gefunden.'), 'Bla, bla', MB_OK or MB_ICONINFORMATION);
Need help! Bin kurz vor'm durchdrehen! Chris |
Moin Chris,
wie ist denn CurSelUser deklariert? Ansonsten sehe ich da nichts, was eine Möglichkeit eines Fehlers bietet. Oder hast Du MessageBox selber importiert, und stdcall weggelassen? |
Bei mir gehts. Schon "hwnd" gecheckt?
Scheib mal
Delphi-Quellcode:
davor.
if hWnd <> INVALID_HANDLE_VALUE then
|
hWnd wird keine EAccessViolation auslösen. Es gibt lediglich an welches fenster lahmgelegt wird. Du kannst da auch 0 übergeben und alles wird laufen.
|
Moin Zusammen,
ergänzend sei erwähnt: Wenn hwnd ein ungültiges Fensterhandle enthält, wird der Dialog gar nicht erst angezeigt. |
Hi,
soweit ich mich erinnern kann (bin derzeit in der Schule; kann somit nicht in den Source gucken) ist CurSelUesr als PWideChar oder String deklariert. Ist aber egal, was ich nehme. Wenn ich nicht "PChar(" schreibe, dann kommt der Compile-Error "Incompatible types "string" and "PAnsiChar". Problem ist, dass CurSelUser Buffer in einer SendMessage-Anweisung ist (siehe dazu Beitrag "Problem mit NetUserGetInfo"). Chris |
Deklarier den Buffer mal als array[0..255] of Char. Und dann sehen wir weiter. Wie ich die Benutzer-Infos bekomme habe ich ja gepostet. Aber hier noch mal:
Delphi-Quellcode:
0, weil wir gleich den ersten anzeigen wollen. Und dann geht es so weiter:
SendDlgItemMessage(hDlg, IDC_CB, CB_GETLBTEXT, 0, Integer(@szBuffer));
GetUserInfo(String(szBuffer));
Delphi-Quellcode:
procedure GetUserInfo(sUser: String);
var s : String; ui3 : Pointer; begin if sUser <> ''then begin if NetUserGetInfo(nil, PWideChar(WideString(sUser)), 3, ui3) = NERR_SUCCESS then begin s := String(PUserInfo3(ui3)^.usri3_name); SetDlgItemText(hApp, 103, @s[1]); |
So, nach einem erholsamen Schultag, gibt es folgendes zu bemerken:
1. CurSelUser ist ein String 2. Der gleiche Source wie oben 3. MessageBox nehme ich aus der Unit Windows und deklariere die Funktion/Prozedur nirgends, da bereits in Unit Windows drin 4. Fehlerausgabe: Zitat:
PS: Hotkey zum kopieren der aktuellen Fehlermeldung gefunden!!! *freu* PSS: @Luckie: Ich denke du bist im falschen Beitrag. ;) |
Nein bin ich nicht. CurSelUser ist doch der Buffer für die Listbox, der dann den Benutzer enthält oder? Und genau den sollst du wie beschrieben deklarieren. Damit du mit deinem PWideChar keien Probleme bekommst, habe ich dir gepoatet, wie ich dann weiter gemacht habe. Nämlich der entsprechende Prozedur den Parameter als String übergeben. Und dazu mußt du den Buff of Char mit String casten, damit alles sauber läuft.
Wenn CurSelUser ein String ist und da der gewählte Eintrag aus der Listbox rein soll, dann kann das nicht klappen. Du brauchst dafgür einen Zeiger und ein Zeichen-Array ist ein Zeiger ein simpler String aber nicht. Deswegen noch mal deklarier den Buffer als array[0..255] of Char. Dan bastelst du dir deine Message zusammen:
Delphi-Quellcode:
var
s : String; begin ... s := 'Blabal'+String(CurSelUser)+'Blubblub'; Messagebox(hWnd, pointer(s), ' Meine Nachri9cht', 0); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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