![]() |
|
[XP] Polskie znaki w Win32API - Wersja do druku +- Ultima Forum (https://forum.ultimateam.pl) +-- Dział: RPG Maker (/Forum-RPG-Maker) +--- Dział: Wsparcie (/Forum-Wsparcie) +--- Wątek: [XP] Polskie znaki w Win32API (/Thread-XP-Polskie-znaki-w-Win32API) |
Polskie znaki w Win32API - dawidpieper - 02-10-13 19:47 Witajcie! Piszę ten temat, gdyż nigdzie nie mogę znaleźć odpowiedzi na pytanie: Jak obsłużyć polskie znaki dla bibliotek *.dll, *.lib i *.so z poziomu RGSS. Wcześniej pisałem w tym celu osobny program w C++, ale teraz muszę użyć ruby'ego. Najpierw - tydzień temu - postanowiłem odłożyć to pytanie, ale dzisiaj sytuacja się powtarza, chodź problem jest nieco inny. Z tej przyczyny zapytam. Problemem pierwszym było wyświetlenie informacji w MessageBoxu. Zrobiłem to tak: Kod: tresc = "Dostępna jest nowa wersja gry: " + $nowa_wersja[1] + "." + $nowa_wersja[2] + "." + $nowa_wersja[3] + ". Czy chcesz ją teraz pobrać i zainstalować? Pobranie zostanie wykonane automatycznie przez tą aplikację."Problemem drugim było odczytanie informacji przez syntezator: Kod: saapi = Win32API.new("screenreaderapi", "sayString", ['p','i'], 'v')Niestety w obu przypadkach tekst jest wyświetlany bez polskich znaków. W C++ zrobiłbym to poprzez dodanie konwersji 'L' przed stringiem, ale to nie działa. Nie działa też funkcja (PCHAR(Utf8ToSysy)) . W obydwu przypadkach pojawia się błąd podczas interpretacji. Z góry bardzo dziękuję za pomoc Dawid Pajper Pieper RE: Polskie znaki w Win32API - Ayene - 04-10-13 00:34 To chcesz użyć Ruby, czy RGSS? Bo jednak jest względna różnica. W Ruby, z tego co wiem, trzeba zaimplementować Unicode. Kod: $KCODE = 'u'RE: Polskie znaki w Win32API - dawidpieper - 05-10-13 14:29 Witam! Jako, że nazwa działu to "rpg maker", piszę o RGSS'sie zamiennie używając jego nazwy oraz ruby. Mimo to dziękuję za pomoc, zobaczę czy uda się dołączyć jcode.rb do projektu rpg maker. Napiszę czy się udało. PZDR DP @EDIT Niestety nie ma tego modułu w ruby 1.9.3 RE: Polskie znaki w Win32API - Ayene - 14-10-13 08:16 Jeśli zatem potrzebujesz wyświetlić wiadomość w RGSS... nie lepiej użyć komendy: Kod: print(*arg)RE: Polskie znaki w Win32API - dawidpieper - 14-10-13 19:52 Nie koniecznie, chyba, że istnieje taki sposób wyświetlenia printu, że pojawią się opcje typu: anuuj, ponów próbę, ignoruj, tak, nie itp. Takie bowiem funkcje ma mój skrypt. Przykładowo: Kod: mb = Win32API.new("user32", "MessageBoxA", [i','p','p','i'], 'i')Wyświetli informacje o nowej wersji z opcjami tak oraz nie. Jeśli użytkownik kliknie tak, zmienna odp będzie zawierać liczbę 6, w przeciwnym wypadku 7. Print, z tego co mi wiadomo, nie jest wstanie wyświetlić innych przycisków oprócz OK. Zastanawiałem się, czy nie użyć Kod: MessageBoxWKod: MessageBoxAJak mówiłem znalazłem też taki skrypt w internecie: Kod: mb = Win32API.new("user32", "MessageBoxA", ['i','p','p','i'], 'i')Kod: mb = Win32API.new("user32", "MessageBoxA", [L'i',L'p',L'p',L'i')Wolałbym jednak tego uniknąć, gdyż moja gra już ma więcej plików .exe i nie chcę zawieszać systemu. PZDR DP RE: Polskie znaki w Win32API - Ayene - 14-10-13 22:06 A spróbuj tego: Kod: to_char = Win32API.new("kernel32", "MultiByteToWideChar", 'ilpipi', 'i') RE: Polskie znaki w Win32API - dawidpieper - 15-10-13 19:10 Bardzo dziękuję, zaraz sprawdzę czy działa, chodź teoretycznie powinno. Próbowałem konwertować tekst w samej bibliotece dll, nie wpadłem na pomysł (*), by to zrobić w samym ruby'm. Napiszę czy zadziałało. Pozdrawiam Dawid Pieper PS. Czy ktoś wie jak usunąć komunikat: "script is changing"? W resourcach nic nie znalazłem, a dekompilacja pliku "game.exe" też nic nie dała. Może zdekompilować RGSS104E.dll? Wiem tylko, że RGSS został napisany częściowo w delphi, a częściowo w C++. Pytam o to, gdyż nie mogę użyć Graphics.update w poniższym zadaniu: Kod: url_dll = Win32API.new("url", 0, 0, 0)Niestety podczas pobierania gra się wstrzymuje, a po pobraniu widzę okienko ze znienawidzonym przeze mnie komunikatem "SCRIPT IS CHANGING". Chyba pozostaje tylko zewnętrzna aplikacja (jak mówiłem wolę tego uniknąć) oraz wielowątkowość. Nie wiem jednak jak przetworzyć BeginThread w RGSS'sie tym bardziej, że nie wiem jak widziane są definicje przez winapi. Z góry dziekuję. @EDIT Skrypt działa, był tylko jeden błąd: w = to_char.call(utf8, 0, text, text.size, b, b.size/2) Nie wiem na czym polegał błąd, napisałem linijkę od początku i działa. Musiałem też usunąć spacje w pustych linijkach, gdyż odczytywał je (interpreter) jako zmienne. Nie wiem dlaczego wcześniej tak nie było. Pojawiają się jednak polskie litery, efekt osiągnąłem, bardzo dziękuję i pozdrawiam. DP |