Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Мы сами всего творцы!
 Аватар для Alexell
60 / 23 / 1
Регистрация: 06.06.2012
Сообщений: 151

Обработка MB_OK и считывание из текстового файла

18.06.2012, 10:45. Показов 2528. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Пишу программу для визуального редактирования файла конфигурации другой программы (чтобы люди не парились в ковырянии его англоязычного синтаксиса), разобрался практически во всем, что мне было необходимо: считывание файла конфигурации, замена нужных строк, а также для некоторых других настроек перемещаю файлы или папки. (недавно тут мне тоже помогли).

1.
Однако возникла сложность считывания параметра с названиями папок дополнений:
XML
1
  ExtrasDirectories  [ "extras-standard" "extras" ]
Во первых нужно считать то, что написано в кавычках и разместить в двух Edit`ах (две папки записаны стандартно).
А во вторых нужно придумать как сделать, чтобы пользователь мог удобно выбрать адрес папки (думаю хватит этих двух+еще одну).

Я подумал так:
Есть 3 Edit`а, в них записываются адреса (текст в кавычках) папок из файла конфигурации, но пишутся без кавычек, по человечески. А если в строке файла всего один адрес, например:
XML
1
  ExtrasDirectories  [ "extras" ]
то, в первый Edit он запишется, а остальные будут пустыми, если два, то в 2 запишутся... Надеюсь суть ясна

В тот конфигурационный файл в кавычках можно писать просто название папки с дополнениями, если она находится в корневом каталоге самой программы. Если же нет, то нужно писать полный адрес, причем заменяя \ на \\ или на /

Вот мне и нужно чтобы пользователь мог просто ввести текст в это поле (тоесть Edit1 Click мы не обрабатываем), а при двойном щелчке, чтобы появлялся диалог с выбором папки, и когда пользователь выбрал нужную, ее адрес должен ПРАВИЛЬНО (см. выше) записаться в Edit.
Ну и затем по нажатию кнопки все это сохранить в тот файл, найдя нужную строку и заменив в ней текст в кавычках, или добавив новый.
Тоесть Edit1 - это "extras-standard", Edit2 - это "extras", а Edit3 пустое. Но если в нем что-то напишут, он должен добавить новое значение, после тех двух:
XML
1
  ExtrasDirectories  [ "extras-standard" "extras" "новый адрес" ]
2. Моя утилита для работы должна находиться в папке с программой, поэтому я в начале проверяю существование двух файлов и вывожу сообщение об ошибке, если утилита не там где надо. Но мне нужно сделать так, чтобы когда пользователь нажимал ОК в окошке с сообщением об ошибке (там всего одна кнопка), утилита сразу закрывалась. Но у меня не получается, помогите пожалуйста, вот что я пытался:
C++
1
2
3
4
5
6
7
if (FileExists(ExtractFilePath(Application->ExeName)+"celestia.exe") && FileExists(ExtractFilePath(Application->ExeName)+"celestia.cfg"))
        MkDir(ExtractFilePath(Application->ExeName)+ "temp");
else
{
        if (Application->MessageBox("Для запуска утилиты, поместите ее в корневой каталог Celestia.", "Менеджер конфигурации Celestia", MB_OK | MB_ICONEXCLAMATION)==MB_OK)
        Form1->Close();
}
Это писал в TForm(Owner)
Буду очень очень сильно благодарен тому, кто это сделает! На днях положу 50р на телефон если сделает все так, как мне нужно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2012, 10:45
Ответы с готовыми решениями:

Считывание и обработка текстового файла
Необходимо написать программу, которая: 1. Считывает данные из файла "geo2018pointdata.txt" формата:"Y X Z property1...

Считывание из текстового файла
Как в матлабе считать данные с текстового файла? Точнее правильно считать, например, двойной массив. Я пробовал с помощью функции load, но...

