CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Kurs

Kurs

dział ogólny

Kurs

Nowy postprzez Manianass » piątek, 6 maja 2016, 21:24

Czy toś wie gdzie mogę znaleźć kuse do Buildera xe6 bo szukam i nic tylko wyskakuje do builder 6 a kod z 6 nie działa na xe6 (cześć działa )
ale jak chce wyświetlić komunikat
Kod: Zaznacz cały
ShowMessage("to działa");

to ok działa ale ja wyświetlić taki komunikat ?? bo w xe6 nie działa znaczy może brakuje jakiejś biblioteki ale ja nie wiem

Kod: Zaznacz cały
MessageBox(NULL," >>> Alarm! <<<","Alarm!" ,MB_OK | MB_TOPMOST);


a różnica jest taka ze jak nie jest aktywy nasz program to nie widzimy komunikatu np. czas miną a ten drugi wyskakuje zawsze na 1 planie wiec do widzimy zawsze.
Avatar użytkownika
Manianass
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): środa, 11 listopada 2015, 00:45
Lokalizacja: Lubin
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Builder C++
Gadu Gadu: 0
    Windows 7Firefox

Re: Kurs

Nowy postprzez Cyfrowy Baron » sobota, 7 maja 2016, 09:43

Różnica polega na tym, że BC6 używa domyślnie AnsiString, a BCXE6 UnicodeString. Kursu nie widziałem, ale szybko się przestawisz, tylko musisz poćwiczyć. Co do problemu z MessageBox:

KOD cpp:     UKRYJ  
MessageBox(NULL, L" >>> Alarm! <<<", L"Alarm!", MB_OK | MB_TOPMOST);


L - ponieważ funkcja MessageBox oczekuje tutaj argumentów typu char, a ty przekazujesz tam UnicodeStrong, trzeba więc dokonać konwersji w char za pomocą literału L. Tak samo byłoby z funkcją MessageBoxW, która oczekuje argumentu typu wchar_t, literał L dokonałby konwersji właśnie na ten typ. Literał L koduje znaki do 16 bitów, zamiast 8.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Manianass
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Kurs

Nowy postprzez polymorphism » sobota, 7 maja 2016, 10:17

Gwoli ścisłości. L to nie jest literał, który "dokonuje konwersji". To po prostu prefiks, który wstawiony przed literałem oznacza, że ów literał jest zakodowany przy użyciu znaków szerokich (wchar_t), co w skrócie oznacza, że zakodowany jest w unikodzie. Od C++11 są jeszcze dwa prefiksy - u (UCS-2) i U (UCS-4).

Co do głównego wątku. Problem polega na tym, że nowe wersje Buildera, w przeciwieństwie do tych starszych, domyślnie używają unikodowej wersji WinAPI, więc taki MessageBox oczekuje łańcucha o znakach szerokich (wide character string).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Kurs

Nowy postprzez Cyfrowy Baron » sobota, 7 maja 2016, 11:49

Dokładnie tak.

polymorphism napisał(a):że ów literał jest zakodowany przy użyciu znaków szerokich (wchar_t), co w skrócie oznacza, że zakodowany jest w unikodzie


Z tym, że funkcja MessageBoxW oczekuje argumentów typu wchar_t, a mimo to literał musi być poprzedzony prefixem L.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Kurs

Nowy postprzez polymorphism » sobota, 7 maja 2016, 12:32

Nie rozumiem tego "a mimo to". Prefiks musi być, ponieważ używasz "szerokiej" wersji funkcji.

KOD cpp:     UKRYJ  
MessageBox(NULL, TEXT(" >>> Alarm! <<<"), TEXT("Alarm!"), MB_OK | MB_TOPMOST);
MessageBoxA(NULL, " >>> Alarm! <<<", "Alarm!", MB_OK | MB_TOPMOST);
MessageBoxW(NULL, L" >>> Alarm! <<<", L"Alarm!", MB_OK | MB_TOPMOST);
 
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Kurs

Nowy postprzez Cyfrowy Baron » poniedziałek, 9 maja 2016, 08:31

Już wiem co mi się "pomieszało". Założyłem, że MessageBox oczekuje takich samych argumentów jak MessageBoxA podczas gdy są to dokładnie te same argumenty co przy MessageBoxW, bo domyślnie Unicode.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 13 gości

cron