Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача параметра для окна в многооконном прил. 
:(
    Опции темы
php5
Дата 13.1.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Имеется многооконное приложение для роботы с БД   при клике  по кнопке открывается  окно  в которое загружаются данные  из БД,  так  вот необходимо как то  пере появлением  содержания  окна  предать    id  для выборки из базы данных, с учетом того что таких окон одновременно может быть открыто  большое количество 
PM MAIL   Вверх
MAXIQ
Дата 13.1.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 30.12.2006

Репутация: нет
Всего: нет



Окно создается на базе класса ? Может конструктор с параметрами замутить? 
PM MAIL   Вверх
orthrus
Дата 13.1.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 30.10.2007
Где: г. Усть-Илимск(Ир кутская обл.)

Репутация: 4
Всего: 16



Как окно создаешь?


--------------------
У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой
user posted image
PM MAIL ICQ   Вверх
php5
Дата 13.1.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Окно создается классически
Application->CreateForm(__classid(TForm1), &Form1);
Form1->Show();

PM MAIL   Вверх
vikaz
Дата 14.1.2009, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Когда мне надо было что-то подобное, то я делал класс, и в этом классе создавал окно динамически  и прописывал весь функционал. Естественно, в конструктор мог передать любые параметры.


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Vyacheslav
Дата 14.1.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(php5 @  13.1.2009,  17:48 Найти цитируемый пост)
Окно создается классически
Application->CreateForm(__classid(TForm1), &Form1);
Form1->Show();


Убираете окно из списка автосоздаваемых и создаете через new. В конструктор своей формы добавляете нужны параметр. Если нужно  добавить только один параметр и этот параметр int, то параметры  следует  поменять местами, иначе получится, что Вы "перегрузили" служебный конструктор TForm(Component *Owner, int)

Код


__fastcall  TForm1::TForm1(int id,  TComponent* Owner) :TForm( Owner) { ... }


  
Вызов формы в коде
Код

// если никаких обращенией к форме в коде не предвидтся, то
  (new TForm1(this, id))->Show(); 
// или если установить Visible в true в дизайне, то просто
  new TForm1(this, id);

// если предполагаются  обращения к форме в коде  то
TForm1* form1 =NULL;
...
form1 =  new TForm1(this, id);

   
  
PS
Чтобы не заморачиваться  с удалением формы по закрытию, не забыть установить для формы  в обработчике OnClose. 
Код


Action = caFree


В этом случае она форма будет удаляться автоматически при ее закрытии.

Надеюсь, ничего не напутал. На билдере уже 4 года не работаю



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
vikaz
Дата 19.4.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Всем добрый день! Решил написать здесь, так как темы взаимосвязаны.
У меня вопрос  в сл.
Как передать параметр в форму с нами поделился многоуважаемый Vyacheslav.
Но вот как забрать из этой формы какой нибудь параметр, int, char, AnsiString и вернуть этот параметр в то место откуда он был вызван?
Заранее спасибо.


На данный момент, я просто создал переменную extern и пробрасываю через неё. Но может есть более правильное и рациональное решение данной проблемы?

Это сообщение отредактировал(а) vikaz - 19.4.2009, 18:48


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Anikmar
Дата 19.4.2009, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(vikaz @  19.4.2009,  16:16 Найти цитируемый пост)
Как передать параметр в форму с нами поделился многоуважаемый Vyacheslav.
Но вот как забрать из этой формы какой нибудь параметр, int, char, AnsiString и вернуть этот параметр в то место откуда он был вызван?

Я передаю вместе с параметрами адрес структуры, в которую форма мне все что нужно пишет.
PM MAIL ICQ   Вверх
vikaz
Дата 19.4.2009, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Anikmar спасибо большое за подсказку, не сообразил. 


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Лапоть
Дата 19.4.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 3.4.2009

Репутация: 1
Всего: 2



Цитата(vikaz @  19.4.2009,  17:16 Найти цитируемый пост)
как забрать из этой формы какой нибудь параметр, int, char, AnsiString и вернуть этот параметр в то место откуда он был вызван?

А свойства класса для этой формы (в том числе - и добавленные) никто пользовать не запрещает. smile 
PM MAIL   Вверх
vikaz
Дата 20.4.2009, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Anikmar, Лапоть  smile 
Просто у меня вот в чем возникла проблема. Я могу вернуть параметр или структуру, но это только когда какая-то операция делается в конструкторе. А если мне нужно вернуть параметры, когда я уже сделал какие-то действия на форме, вот так у меня возвращаются пустые значения и это понятно. Вот как это победить?
Заранее спасибо!


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 20.4.2009, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(vikaz @  20.4.2009,  08:25 Найти цитируемый пост)
А если мне нужно вернуть параметры, когда я уже сделал какие-то действия на форме, вот так у меня возвращаются пустые значения и это понятно. Вот как это победить?


Цитата(Лапоть @  19.4.2009,  21:57 Найти цитируемый пост)
А свойства класса для этой формы (в том числе - и добавленные) никто пользовать не запрещает.

То бишь если продолжить мысль камрада - юзай переменные описанные в классе используемой формы.
PM MAIL   Вверх
vikaz
Дата 20.4.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Понятно, все гениальное в ......
Все спасибо!


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
artsb
Дата 20.4.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(vikaz @  20.4.2009,  08:25 Найти цитируемый пост)
Просто у меня вот в чем возникла проблема. Я могу вернуть параметр или структуру, но это только когда какая-то операция делается в конструкторе. А если мне нужно вернуть параметры, когда я уже сделал какие-то действия на форме, вот так у меня возвращаются пустые значения и это понятно. Вот как это победить?

Объявляете в .h файле второй формы структуру, создаёте на неё указатель в закрытой области класса. Также как вам советовали, передаёте в конструкторе указатель на структуру, которую нужно заполнить и присваиваете этот указатель указателю второй формы. В общем, что-то типа:
Unit2.h
Код

//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
typedef struct
{
  AnsiString str1, str2;
} mData;
class TForm2 : public TForm
{
__published:    // IDE-managed Components
        TEdit *Edit1;
        TEdit *Edit2;
        TButton *Button1;
        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
mData* myData;
public:        // User declarations

        __fastcall TForm2(TComponent* Owner);
        __fastcall TForm2(TComponent* Owner, mData* Data);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif

Unit2.cpp
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner, mData* Data)
        : TForm(Owner)
{
myData = Data;
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)
{
myData->str1 = Edit1->Text;
myData->str2 = Edit2->Text;
}

Unit1.cpp
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
mData* myData = new mData;
TForm2* form = new TForm2(Application, myData);
if(form->ShowModal() == mrOk)
{
  Edit1->Text = myData->str1;
  Edit2->Text = myData->str2;
}
delete myData;
delete form;
}


Естественно, нужно делать кучу проверок, но я не стал их писать. smile

Это сообщение отредактировал(а) artsb - 20.4.2009, 12:59


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
vikaz
Дата 20.4.2009, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



artsb, спасибо огромное!!!


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0931 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.