Okienko systemowe MessageBox

0

W Lazarusie jeżeli do treści kontrolki MessageBox wstawię wartość liczbową z konwersją na string to wyświetla tylko pierwszą literę 'Z'

Application.MessageBox(PChar('Zwiększono kwotę zaliczki. Dodatkowy wpływ do kasy: '+CurrToStr(ZalEdit-Zaliczka)+'zł'),'Zamówienia  - zaliczka', MB_OK or  MB_ICONINFORMATION);   

Jeżeli usunę tą wartość liczbową CurrToStr(ZalEdit-Zaliczka) wyświetlany jest cała treść.
Może zna ktoś rozwiązanie tego problemu.

0
procedure TForm1.Button1Click(Sender: TObject);
var
  ZalEdit: Currency = 450.00;
  Zaliczka: Currency = 100.00;
begin
  Application.MessageBox(PChar('Zwiększono kwotę zaliczki. Dodatkowy wpływ do kasy: ' + CurrToStr(ZalEdit - Zaliczka) + 'zł'), 'Zamówienia  - zaliczka', MB_OK or MB_ICONINFORMATION);
end;

messagebox.png

Czym jest ten ZalEdit w Twoim kodzie?

0

Czym jest ten ZalEdit w Twoim kodzie?

ZalEdit to zmienna Currency (wartość edytowanej zaliczki).
To chyba coś w ustawieniach samego Lazarusa (tylko co ?) albo Windowsa 10 bo u mnie taka treść jak w załączniku :(

0

A jak wrzucisz tekst do zmiennej typu String i jej użyjesz w wywołaniu metody to też tak się dzieje?

0
furious programming napisał(a):

A jak wrzucisz tekst do zmiennej typu String i jej użyjesz w wywołaniu metody to też tak się dzieje?

Tak ze zmienną typu String taka sama sytuacja.

1

Sprawdź w takim razie co zwraca sama funkcja CurrToStr. Skoro bez niej działa normalnie, to coś jest z nią nie tak.

0
furious programming napisał(a):

Sprawdź w takim razie co zwraca sama funkcja CurrToStr. Skoro bez niej działa normalnie, to coś jest z nią nie tak.

Problem jest z PChar(). Treść w TLabel też jest błędnie wyświetlana jeżeli usunę PChar w TLabel jest ok:

Label1.Caption:='Zwiększono kwotę zaliczki. Dodatkowy wpływ do kasy: ' +CurrToStr(ZalEdit-Zaliczka_)+ 'zł';                     

natomiast MessageBox wymaga w skrócie mówiąc typu Pchar

fglowna.pas(5224,120) Error: Incompatible type for arg no. 1: Got "UnicodeString", expected "PChar"

Można to czymś zastąpić albo przekonwertować inaczej ?

1

A skąd Ci się tam UnicodeString wziął, skoro typ String domyślnie to zwykły AnsiString?

Skoro tak, to rzutuj na PWideChar lub PUnicodeChar.

0
furious programming napisał(a):

A skąd Ci się tam UnicodeString wziął, skoro typ String domyślnie to zwykły AnsiString?

Skoro tak, to rzutuj na PWideChar lub PUnicodeChar.

.... No i dobre pytanie o UnicodeString :) kodowanie strony było UTF-8 z BOM zmieniłem na UTF-8 i z PChar działa poprawnie

0

Huh? Sądziłem, że może używasz przełącznika {$MODESWITCH UNICODESTRINGS} i to dlatego masz problem z niechcianymi unikodowymi ciągami. W każdym razie domyślne kodowanie kodu źródłowego to UTF8 bez znacznika i z takiego sam korzystam, dlatego mój przykład kilka postów wyżej zadziałał bez problemu.

No nic – dobrze wiedzieć. ;)

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