Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Открыть новую тему     Написать ответ в эту тему

CRIT1987

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, кто может помогите! Такой вопрос: есть дерево Treeview,дочерние узлы. Мне нужно сделать копирование  узлов или узла при нажатой клавиши(shift или ctrl) из одного каталога в другой...Перемещение я сделал драг энд дроп.. а как копирование хз..привидите плиз код примерный..

Всего записей: 7 | Зарегистр. 07-08-2008 | Отправлено: 08:04 08-08-2008
Varyag_Nord



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здрастье.
Есть такой код

Код:
 
AnsiString Patch;
Patch = ExtractFilePath(ParamStr(0)); // получаем путь к каталогу программы
if (!FileExists(Patch+"options.ini"))
  {
      ShowMessage("Создаем");
      TIniFile *Ini = new TIniFile(Patch+"options.ini");
      //Ini->WriteString("Edits","Edit1",Form7->Edit1->Text); // создаем файл настроек
      //Ini->UpdateFile();
  }
 

Хочу создать ини файл в директории с прогой. Сообщение о том, что файл создается я получаю, а самого файла в папке я не вижу. Может, кто подскажет, что не так?

Всего записей: 9 | Зарегистр. 05-06-2008 | Отправлено: 14:52 13-08-2008 | Исправлено: Varyag_Nord, 14:55 13-08-2008
IgorXI



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как можно перекрыть метод VisibleChanging() у TCustomForm в классе-наследнике, при попытке перекрыть пишет ошибку
  [C++ Error] From_CustomMDIChild.h(56): E2113 Virtual function '_fastcall TCustomMDIChild::VisibleChanging()' conflicts with base class 'TCustomForm'

Всего записей: 126 | Зарегистр. 16-09-2003 | Отправлено: 04:29 14-08-2008
Tantos



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Varyag_Nord

Код:
 
//...
Ini->WriteString("Edits","Edit1",Form7->Edit1->Text);
Ini->UpdateFile();
delete ini;
 

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 05:53 14-08-2008
IgorXI



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня вопрос, можно ли создать экземпляр формы по имени класса, которое хранится в строке, с передачей параметра Owner?

Всего записей: 126 | Зарегистр. 16-09-2003 | Отправлено: 11:04 19-08-2008
spike



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как связать С++ Builder с Visual SourceSafe ?

Всего записей: 693 | Зарегистр. 23-10-2003 | Отправлено: 11:37 05-09-2008
kot3

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это у меня глюк или бага в RAD2009?
 
String s = String("что угодно здесь");
// понятно что по умолчанию String == UnicodeString, он так и создается в отладчике это хорошо видно
printf("%s", s.c_str());
// все вроде бы хорошо строка преобразовалась в char* и напечаталась правильно.
 
