MessageBox - Problemy

dział ogólny

Re: MessageBox - Problemy

Nowy postprzez Cyfrowy Baron » piątek, 30 października 2009, 17:28

Poszukaj w pliku pomocy. Ja nie mogę pomóc, gdyż korzystam z C++ Builder 2007.
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
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez Witold » sobota, 31 października 2009, 11:06

pitek3010 napisał(a):Problem z Application->MessageBox jest rozwiązany trzeba wstawić dwa razy L tylko w tedy wyskakują duże okna dlatego używam MessageBox.
A moje pytanie o zmienną w MessageBox było po to żeby wyeliminować te duże okna i tyle.


Application->MessageBox() wywołuje ::MessageBox() więc "duże okna" chyba nie są z tego powodu.

pitek3010 napisał(a):Niestety w przypadku mojego Znajdź mam dalej duże okna bo nie wiem czy da się zastosować zmienną w MessageBox.


Możesz ułożyć komunikat dla MessageBox'a w zmiennej UnicodeString msg; potem wstawić to do MessageBox'a przez msg.t_str();

napisałem cos takiego, ale nie jestem tego pewien:
Kod: Zaznacz cały
///---------------------------------------------------------------------------
void __fastcall TForm4::Button1Click(TObject *Sender)
{
  static const wchar_t * NIE_ZNALEZIONO = L"Nie można odnaleźć \"%s\" ";
  static const wchar_t * ZNALEZIONO = L"Odnaleziono szukany tekst \"%s\", "
                                      L"Kolumna: %d Wiersz: %d";

  UnicodeString msg;


  msg.sprintf(NIE_ZNALEZIONO, LabeledEdit3->Text);
  MessageBox (NULL, msg.t_str() ,TEXT("Znajdź"),  MB_ICONINFORMATION);

  msg.sprintf(ZNALEZIONO, LabeledEdit3->Text, fc.Col, fc.Row);

  MessageBox (NULL, msg.t_str() ,TEXT("Znajdź"),  MB_ICONINFORMATION);

  msg.sprintf(ZNALEZIONO, LabeledEdit3->Text, fc.Col, fc.Row);
  Application->MessageBox(msg.c_str(), L"Info...", MB_ICONINFORMATION);
}
//---------------------------------------------------------------------------
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez Pitek » sobota, 31 października 2009, 16:08

Je ! Dzięki Witold wszystko działa tylko tam troszke sobie musiałem podedytować ale jest ok dzięki mam tylko małe pytanko do tego. W momencie gdy klikne Znajdź a pole z tekstem jest puste to wyskakuje mi takie coś ["(NULL)"] da sie to zamienić na puste czyli tak -> [""] ??
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez Cyfrowy Baron » sobota, 31 października 2009, 16:54

Jakie to wszystko skomplikowane! Czy w C++ Builder 2010 naprawdę trzeba tak się nakombinować, zęby wyświetlić zwykły komunikat. Wydaje mi się, że musi istnieć jakiś prostszy sposób.

Może tak:
Kod: Zaznacz cały
Application->MessageBox(UnicodeString("Treść komunikatu.\nzłamana linia").t_str(), UnicodeString("Tytuł okna").t_str(), MB_OK | MB_ICONINFORMATION);


Patrząc na kod Witold'a wydaje mi się, że można też ta;
Kod: Zaznacz cały
Application->MessageBox(TEXT("Treść komunikatu.\nzłamana linia"), TEXT("Tytuł okna"), MB_OK | MB_ICONINFORMATION);


a z dodawaniem zawartości kontrolek, np.Edit1:
Kod: Zaznacz cały
Application->MessageBox(TEXT( ("Pole Edit1 zawiera tekst: \"" + Edit1->Text + "\"").c_str() ), TEXT("Tytuł okna"), MB_OK | MB_ICONSTOP); // może .t_str() zamiast .c_str()


Czy coś z tego co podałem wyżej działa?
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
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez Pitek » sobota, 31 października 2009, 17:09

Działa ostatnie po małej modyfikacji heh znowu to L i musi być .c_str()
Kod: Zaznacz cały
Application->MessageBox(TEXT( ("Nie można odnaleźć teksu: \„" + LabeledEdit3->Text + "\”").c_str() ),
TEXT(L"Znajdź"), MB_OK | MB_ICONINFORMATION);

Nie rozumie tylko po co są te ukośniki ?

O nie teraz się zorientowałem że po wstawieniu dwa razy tego kodu wtedy gdy znaleziono i nie znaleziono jest to samo duże okna oh te L :evil:
Jeżeli tego naprawde sie nie da to pozostane przy sposobie Witolda chyba że ktoś jeszcze potrafi pomóc, jak nie to proszę na odpowidz co z tym "null"
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez Witold » sobota, 31 października 2009, 20:20

pitek3010 napisał(a):Jeżeli tego naprawde sie nie da to pozostane przy sposobie Witolda chyba że ktoś jeszcze potrafi pomóc, jak nie to proszę na odpowidz co z tym "null"


