• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed MessegeBox w C++ builder pokazuje błąd mimo napisania funkcji według instrukcji od Borland

Cloud VPS
0 głosów
265 wizyt
pytanie zadane 17 sierpnia 2020 w C i C++ przez IgorK Nowicjusz (220 p.)
zamknięte 18 sierpnia 2020 przez IgorK

Koystam z c++ buildera 10.3 i próbuje wywołać funkcje MessegeBox jak w załączniku

void __fastcall TForm1::Nowy1Click(TObject *Sender)
{
	if(Application -> MessageBox("Czy na pewno utworzyć nowy plik?","Potwierdź",MB_YESNOCANCEL | MB_ICONQUESTION)== IDYES )
	{
	   Tresc->Lines->Clear();
	   nazwapliku="";
	}
}

Ale nie wiem czemu wywala ten sam błąd 

cały czas zaznacza tylko tego pierwszego stringa "Czy na pewno utworzyć nowy plik?"

 

Tutaj link do instrukcji: http://www.functionx.com/bcb/topics/msgbox.htm

komentarz zamknięcia: Problem rozwiązany
1
komentarz 17 sierpnia 2020 przez VBService Ekspert (256,600 p.)
edycja 17 sierpnia 2020 przez VBService

Spróbuj zapisać bez polskich "ogonków".

"Czy na pewno utworzyc nowy plik?","Potwierdz"

... albo, sprawdź temat kodowania ANSI, UNICODE (polskie "ogonki" nie są standardowymi kodami, w niektórych kompilatorach c++ trzeba dodać flagę np.:
-ansi itp.) ...

Zapisywanie łańcuchów, jak i pojedynczych znaków jako stałe w kodzie C++ wymaga dodatkowego zachodu - dopisywania przed nimi literki "L". Ponieważ char pozostaje typem o długości jednego bajtu, do dyspozycji mamy też nowy typ znakowy: wchar_t. To również jest słowo kluczowe C++ i oznacza ono znak 2-bajtowy, a w praktyce jest liczbą 16-bitową bez znaku, jak unsigned short (w odróżnieniu od char, który w Visual C++ domyślnie jest liczbą ze znakiem).

// Tak było w ANSI
char ZnakA = 'A';
const char *LancuchA = "Ala ma kota.";

// Tak jest w Unicode
wchar_t ZnakW = L'A';
const wchar_t *LancuchW = L"Ala ma nowego kota.";

// Tak zapisujemy znaki specjalne
char ZnakSpecialnyA = '\xA7';
wchar_t ZnakSpecjalnyW = L'\u8BCD';
komentarz 18 sierpnia 2020 przez IgorK Nowicjusz (220 p.)
Usuwałem polskie znaki, ale nic to nie dawało. Natomiast dopisanie tego L zadziałało. Dzięki

1 odpowiedź

+1 głos
odpowiedź 17 sierpnia 2020 przez Official gildin Bywalec (2,820 p.)
wybrane 18 sierpnia 2020 przez IgorK
 
Najlepsza

Nie używam buildera ale spróbuj to 

if(Application -> MessageBox(L"Czy na pewno utworzyć nowy plik?",L"Potwierdź",MB_YESNOCANCEL | MB_ICONQUESTION)== IDYES )

 

komentarz 18 sierpnia 2020 przez IgorK Nowicjusz (220 p.)
A co zmienia to L?
komentarz 18 sierpnia 2020 przez IgorK Nowicjusz (220 p.)
Zadziałało, dzięki
komentarz 18 sierpnia 2020 przez VBService Ekspert (256,600 p.)
1
komentarz 18 sierpnia 2020 przez VBService Ekspert (256,600 p.)

@IgorK, 

Tabela 6. Typy łańcuchów znaków

... Korzystanie z std::wstring niewiele różni się przy tym od używania jego bardziej oszczędnego pamięciowo kuzyna. Musimy tylko pamiętać, żeby poprzedzać literką L wszystkie wpisane do kodu stałe tekstowe, które mają być trzymane w zmiennych typu std::wstring . W ten sposób bowiem mówimy kompilatorowi, że chcemy zapisać dany napis w formacie Unicode. Wygląda to choćby tak:

std::wstring strNapis = L "To jest tekst napisany znakami dwubajtowymi" ;

 

 

Podobne pytania

0 głosów
1 odpowiedź 395 wizyt
0 głosów
1 odpowiedź 287 wizyt
pytanie zadane 8 czerwca 2017 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
+3 głosów
1 odpowiedź 3,737 wizyt

93,464 zapytań

142,459 odpowiedzi

322,730 komentarzy

62,844 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...