Так вот если посмотреть на на содержимое строки s (например в отладчике или просто начать с ней работать как с UnicodeString, то обнаруживаем, что внутренний буфер тоже преобразован в char*, хотя его содержимое интерпретируется как UnicodeString. Со всеми вытекающими отсюда последствиями.
Кстати, в справке тоже тут ошибка UnicodeString::c_str() по ней возвращает тип wchar_t*, а реально возвращает char*.
 
Кто что может сказать?

Всего записей: 430 | Зарегистр. 15-12-2005 | Отправлено: 17:50 07-10-2008
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kot3
wchar_t* возвращает метод w_str()
 
Я не знаю с какого бодуна они так сделали, но это неправильно, т.к. при переходе на юникодность в RS2009 надо просматривать весь код и править c_str() в w_str().
 
Добавлено:
spike
Есть хороший адд-он VssConneXion. Живёт здесь - http://www.epocalipse.com/index.htm
Но я бы посоветовал поставить TortoiseSVN. Будет тебе счастье независимое ни от какой среды.

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 08:06 08-10-2008
kot3

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
Мне одно непонятно зачем при этом буфер строки то портится?

Всего записей: 430 | Зарегистр. 15-12-2005 | Отправлено: 18:46 08-10-2008
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kot3
У меня работает всё нормально, для анг, рус и азерб. языков.
И я использую конкретно UnicodeString или wstring.

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 08:31 09-10-2008
portolomeo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день, объясните, пожалуйста -  
 
заранее скажу что в С++ опыта практически нет.
Так вот, сейчас работаю над одной программой для автоматизации одного процесса, основная суть которой преобразование данных.  
 
При этом исходные данные содержатся в текстовом файле в таком формате:  
  1 6.100E-0003 5.515E+0002 4.574E+0000 2.785E+0001 6.191E-0003 6.315E+0003
  2 8.700E-0003 5.479E+0002 4.546E+0000 2.853E+0001 7.393E-0003 3.510E+0003
  3 1.010E-0002 5.459E+0002 4.567E+0000 2.847E+0001 7.966E-0003 2.744E+0003
  ...
Здесь - 7 упорядоченных столбцов.  
Преобразовать эти данные как надо я наверное смогу, а вот как прийти к этому этапу?
 
Т.е. сейчас есть (создана) специальная форма (аналог ноутпад), которая открывает текстовый файл. А как научить прогу:  
а) работать с открытым файлом, т.е. обращаться к ней,  
б) как выделять нужные мне отрезки строк для дальнейшего преобразования?
 
суть - эти 5.459E+0002 преобразовать в целые числа, здесь это = 545.
помогите, плз...

Всего записей: 12 | Зарегистр. 17-05-2007 | Отправлено: 15:44 10-10-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
portolomeo
формат файла всегда одинаков?
количество строк наперёд известно?

Цитата:
 б) как выделять нужные мне отрезки строк для дальнейшего преобразования?  

т.е. читать любую строку в файле по выбору?
 
может тебе хватит возможности прочитать весь файл целиком в массив?
 
чем больше информации о проблеме, тем вероятнее помощь...

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 16:27 10-10-2008
portolomeo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
формат файла всегда одинаков, количество строк всегда по разному - в диапазоне 50-70.  
 
как я написал выше - суть - это преобразование выражении *.***Е+000* в целые числа, здесь - по принципу - последняя звездочка (*) после 000 - это показатель десятичности начальной части выражения, т.е. *.*** (например, 2.847E+0001 = это 28, а там где минус 2.847E-0001 = это 0,2).  
 
При этом преобразовать нужно не все выражения, а лишь расположенные в 3, 4 и 6 столбцах (если не учитывать столбец порядковых номеров строк) - вот что я имел ввиду под  

Цитата:
б) как выделять нужные мне отрезки строк для дальнейшего преобразования?
 
 

Цитата:
может тебе хватит возможности прочитать весь файл целиком в массив?
 
 
я тоже думаю что лучше через массив - получается это 3-хмерная матрица?

Всего записей: 12 | Зарегистр. 17-05-2007 | Отправлено: 16:49 10-10-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
portolomeo

Цитата:
это преобразование в целые числа, (например, 2.847E-0001 = это 0,2)

это как?

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 17:56 10-10-2008 | Исправлено: akaGM, 18:47 10-10-2008
portolomeo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM  
 
т.е. 2.847E-0001 - это значение одного параметра, весь файл состоит из выражении такого вида.  
задача - представить эти выражения в "человеческом" виде, по формуле:  
число после 3-х нулей - здесь это 1 - это показатель десятичности первой части выражения 2.847 - т.е. нужно умножить (если +) или разделить (если -) на 10.  
Если после нулей стоит 2 - значит нужно умножить (если +) или разделить (если -) на 100.  
Пример:  
 
2.847E-0001 = 0,2
2.847E-0002 = 0,02
2.847E+0001 = 28
2.847E+0001 = 284
 
т.е. три нуля там есть всегда, и обычно после нулей либо 1, либо 2, либо 3.
и в основном +.  
 