Pomyliłem się powinno być: LabeledEdit3->Text.c_str() nie LabeledEdit3->Text przy msg.sprintf( dla "%s" . Napisałem Ci: możesz ułożyć komunikat dla MessageBox'a w zmiennej UnicodeString msg; potem wstawić to do MessageBox'a przez msg.t_str(); nie musiałeś kopiować tego całego sposobu który podałem z sprintf , mogłeś posklejać całość jak wcześniej przez "+":


Kod: Zaznacz cały
  UnicodeString msg;
  msg = L"Nie można odnalźć " + LabeledEdit3->Text;
  MessageBox (NULL, msg.t_str() ,TEXT("Znajdź"),  MB_ICONINFORMATION);
//itd.


lub bez dodatkowego UnicodeString’a (jeśli uważasz że to czytelne):

Kod: Zaznacz cały
MessageBox (NULL, ("Nie można odnalźć " + LabeledEdit3->Text).t_str() ,TEXT("Znajdź"),  MB_ICONINFORMATION);


Cyfrowy Baron napisał(a):Może tak:


Jeżeli dobrze zrozumiałem pitek3010 chciał użyć ::MessageBox nie Application->MessageBox.
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez Cyfrowy Baron » sobota, 31 października 2009, 20:23

Na pewno istnieje prosty sposób, ale trzeba poszukać w pliku pomocy.
Co do ukośników to pozwalają wprowadzić cudzysłowie: "\"" zauważ, że wprowadzam cudzysłów miedzy dwa inne cudzysłowy. Cudzysłów jest znakiem zastrzeżonym, więc by go wprowadzić trzeba użyć właśnie ukośnika. Tak się robi w przypadku znaków zastrzeżonych. Można też użyć go do łamania lini w komunikacie: "Pierwsza linia\nDruga linia\nTrzecia linia"
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
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez polymorphism » sobota, 31 października 2009, 20:41

pitek3010 napisał(a):Działa ostatnie po małej modyfikacji [...]

Ten zapis:
Kod: Zaznacz cały
TEXT(("Nie można odnaleźć teksu: \„" + LabeledEdit3->Text + "\”").c_str())

jest błędny. Skompiluje się tylko w wersji ANSI, a to dlatego, że TEXT w tym trybie nic nie robi. To makro ma zastosowanie tylko do literałów tekstowych.
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
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez Witold » sobota, 31 października 2009, 21:16

Cyfrowy Baron napisał(a):Na pewno istnieje prosty sposób, ale trzeba poszukać w pliku pomocy.


możesz spróbować, jeśli chcesz:
http://docwiki.embarcadero.com/RADStudi ... B%2B_Index

Z helpa:
Kod: Zaznacz cały
::MessageBox(0, _TEXT("The message"),   _TEXT("The caption"), MB_OK);


Widać makro to _TEXT lub _T, nie TEXT (które jest chyba z windows’a) – działają chyba tak samo.
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez Pitek » sobota, 31 października 2009, 23:41

Dziękuję Witold Ten sposób jest prosty i działa.
Kod: Zaznacz cały
MessageBox (NULL, ("Nie można odnalźć " + LabeledEdit3->Text).t_str() ,TEXT("Znajdź"),  MB_ICONINFORMATION);
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez Cyfrowy Baron » niedziela, 1 listopada 2009, 08:49

Ja już się pogubiłem w tym co pisze pitek3010.

Napisałeś:
Kod: Zaznacz cały
MessageBox (NULL, ("Nie można odnalźć " + LabeledEdit3->Text).t_str() ,TEXT("Znajdź"),  MB_ICONINFORMATION);


Użyłeś makra TEXT nie _TEXT, poza tym użyłeś funkcji .t_str(), a wcześniej pisałeś że nie działa. Czy TREŚĆ_KOMUNIKATU i TYTUŁ_OKNA to wartości różnych typów, gdyż raz używasz .t_str() a drugim razem TEXT.

Na stronie podanej przez Witold jest kod:

Kod: Zaznacz cały
::MessageBox(0, _TEXT("The message"),
    _TEXT("The caption"), MB_OK);


więc jak to jest z tym makrem TEXT, czy _TEXT.

Skoro działa z funkcją MessageBox, to powinno tak samo działać z funkcją Application->MessageBox.

Czy na tym forum nie ma doświadczonego programisty, który korzysta już z C++Builder 2009 lub 2010 i mogłby ustalić jednoznacznie jak to jest z konwersja zmiennej typu AnsiString czy też char do UnicodeString?!
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
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez polymorphism » niedziela, 1 listopada 2009, 10:27

Widać makro to _TEXT lub _T, nie TEXT (które jest chyba z windows’a) – działają chyba tak samo.

TEXT, _TEXT i _T spełniają dokładnie tę samą funkcję (dwa ostatnie zdefiniowane są w tchar.h).
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
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez duf » niedziela, 1 listopada 2009, 10:36

Korzystam z BDS2009 i tam w Project->Options jest pierwsza zakładka Directories and Conditionals. Mam ustawienie _TCHAR maps to char
Avatar użytkownika
duf
Intelektryk
Intelektryk
 
Posty: 175
Dołączył(a): czwartek, 9 października 2008, 13:02
Podziękował : 17
Otrzymał podziękowań: 2
System operacyjny: Windows 10
Kompilator: XE8
Gadu Gadu: 0
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez Cyfrowy Baron » niedziela, 1 listopada 2009, 11:12

Korzystam z BDS2009 i tam w Project->Options jest pierwsza zakładka Directories and Conditionals. Mam ustawienie _TCHAR maps to char


Rozwiń tą myśl. Co z tego wynika?
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
    NieznanyNieznana

Re: MessageBox - Problemy

Nowy postprzez Pitek » niedziela, 1 listopada 2009, 12:38

Do jasnej ciasnej wcześniej pisałem że to nie działa ale z .c_str() a Witold napisał to z .t_str() a to zadziałało i jest proste więc nie wiem po co to roztrząsać ?
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Poprzednia stronaNastępna strona

  • 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 4 gości