Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48

Как перенести переменную типа TStringList в другой модуль

23.01.2010, 02:03. Показов 4119. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как перенести глобальную переменную типа TStringList в другой модуль (Unit2 например), чтобы она при этом сохранила свое значение?

Применение extern, static, включение модуля #include "Unit1.h" - не помогает.
Переменная остается объявленной, а свое значение теряет, т.е. полностью опустошается при обращении к ней из другого модуля.

Переменные других типов (float, int AnsiString) вызываются нормально, т.е. сохраняют значения.
TStringList - все теряет

Спасибо!

P.S. ПО: С++ Builder 6
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.01.2010, 02:03
Ответы с готовыми решениями:

В функцию принимающую только TStringList передать переменную типа String
Здравствуйте. В общем вопрос в названии темы. Есть функция void ReplaceMac(TStringList* Template) { ... } как в неё передать...

Как скопировать строку из одного TStringList в другой
Файл считывается в List, если строка начинается на символ '/', то строку без этого символа копируем в Opros. ...

Как перенести переменную из одного файла в другой?
У меня есть один файл в котором я получаю последнее id, как мне эту переменную перенести в другой файл? получаю id: $query =...

11
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
23.01.2010, 02:41
Да нэ может такого быть!
Unit1.cpp:
на форме кнопка при ее нажатии:
C++
1
2
3
4
5
6
7
8
#include "Unit2.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TStringList * ThisList = new TStringList;
        ThisList->Add("Hallo world");
        Form2->Lst=ThisList;    // Вот тут присваиваем указателю второй формы на адрес ThisList
        Form2->ShowModal();
}


Unit2.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class TForm2 : public TForm
{
 
__published:    // Von der IDE verwaltete Komponenten
    TMemo *Memo1;
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:    // Anwender-Deklarationen
public:
TStringList * Lst;
    __fastcall TForm2(TComponent* Owner);
};
Unit2.cpp на форме кнопка и Memo1. При ее нажатии:
C++
1
    Memo1->Lines->Add(Lst->Strings[0]);
При нажатии на кнопку во второй форме, данные из lst(указателя на TStringList из первой формы)
появляются в Memo1
1
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
23.01.2010, 04:10  [ТС]
Сергей, спасибо огромное! Так попробовал - отлично работает.
Вот только у меня нет 2-й формы. Есть одна форма и два модуля. А так не получается настроить, т.к. во 2-м модуле нет объявления класса Form2...

Подскажите пожалуйста, в идеале такой же примерчик, только с Form1, Unit1 и Unit2.

Еще раз спасибо!

Добавлено через 18 минут
Короче говоря, у меня изначально была одна форма и модуль. Здесь я работал с переменной типа TStringList. Затем, чтобы не нагромождать один юнит процедурами, я создал Unit2. Но без еще одной формы. Всеми переменные благополучно туда переехали. А вот со TStringList как-то не выходить.
Вот и ваш пример я тоже кручу. С двумя формами все отлично работает. Когда одну форму удаляешь - не выходит...
0
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
23.01.2010, 04:11
Конечно! Те же яйца, тока в профиль.
Во вложенном вайл проекта.
Если что не понятно - спрашивайте.
Вложения
Тип файла: zip Project2.zip (201.0 Кб, 77 просмотров)
1
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
23.01.2010, 04:21
Вот.. с двумя юнитами:
Вложения
Тип файла: zip Unit1.zip (199.8 Кб, 62 просмотров)
1
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
23.01.2010, 04:36  [ТС]
Ой, спасибо огромное, все отлично работает.
Сейчас буду пробовать все сделать по аналогии в своей программе..
Еще раз спасибо!
0
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
23.01.2010, 05:16  [ТС]
Вы знаете, стыдно признаться, но опять не получается так, как хотелось бы.

В последнем примере (с тремя модулями) несмотря на то, что используется Dummy класс модуля 2, текст на форму_1 все равно выводится из модуля_1. А мне нужно текст, заданный в модуле_1, вытащить в любую процедуру модуля_2 или 3 (через переменную TStringList).