мне представляется, что программа читает файл, выбирает нужные отрезки строк (наши выражения) - записывает их в 3-хмерный (наверное) массив.  
Затем к элементам этого массива применяется указанная процедура и новые значения записываются в новый массив...

Всего записей: 12 | Зарегистр. 17-05-2007 | Отправлено: 18:52 10-10-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
portolomeo
блин...

Цитата:
2.847E-0001 = 0,2  

какое на хрен 0.2 _целое число_?!
 
на, разбирайся, работай с массивами a[]  и ia[]
 

Код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
#define DATAFILE "file.dat"
#define MAX_NUM 70
 
void main(void) {
  int n, i;
  long double a1[MAX_NUM], a2[MAX_NUM], a3[MAX_NUM], a4[MAX_NUM], a5[MAX_NUM], a6[MAX_NUM];
  int num[MAX_NUM];
  int ia3[MAX_NUM], ia4[MAX_NUM], ia6[MAX_NUM];
  FILE *fp;
 
  fp = fopen(DATAFILE, "r");
  i = 0;
  while (!feof(fp)) {
    fscanf(fp, "%d %lE %lE %lE %lE %lE %lE\n", &num[i], &a1[i], &a2[i], &a3[i], &a4[i], &a5[i], &a6[i]);
    i++;
  }
  n = i;
  printf("num = %d\n", n);
  fclose(fp);
 
// long double --> int conversion
  for (i = 0; i < n; i++) {
    ia3[i] = (int)floorl(a3[i]);
    ia4[i] = (int)floorl(a4[i]);
    ia6[i] = (int)floorl(a6[i]);
 
    printf("#%d %d %d %d\n", num[i], ia3[i], ia4[i], ia6[i]);
  }
}

 

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 18:57 10-10-2008
portolomeo2

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
sory, ясно что это не целое, пишу целое т.к. в основном выражения из (+)-ов и соотв. идет умножение.  
спасибо!, ща покопаюсь.

Всего записей: 2 | Зарегистр. 10-10-2008 | Отправлено: 19:38 10-10-2008
VerZer

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не изобретайте велосипед, в VCL есть готовые средства перевода строковый представлений в число: StrToFloat(..), String::ToDouble()
 
примерная обработка представленного выше формата:

Код:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TStringList *sl = new TStringList;
 
    sl->Delimiter = ' ';
    sl->DelimitedText = Memo1->Text;
 
    Memo1->Lines->Add("--------------------------------------");
 
    DecimalSeparator = '.';
 
    double d;
 
    for (int i = 0; i < sl->Count; i++)
    {
        d = sl->Strings[i].ToDouble();
 
        Memo1->Lines->Add(d);
    }
 
    delete sl;
}
//---------------------------------------------------------------------------

на форме Memo1, заполненный, как показано здесь

Всего записей: 22 | Зарегистр. 28-07-2007 | Отправлено: 15:48 12-10-2008 | Исправлено: VerZer, 16:08 12-10-2008
vadfromnu

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне нужна функция, которая меняет порядок байт в целочисленной 4 байтовой переменной. Т.е. нужно чтобы следующий код работал:
int __fastcall InvertByteOrder(int val)
{
asm
    {
    bswap eax
    ret
    }
}
Однако билдер приписывает в начало функции:
push ebp
mov ebp,esp
push ecx
mov [ebp-$04],eax
Можно ли как-нибудь сказать билдеру, что функция полностью пишется мною и от него ничего приписывать не требуется.

Всего записей: 7 | Зарегистр. 14-08-2008 | Отправлено: 05:53 28-10-2008
64bit

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
int __declspec(naked) InvertByteOrder(int val) // без __fastcall
{
   ...
}
 
Неплохой пример

Всего записей: 5 | Зарегистр. 27-10-2008 | Отправлено: 10:14 28-10-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru