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

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

23.01.2010, 02:03. Показов 4088. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru