Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: rar Test_Cirylic_GUI_Win32.rar
(278.8 Kb, 23 просмотров)

Цитата Drongo:
В общем, вопрос с Кириллицей в WIN32 GUI приложениях отчасти решился переходом на C++ Builder 2009. »
Итак, отчаявшись найти решение, задал вопрос ещё на нескольких форумах. Вопросов было два:

1. Иногда при выполнении какой-либо операции в программе, нужно на метку (Label, GroupBox и т.д) вывести другой текст, не тот, который был изначально.
2. Сохранение русского текста содержащегося в Memo в файл, чтобы сохранился нормальный русский текст, а не знаки вопросов.

Первый вопрос:
1-е решение:
Добавляем параметр "L"
Код: Выделить весь код
...
   GroupBox1->Caption = L"Выбрали "+ ComboBox1->Text;;
   Button1->Caption = L"Вернуть";
...
2-е решение:
Немного сложнее, используем
reconst.pas

Код: Выделить весь код
unit ReConst;

interface

uses Windows;

resourcestring
  TEXTGroupBox1 = 'Выбрали';
  TEXTButton1 = 'Вернуть';
  TitleError = 'Внимание: Ошибка!';
  TEXTError1 = 'Неправильное значение!'; 
  TEXTError2 = 'Выберите пункт меню.'; 
//--------------------------------------------------
implementation

end.

ReConst.hpp

Как мне сказали, редактировать ReConst.hpp без смысла, т.к. Borland его генерирует по reconst.pas, но его нужно подключать:
Код: Выделить весь код
...
#include "ReConst.hpp"
...
Код: Выделить весь код
// CodeGear C++Builder
// Copyright (c) 1995, 2008 by CodeGear
// All rights reserved

// (DO NOT EDIT: machine generated header) 'Reconst.pas' rev: 20.00

#ifndef ReconstHPP
#define ReconstHPP

#pragma delphiheader begin
#pragma option push
#pragma option -w-      // All warnings off
#pragma option -Vx      // Zero-length empty class member functions
#pragma pack(push,8)
#include <System.hpp>	// Pascal unit
#include <Sysinit.hpp>	// Pascal unit
#include <Windows.hpp>	// Pascal unit

//-- user supplied -----------------------------------------------------------

namespace Reconst
{
//-- type declarations -------------------------------------------------------
//-- var, const, procedure ---------------------------------------------------
extern PACKAGE System::ResourceString _TEXTGroupBox1;
#define Reconst_TEXTGroupBox1 System::LoadResourceString(&Reconst::_TEXTGroupBox1)
extern PACKAGE System::ResourceString _TEXTButton1;
#define Reconst_TEXTButton1 System::LoadResourceString(&Reconst::_TEXTButton1)
extern PACKAGE System::ResourceString _TitleError;
#define Reconst_TitleError System::LoadResourceString(&Reconst::_TitleError)
extern PACKAGE System::ResourceString _TEXTError1;
#define Reconst_TEXTError1 System::LoadResourceString(&Reconst::_TEXTError1)
extern PACKAGE System::ResourceString _TEXTError2;
#define Reconst_TEXTError2 System::LoadResourceString(&Reconst::_TEXTError2)
}	/* namespace Reconst */
using namespace Reconst;
#pragma pack(pop)
#pragma option pop

#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif	// ReconstHPP
К проекту подключаем (Project -> Add to Project <Shift + 11>) - reconst.pas.

Файл .cpp

Код: Выделить весь код
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   GroupBox1->Caption = (UnicodeString)Reconst_TEXTGroupBox1;
   Button1->Caption = Reconst_TEXTButton1;
   Button2->Caption = Reconst_TEXTButton2;
   Label1->Caption = Reconst_TEXTLabel1;
   UnicodeString TextError = Reconst_TEXTError1 + "\n" + Reconst_TEXTError2;
   Application->MessageBox(TextError.w_str(), Reconst_TitleError.w_str(), MB_YESNO+MB_ICONWARNING);
}
...


Компилируем. Полный пример привожу в архиве. Среда разработки C++ Builder 2009


Второй вопрос:
Чтобы сохранить русский текст из Memo в файл и чтобы содержимое файла отображалось правильно, а не знаками ?????, нужно добавить второй параметр к функции SaveToFile("MyFile.txt", TEncoding::Unicode)
Код: Выделить весь код
...
   Memo1->Lines->SaveToFile("SaveFile.txt", TEncoding::Unicode);
...
Как мне сказали, нужно указывать вторым параметром соответствующую кодировку:
Код: Выделить весь код
TEncoding::Unicode
TEncoding::UTF8
TEncoding::Default
TEncoding::ASCII


Вопрос решён!!!

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 14-10-2009 в 14:39. Причина: Исправил...


Отправлено: 14:25, 14-10-2009 | #26