CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - BCB6.0 -> XE2

BCB6.0 -> XE2

dział ogólny

BCB6.0 -> XE2

Nowy postprzez RoaDevil2 » czwartek, 22 marca 2012, 22:35

KOD cpp:     UKRYJ  
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TEdit *pole[255];
int b = 0;
//--------------------------------------------- dalej

b++;
pole[b] = new TEdit(this);
pole[b]->OnKeyPress = Edit9KeyPress; //<----- TUTAJ WYWALA BŁĄD
//-------------------------------------------------------



[BCC32 Error] Unit1.cpp(182): E2034 Cannot convert 'void (_fastcall * (_closure )(TObject *,char &))(TObject *,char &)' to 'TKeyPressEvent'



w BCB6.0 działało a w XE2 już nie :(
Co trzeba w tym poprawić?
Avatar użytkownika
RoaDevil2
Bladawiec
Bladawiec
 
Posty: 10
Dołączył(a): czwartek, 22 marca 2012, 16:56
Lokalizacja: Wrocław
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: XP, Win7 32, Win 7 64
Kompilator: BCB6, Builder XE2
Gadu Gadu: 2549159
    Windows 7Firefox

Re: BCB6.0 -> XE2

Nowy postprzez Cyfrowy Baron » czwartek, 22 marca 2012, 23:59

Podałeś za mało kodu, gdyż akurat te fragmenty w żaden sposób nie mogą prowadzić do błędu. Jak wygląda deklaracja i definicja funkcji Edit9KeyPress.



Przypuszczam, że przekopiowałeś zdarzenie OnKeyPress dla obiektu Edit9 ze środowiska BCB6 nie dokonując w nim żadnych zmian, a tymczasem począwszy od środowiska C++Builder 2009 zaszły spore zmiany i domyślnymi typami dla łańcuchów znaków nie są zmienne AnsiString i char, lecz UnicodeString i wchar_t.

W BCB6 masz prawdopodobnie tak skonstruowane to zdarzenie:
KOD cpp:     UKRYJ  
void __fastcall TForm1::Edit9KeyPress(TObject *Sender, char &Key)
{

}


Podczas gdy w nowszych wersjach to zdarzenie musi mieć taką konstrukcję:

w C++Builder 2010:
KOD cpp:     UKRYJ  
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, wchar_t &Key)
{

}


w C++Builder XE2:
KOD cpp:     UKRYJ  
void __fastcall TForm1::Edit9KeyPress(TObject *Sender, System::WideChar &Key)
{

}


Z tym, że w C++Builder XE2 zadziała również wersja z C++Builder 2010.

Ustaw w opcjach projektu mapowanie na wchar_t:

mapowanie.png




Pamiętaj jeszcze o tym, że jeżeli chcesz by program uruchamiał się na innych komputerach, to musisz go skompilować razem z bibliotekami, oraz o tym, że masz dwa tryby kompilacji Debug - dla testowania aplikacji, Release - ostateczna wersja aplikacji. W opcjach projektu możesz ustawić kompilowanie razem z bibliotekami dla obydwu trybów, ale dla trybu Debug lepiej nie.

kompilacja.png

options1.png

options2.png
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
RoaDevil2
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 XPFirefox

Re: BCB6.0 -> XE2

Nowy postprzez RoaDevil2 » piątek, 23 marca 2012, 00:47

Cyfrowy Baron napisał(a):Przypuszczam, że przekopiowałeś zdarzenie OnKeyPress dla obiektu Edit9 ze środowiska BCB6 nie dokonując w nim żadnych zmian, a tymczasem począwszy od środowiska C++Builder 2009 zaszły spore zmiany i domyślnymi typami dla łańcuchów znaków nie są zmienne [b]AnsiString ...


Dokładnie
Avatar użytkownika
RoaDevil2
Bladawiec
Bladawiec
 
Posty: 10
Dołączył(a): czwartek, 22 marca 2012, 16:56
Lokalizacja: Wrocław
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: XP, Win7 32, Win 7 64
Kompilator: BCB6, Builder XE2
Gadu Gadu: 2549159
    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 5 gości