Okienko systemowe MessageBox

Odpowiedz Nowy wątek
2019-04-14 18:30
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.

edytowany 1x, ostatnio: furious programming, 2019-04-14 20:15

Pozostało 580 znaków

2019-04-14 20:20
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?


edytowany 2x, ostatnio: furious programming, 2019-04-14 20:21

Pozostało 580 znaków

2019-04-14 21:39
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 :(

edytowany 1x, ostatnio: furious programming, 2019-04-14 22:43

Pozostało 580 znaków

2019-04-14 22:45
0

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


edytowany 1x, ostatnio: furious programming, 2019-04-14 22:46

Pozostało 580 znaków

2019-04-15 08:04
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.

Pozostało 580 znaków

2019-04-15 08:57
1

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


Pozostało 580 znaków

2019-04-15 10:32
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 ?

edytowany 1x, ostatnio: furious programming, 2019-04-15 10:40

Pozostało 580 znaków

2019-04-15 10:39

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.


edytowany 3x, ostatnio: furious programming, 2019-04-15 10:44

Pozostało 580 znaków

2019-04-15 11:18
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

Pozostało 580 znaków

2019-04-15 11:40
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ć. ;)


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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