Считывание из текстового файла
void __fastcall TForm1::N7Click(TObject *Sender) { string number, name, name2, name3, date, rol, status, tel1, tel2, email; int kol; ...

7
Мы сами всего творцы!
 Аватар для Alexell
60 / 23 / 1
Регистрация: 06.06.2012
Сообщений: 151
19.06.2012, 09:29  [ТС]
Извиняюсь, вчера забыл добавить сам файл.
Добавил часть файла, на примере которой нужно выполнить мою просьбу.

Жду помощи
Вложения
Тип файла: txt config.txt (1.1 Кб, 8 просмотров)
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
19.06.2012, 11:02
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
     bool norma;
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
if (FileExists(ExtractFilePath(Application->ExeName)+"celestia.exe") &&
    FileExists(ExtractFilePath(Application->ExeName)+"celestia.cfg"))
   {  MkDir(ExtractFilePath(Application->ExeName)+ "temp");
      norma = true;  }
else
  if (Application->MessageBox(
     "Äëÿ çàïóñêà óòèëèòû, ïîìåñòèòå åå â êîðíåâîé êàòàëîã Celestia.",
      "Ìåíåäæåð êîíôèãóðàöèè Celestia", MB_OK | MB_ICONEXCLAMATION)==MB_OK)
      norma = false;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormShow(TObject *Sender)
{
     if (!norma)  Close();   
}
//---------------------------------------------------------------------------
1
Мы сами всего творцы!
 Аватар для Alexell
60 / 23 / 1
Регистрация: 06.06.2012
Сообщений: 151
19.06.2012, 11:56  [ТС]
У меня в Form Owner описано считывание данных из файлов.
И когда их нет, то выходят ошибки. Когда использую код, написаный тобою выше, то после MessageBox`а всеравно выходит одна ошибка(((
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
19.06.2012, 12:44
А у меня с BCB 6.0 в простой программе (только эти два обработчика) ошибок не возникает. И у меня нет привычки задействовать как-то Form(Owner) без особой нужды...

Добавлено через 31 минуту
Вот пример, как нормально считать данные из файла конфигурации. Вместо мэмо можно использовать другой стринг-лист - что больше нравится__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void __fastcall TForm1::Button1Click(TObject *Sender)
{ 
     Memo1->Lines->LoadFromFile("config.txt");
     for (int i=0;i<Memo1->Lines->Count;i++)
       if ((Memo1->Lines->Strings[i].Pos("ExtrasDirectories")>0) &&
           (Memo1->Lines->Strings[i][1] != '#'))
    {
       AnsiString S[4]; S[0]=""; S[1]=""; S[2]="";
       int na1, ind=0, kaw=0  ;
       if ((na1=Memo1->Lines->Strings[i].Pos("["))>0)
         for (;na1<=Memo1->Lines->Strings[i].Length();na1++)
         {
           if (Memo1->Lines->Strings[i][na1]=='"')
            { kaw++; if(kaw%2==0) ind++;  }
           else if (Memo1->Lines->Strings[i][na1]==']') break ;
           else if (Memo1->Lines->Strings[i][na1]=='[')  ;
           else if (kaw>0 && (kaw%2==1))
             S[ind&3] += Memo1->Lines->Strings[i][na1] ;
         }
       Edit1->Text = S[0];
       Edit2->Text = S[1];
       Edit3->Text = S[2];
    }
}
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
19.06.2012, 16:08
И если я правильно понял проблему, то такой этюд может помочь__
Вложения
Тип файла: rar t5.RAR (227.8 Кб, 6 просмотров)
1
Мы сами всего творцы!
 Аватар для Alexell
60 / 23 / 1
Регистрация: 06.06.2012
Сообщений: 151
20.06.2012, 10:26  [ТС]
Дружище спасибо огроменное! Это как раз то, что мне и нужно!
Единственная проблема - это то, что мой билдер не компилировал (изначально) твой проект, нехватает какой то библиотеки вроде (скрин прикрепил).
А еще я переделал под TStringList весь пример, но проверить увы не могу, так как он не компилирует. Посмотри плиз в чем дело)))
Миниатюры
Обработка MB_OK и считывание из текстового файла  
Вложения
Тип файла: zip t5_new.zip (17.6 Кб, 3 просмотров)
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
20.06.2012, 11:14
- замени файл .bpr (архив во вложении). И убери строку в обработчике FormCreate.
И на будущее: если компилятор ругается на отсутствие чего-либо в чужом проекте, нужно в текстовом редакторе открыть файл *.bpr и поудалять записи об этой библиотеке (но осторожно).
Вложения
Тип файла: zip Project1.zip (1.5 Кб, 4 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.06.2012, 11:14
Помогаю со студенческими работами здесь

Считывание с текстового файла
Здравствуйте. У меня вот такой вопрос. Мне нужно загружать данные из текстового файла в М-файл матлаба . Они представлены в виде массива...

Считывание текстового файла
Помогите, пожалуйста, разобраться. При считывании текстового файла, последние несколько символов считываются 2 раза, т.е., если исходный...

Считывание из текстового файла
Вообщем есть текстовый файл следующего содержания 2.10 3.08 4.16 5.17 3.08 5.66 9.55 6.91 4.54 3.75 1.74 2.85 1.34 9.41 6.49 7.85 ...

Считывание текстового файла
Здравствуйте, уважаемые форумчане. Была задачка - написать программу, которая выводит на экран содержимое текстового файла. Путь к файлу...

Считывание текстового файла
Вот сам файл Я считываю символ в отдельное поле класса, потом 2 цифры после символа в отдельные 2 поля, а затем сама проблема: остальные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru