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

Problem z MessageBox - C++ Builder

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
2,746 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ź 890 wizyt
pytanie zadane 2 marca 2017 w C i C++ przez Marchewka900 Bywalec (2,970 p.)
0 głosów
1 odpowiedź 157 wizyt
pytanie zadane 4 lipca 2018 w Android, Swift, Symbian przez Partyjny Obywatel (1,170 p.)
0 głosów
0 odpowiedzi 156 wizyt
pytanie zadane 27 maja 2017 w C# przez sharkus101 Początkujący (330 p.)

93,191 zapytań

142,206 odpowiedzi

322,042 komentarzy

62,518 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 3053p. - dia-Chann
  2. 2998p. - Łukasz Piwowar
  3. 2993p. - Łukasz Eckert
  4. 2970p. - CC PL
  5. 2930p. - Tomasz Bielak
  6. 2907p. - Łukasz Siedlecki
  7. 2890p. - rucin93
  8. 2584p. - Adrian Wieprzkowicz
  9. 2536p. - Mikbac
  10. 2485p. - Marcin Putra
  11. 2461p. - Michał Telesz
  12. 2418p. - Michal Drewniak
  13. 2156p. - Anonim 3619784
  14. 1733p. - rafalszastok
  15. 1650p. - Mariusz Fornal
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...