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

Problem z MessageBox - C++ Builder

Object Storage Arubacloud
0 głosów
2,453 wizyt
pytanie zadane 21 grudnia 2015 w C i C++ przez pietrek98 Początkujący (430 p.)

Po zapisaniu tego warunku:

if(Application->MessageBox("Utworzyć nowy plik?", "Potwierdź",
								MB_YESNOCANCEL | MB_ICONQUESTION) == IDYES)

(najnowszy) C++ Builder wywala błąd "MessageBoxW is not a member of 'TApplication'.

Co jest nie tak?

2 odpowiedzi

+1 głos
odpowiedź 21 grudnia 2015 przez jeremus Maniak (59,720 p.)

spróbuj użyć tej funkcji z uchwytem NULL

czyli :

if(MessageBox(NULL,"Utworzyć nowy plik?", "Potwierdź",
                                MB_YESNOCANCEL | MB_ICONQUESTION) == IDYES)

 

komentarz 21 grudnia 2015 przez pietrek98 Początkujący (430 p.)
Teraz wywala dwa:

- 'Cannot convert char const[20] to const wchar_t*'

-'Type mismatch in parameter lptext (wanted const wchar_t, got const char *)'
komentarz 21 grudnia 2015 przez jeremus Maniak (59,720 p.)
nie pokazujesz kodu z którym masz kłopot , ale domyślam się że użyłeś zmiennej AnsiString  lptext jako parametru MessageBox

musisz zrobić tak :

lptext.c_str()
komentarz 21 grudnia 2015 przez pietrek98 Początkujący (430 p.)

Nie utworzyłem takiego ansistringa. Cały kod:

//---------------------------------------------------------------------------

#include <fmx.h>
#pragma hdrstop

#include "notatnik.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
#pragma resource ("*.SmXhdpiPh.fmx", _PLAT_ANDROID)
#pragma resource ("*.XLgXhdpiTb.fmx", _PLAT_ANDROID)
#pragma resource ("*.NmXhdpiPh.fmx", _PLAT_ANDROID)

TForm1 *Form1;

AnsiString nazwa = "";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OtworzClick(TObject *Sender)
{
	if(Open->Execute())
	{
		try
		{
		PoleT->Lines->LoadFromFile(Open->FileName);
		nazwa = Open->FileName;
		}

		catch(...)
		{
		ShowMessage("Nie można wczytać pliku.");
		}
	}

}
//---------------------------------------------------------------------------
void __fastcall TForm1::ZapiszClick(TObject *Sender)
{
	if(nazwa != "")
		PoleT->Lines->SaveToFile(nazwa);

	else
		Form1->Zapisz_jakoClick(MainMenu1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Zapisz_jakoClick(TObject *Sender)
{
	if(Save->Execute())
	{
		try
		{
		PoleT->Lines->SaveToFile(Save->FileName);
		nazwa = Save->FileName;
		}
		catch(...)
		{
		ShowMessage("Zapis zakończył się niepowodzeniem.");
		}
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NowyClick(TObject *Sender)
{

	if(MessageBox(NULL,"Utworzyć nowy plik?", "Potwierdź",
								MB_YESNOCANCEL | MB_ICONQUESTIONr) == IDYES)
	{
	nazwa = "";
	PoleT->Lines->Clear();
	}
}
//---------------------------------------------------------------------------

 

komentarz 21 grudnia 2015 przez jeremus Maniak (59,720 p.)
Dziwne. Środowisko.? Ogonki ?

U kolegi, który widze odpisał  i u mnie działa wszystko
komentarz 21 grudnia 2015 przez pietrek98 Początkujący (430 p.)
Ogonków nie używam, spróbowałem utworzyć nowy projekt, ale w nim też nie działa. Może jakiejś biblioteki nie załączam?
komentarz 21 grudnia 2015 przez jeremus Maniak (59,720 p.)
domyślnie od windowsem jest tak :

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
komentarz 22 grudnia 2015 przez pietrek98 Początkujący (430 p.)
edycja 22 grudnia 2015 przez pietrek98

Wyczytałem, że w nowszych c++ builderach funkcja MessageBox przyjmuje argumenty innego typu, niż w starszych i trzeba było je skonwertować. Ostatecznie zadziałał ten kod:

if(MessageBox(NULL, L"Utworzyć nowy plik?", L"Potwierdź",
								MB_YESNOCANCEL | MB_ICONQUESTION) == IDYES)

Dzięki.

0 głosów
odpowiedź 21 grudnia 2015 przez juriiw Gaduła (3,470 p.)
edycja 21 grudnia 2015 przez juriiw

Wkleiłem Twój pierwszy fragment (bez NULLa) do Buildera...

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if (Application->MessageBox("Utworzyć nowy plik?", "Potwierdź",
                                MB_YESNOCANCEL | MB_ICONQUESTION) == IDYES)
    {
      ShowMessage("dziala!");
    }
}

...i u mnie działa

komentarz 25 kwietnia 2019 przez Olbit Nowicjusz (240 p.)
edycja 25 kwietnia 2019 przez Olbit

C++ Builder 10.3 Community Edition

U mnie działa coś takiego:

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

Nie wiem co te "L" oznacza.

A tak na marginesie przydałby się kurs na Embarcadero C++ Builder 10.3 Community Edition.

Podobne pytania

0 głosów
1 odpowiedź 717 wizyt
pytanie zadane 2 marca 2017 w C i C++ przez Marchewka900 Bywalec (2,970 p.)
0 głosów
1 odpowiedź 137 wizyt
pytanie zadane 4 lipca 2018 w Android, Swift, Symbian przez Partyjny Obywatel (1,170 p.)
0 głosów
0 odpowiedzi 145 wizyt
pytanie zadane 27 maja 2017 w C# przez sharkus101 Początkujący (330 p.)

92,620 zapytań

141,474 odpowiedzi

319,815 komentarzy

62,004 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...