Во вложенном файлике я добавил пару кнопок и две пустые процедурки: Показать тот же текст (заданый в модуле_1), только выводя его из Unita2, а также из Unita3.

Еще надеюсь на ваш спортивный интерес
Спасибо!
Вложения
Тип файла: zip V03.zip (347.4 Кб, 15 просмотров)
0
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
23.01.2010, 15:07  [ТС]
Вдохновленный вашим примером с двумя формами, я вчера до 4.00 утра пытался применить вашу идею с классом-пустышкой Dummy, но так желаемого и не получилось. Уже сделал так, что программа компилируется и запускается без ошибок, но когда нажимаю [Button1], выдает ошибку при вызове переменной TStringList в Unit2 из Unit1.

Видимо, класс TForm имеет какое-то уникальное свойство, которого не хватает классу Dummy...
0
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
23.01.2010, 17:22
Скиньте Ваш пример, пожалуйста, потому, как тот пример, что Вы послали - это тот же пример, что я Вам послал в моем втором сообщении. Видимо, вы не сохранив проект и при открытом билдере заархивировали содержимое папки Вашего проекта и выложили его.
1
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
23.01.2010, 17:52
Вот еще один пример.
В классе TDummy объявленны 2 ф-ции и один указатель на TStringList.
Одна ф-ция устанавливает указатель, другая возвращает его.
Указатель на класс TDummy * Dummy объявлен сейчас глобально. Память под него выделяется при создании главной формы. И сразу же используется ф-ция установки указателя на TStringList из главной формы. После этого можно использовать ф-цию получения указателя на TStringList из TDummy в любом модуле. Пример этого использования происходит при нажатии на кнопку в Form1 и Form2.

Если у Вас что-либо не будет получаться, пишите, или еще лучше, если есть скайп дайте свое скайп имя я свяжусь.
Вложения
Тип файла: zip Unit3.zip (196.0 Кб, 33 просмотров)
1
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
23.01.2010, 20:09  [ТС]
Вот теперь все получилось на 100%

Проблема довольно очевидна: Проэкт состоял из Form1, Unit1. По мере роста программного кода появилась потребность в создании еще одного модуля Unit2, а заодно и перетащить все используемые в Unit1 переменные, классы, массивы и т.д. Так вот проблема возникла только с указателями типа TStringList.

Из полученного результата видно, что такие переменные переносятся в другой модуль довольно таки не тривиальным способом (требуется новый класс, множество дополнительных указателей и т.д). В отличие от обычных переменных и массивов, где просто достаточно добавить ключевое слово extern.

Но, как говориться, опыт - великое дело!
В приложении я сделал то, что хотел с самого начала.
Еще раз спасибо!

--------------------------
P.S. Был бы благодарен, если бы вы черкнули пару строк своих мыслей в след. теме:
Создание базы данных (ошибка)
Вложения
Тип файла: zip V06.zip (525.5 Кб, 25 просмотров)
0
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
23.01.2010, 21:59  [ТС]
Кстати, как временное решение, сохранил переменную типа TStringList в виде массива AnsiString, который, в свою очередь, благополучно переехал во 2-й модуль..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.01.2010, 21:59
Помогаю со студенческими работами здесь

Записать исходный код страницы в переменную типа Tstringlist
Есть переменная T типа TStringList. Как в эту переменную записать исходный код страницы? Исходный код получаю способом:...

Как конвертировать переменную типа Double в переменную типа String?
Как конвертировать переменную типа Double в переменную типа String. И наоборот.

Как добавить текст в список типа TStringList
Здравствуйте. Мне необходимо добавить произвольный текст в список типа TStringList. Так как текст содержит символы перевода строки и...

Как строковую переменную(String) сканвертировать в переменную типа(Real)
У меня есть Edit1.Text (строковая) а var x: Real каким образом мне сконвертировать Edit1.Text в х Подразумевается что в Edit1.Text...

Как передать из ACCESS переменную STRING в переменную окружения (типа CMD команды SET=)
Добрый день! Подскажите как установить переменную окружения из ACCESS. Допустим у меня есть переменная CurrentDir типа String и я хочу...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru