Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Save full form  (Прочитано 4836 раз)
0 Пользователей и 1 Гость смотрят эту тему.
TGrey[WoLf]
Постоялец

ua
Offline Offline
Пол: Мужской

« : 10-05-2007 02:11 » 

Добрый день. тут вдруг мне понадобилась программа с кнопками и формами. Ну ясное едло я взял Борладн. Тут как всегда оказалось что я прощитался но всеже сделал все что мне необходимо. Но потом до меня дошло зачем я его делаю если не смогу доделать Меня одолевают смутные сомнения А вся проблема в том что незнаю как сохранять форму в том составе в каком ее закрыл.
Тоесть программа такова:
В трей спускается иконка(прога без формы, форма в хайде) и вся работа с прогой ну практически вся ведется через эту иконку в иконку добавлена Попменю вызываемое правым кликом. В этом меню 3 раздела
Код:
Добавить
Сервера
Выход
При нажатии на добавить открывается 2-я форма в которой вводятся параметры которые потом заносятся в сабменю меню Сервера. Тоесть Серверы-><имя>
С горем пополам я всетаки НАУЧИЛСЯ Жжешь делать сабменю... и оно даже записует все что мне нужно. Но вот теперь я озадачен тем как мне сделать так что бы эти все сабменю сохранялись и при новом открытии программы были где и должны быть.
Просьба не давать космических советов поскольку я не гений С++ а особенно Борланда - я пока учусь Скромно так....
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 10-05-2007 03:56 » 

один из способов (простейший) -
можно сохранять всё инфо о создании меню в текстовый файл. Потом открыть файл, когда надо, "проиграть" инфо - и снова появилось нужное меню )
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 10-05-2007 06:30 » 

Используй динамическое создание элементов меню и свойство Tag.
Хранить информацию о меню можно где угодно: в файле, в базе и т.д. Реализация руками.

Код: (C++)
void __fastcall TForm1::CreateMenus(void)
{
    TMenuItem *item ;

    menu->Clear();
    .......

    while (......)
    {
        item = new TMenuItem(this);
        item->Name = ....;
        item->Caption = ....;
        item->Tag = ....; // id
        item->AutoHotkeys = maManual;
        item->OnClick = myMenuHandler;
        menu->Add(item);
        ......
    }
}

void __fastcall TForm1::myMenuHandler(TObject *Sender)
{
    TMenuItem *item = dynamic_cast<TMenuItem *>(Sender);
    int menuID = item->Tag;

    .......
}
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
TGrey[WoLf]
Постоялец

ua
Offline Offline
Пол: Мужской

« Ответ #3 : 11-05-2007 00:43 » 

Да я тоже думал о сохранении инфы в фалйе но как ее туда сохранить даже не представляю.



Да а можешь только объяснить где ты взял menu? Я вижу ты объявил item но menu не нахожу...
Но и так оно будет создавать програмно но уже запрограмированые кнопки... К примеру у меня в проге уже 10 серверов тогда мне нужно 10 кнопок и чтобы они хранили правильную информацию. Это тогда уже точно получается нужно делать файл и читать инфу с него...



Спасибо за посдказки.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 11-05-2007 11:55 » 

TGrey[WoLf], menu объявлено в форме, а приведенные ф-ии - методы. Код реальный, но названия переменных и ф-ия я поменял. Метод myMenuHandler по логике BC должен называться menuOnClick.

Сохранять тебе нужно лишь Caption и Tag - остальное по вкусу. Напр. можно сделать текстовый файл, на каждой строке которого будут значения, разделенные табуляцией.

1    menu 1
2    menu2
3    Menu 3


Код: (C)
FILE * f = fopen(.....);
int id;
char buf[100];

while (fscanf("%d\t%s", &i, buf))
{
    // .....
}
« Последнее редактирование: 11-05-2007 12:01 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
TGrey[WoLf]
Постоялец

ua
Offline Offline
Пол: Мужской

« Ответ #5 : 12-05-2007 04:21 » 

Да так можно, надо попробовать. только можешь объяснить что дает Tag? Я смотрю он на всех кнопках = 0.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 12-05-2007 09:27 » 

Это поле ничего не значит. Его можно использовать по своему усмотрению.
В моем примере оно используется как идентификатор элемента меню. Обработчик клика ведь должен понять, на каком элементе был клик?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
TGrey[WoLf]
Постоялец

ua
Offline Offline
Пол: Мужской

« Ответ #7 : 13-05-2007 03:52 » 

Ага примерно представляю что ты имеешь ввиду. Считывать с Файла ТАГ и Кепшион и на этой основе создать сабменю... В которое уже потом дописыватьнужные мне строки... Ну чтоже попробую) Спс за помощ.

З.Ы.Мнебы еще задачки на Ассамблере Ага
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines