Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

FreePascal - Wyświetlanie liczby WORD w oknie MessageBox

18 Nov 2012 16:36 942 2
  • Home appliances specialist
    Chciałem w programie FPC z elementami języka DELPHI wyświetlić w okienku MessageBox pewien komunikat z liczbą WORD. Okazało się, że nie jest to takie proste, bo zmienna musi być typu CHAR. Więc dokonałem konwersji z WORD na CHAR poleceniem CHR. Program się skompilował, ale po uruchomieniu wyskakuje RunTime Error 201 - czyli niewłaściwy typ tablicy.
    Nawet jak zmienną WORD zamienię na INTEGER, to nic to nie zmienia.

    Normalnie zmienna WORD w programie liczy ilość indeksów w pliku, po czym ilość indeksów ma być wyświetlona w okienku. Normalnie w samym Pascalu i kompilacja w TP7 przechodzi, ale nowe systemy nie pozwalają otwierać plików 16 bitowych, a i wygląd jest dość archaiczny w owych czasach.

    Może ktoś podpowiedzieć co można zrobić?
    Z braku czasu na razie nie chciałbym pisać od nowa programu w samym DELPHI, no chyba, że to nieuniknione.
    [30.03.2021, darmowy webinar] Nowoczesna diagnostyka maszyn, monitorowanie i przewidywanie awarii. Zarejestruj się
  • Moderator of Programming
    Po pierwsze, Word w Pascalu ma 2 bajty, natomiast typ Char, w zależności od kompilatora i jego wersji od 1 do 2 bajtów, w zależności czy kompilator jest "Unicode ready" czy nie.
    Jeżeli chcesz wyświetlić jakąkolwiek informację w MessageBox, to raczej należy ją podać jako PChar a nie Char.
    Co za tym idzie, proponuję zastosować taką składnię :
    Code: delphi
    Log in, to see the code

    Funkcja IntToStr jest charakterystyczna dla Celphi, ale na pewno jest jakiś jej odpowiednik we FP. Można spokojnie skorzystać z Pascal-owej funkcji VAL.
  • Home appliances specialist
    Dzięki.

    Aby to zadziałało musiałem w programie zadeklarować moduł SYSUTILS.

    Potem pomęczyłem się z dzieleniem (INTEGER musiałem przekształcić na SINGLE i potem zastosowałem ROUND by wyświetlić część całkowitą wyniku z dzielenia).