5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
|
|
1 | |
Как перенести переменную типа TStringList в другой модуль23.01.2010, 02:03. Показов 3769. Ответов 11
Метки нет (Все метки)
Как перенести глобальную переменную типа TStringList в другой модуль (Unit2 например), чтобы она при этом сохранила свое значение?
Применение extern, static, включение модуля #include "Unit1.h" - не помогает. Переменная остается объявленной, а свое значение теряет, т.е. полностью опустошается при обращении к ней из другого модуля. Переменные других типов (float, int AnsiString) вызываются нормально, т.е. сохраняют значения. TStringList - все теряет Спасибо! P.S. ПО: С++ Builder 6
0
|
23.01.2010, 02:03 | |
Ответы с готовыми решениями:
11
В функцию принимающую только TStringList передать переменную типа String Как скопировать строку из одного TStringList в другой Как перенести переменную из одного файла в другой? Записать исходный код страницы в переменную типа Tstringlist |
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
|
||||||||||||||||
23.01.2010, 02:41 | 2 | |||||||||||||||
Да нэ может такого быть!
Unit1.cpp: на форме кнопка при ее нажатии:
Unit2.h:
появляются в Memo1
1
|
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
|
|
23.01.2010, 04:10 [ТС] | 3 |
Сергей, спасибо огромное! Так попробовал - отлично работает.
Вот только у меня нет 2-й формы. Есть одна форма и два модуля. А так не получается настроить, т.к. во 2-м модуле нет объявления класса Form2... Подскажите пожалуйста, в идеале такой же примерчик, только с Form1, Unit1 и Unit2. Еще раз спасибо! Добавлено через 18 минут Короче говоря, у меня изначально была одна форма и модуль. Здесь я работал с переменной типа TStringList. Затем, чтобы не нагромождать один юнит процедурами, я создал Unit2. Но без еще одной формы. Всеми переменные благополучно туда переехали. А вот со TStringList как-то не выходить. Вот и ваш пример я тоже кручу. С двумя формами все отлично работает. Когда одну форму удаляешь - не выходит...
0
|
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
|
|
23.01.2010, 04:11 | 4 |
Конечно! Те же яйца, тока в профиль.
Во вложенном вайл проекта. Если что не понятно - спрашивайте.
1
|
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
|
|
23.01.2010, 04:21 | 5 |
Вот.. с двумя юнитами:
1
|
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
|
|
23.01.2010, 04:36 [ТС] | 6 |
Ой, спасибо огромное, все отлично работает.
Сейчас буду пробовать все сделать по аналогии в своей программе.. Еще раз спасибо!
0
|
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
|
|
23.01.2010, 05:16 [ТС] | 7 |
Вы знаете, стыдно признаться, но опять не получается так, как хотелось бы.
В последнем примере (с тремя модулями) несмотря на то, что используется Dummy класс модуля 2, текст на форму_1 все равно выводится из модуля_1. А мне нужно текст, заданный в модуле_1, вытащить в любую процедуру модуля_2 или 3 (через переменную TStringList). Во вложенном файлике я добавил пару кнопок и две пустые процедурки: Показать тот же текст (заданый в модуле_1), только выводя его из Unita2, а также из Unita3. Еще надеюсь на ваш спортивный интерес Спасибо!
0
|
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
|
|
23.01.2010, 15:07 [ТС] | 8 |
Вдохновленный вашим примером с двумя формами, я вчера до 4.00 утра пытался применить вашу идею с классом-пустышкой Dummy, но так желаемого и не получилось. Уже сделал так, что программа компилируется и запускается без ошибок, но когда нажимаю [Button1], выдает ошибку при вызове переменной TStringList в Unit2 из Unit1.
Видимо, класс TForm имеет какое-то уникальное свойство, которого не хватает классу Dummy...
0
|
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
|
|
23.01.2010, 17:22 | 9 |
Скиньте Ваш пример, пожалуйста, потому, как тот пример, что Вы послали - это тот же пример, что я Вам послал в моем втором сообщении. Видимо, вы не сохранив проект и при открытом билдере заархивировали содержимое папки Вашего проекта и выложили его.
1
|
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
|
|
23.01.2010, 17:52 | 10 |
Вот еще один пример.
В классе TDummy объявленны 2 ф-ции и один указатель на TStringList. Одна ф-ция устанавливает указатель, другая возвращает его. Указатель на класс TDummy * Dummy объявлен сейчас глобально. Память под него выделяется при создании главной формы. И сразу же используется ф-ция установки указателя на TStringList из главной формы. После этого можно использовать ф-цию получения указателя на TStringList из TDummy в любом модуле. Пример этого использования происходит при нажатии на кнопку в Form1 и Form2. Если у Вас что-либо не будет получаться, пишите, или еще лучше, если есть скайп дайте свое скайп имя я свяжусь.
1
|
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
|
|
23.01.2010, 20:09 [ТС] | 11 |
Вот теперь все получилось на 100%
Проблема довольно очевидна: Проэкт состоял из Form1, Unit1. По мере роста программного кода появилась потребность в создании еще одного модуля Unit2, а заодно и перетащить все используемые в Unit1 переменные, классы, массивы и т.д. Так вот проблема возникла только с указателями типа TStringList. Из полученного результата видно, что такие переменные переносятся в другой модуль довольно таки не тривиальным способом (требуется новый класс, множество дополнительных указателей и т.д). В отличие от обычных переменных и массивов, где просто достаточно добавить ключевое слово extern. Но, как говориться, опыт - великое дело! В приложении я сделал то, что хотел с самого начала. Еще раз спасибо! -------------------------- P.S. Был бы благодарен, если бы вы черкнули пару строк своих мыслей в след. теме: Создание базы данных (ошибка)
0
|
5 / 5 / 0
Регистрация: 22.01.2010
Сообщений: 48
|
|
23.01.2010, 21:59 [ТС] | 12 |
Кстати, как временное решение, сохранил переменную типа TStringList в виде массива AnsiString, который, в свою очередь, благополучно переехал во 2-й модуль..
0
|
23.01.2010, 21:59 | |
23.01.2010, 21:59 | |
Помогаю со студенческими работами здесь
12
Как конвертировать переменную типа Double в переменную типа String? Как добавить текст в список типа TStringList Как строковую переменную(String) сканвертировать в переменную типа(Real) Как передать из ACCESS переменную STRING в переменную окружения (типа CMD команды SET=) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |