Доброго времени суток,гуру-Дельфи!Как передать параметры с одной окна на другое, если они создаются динамически, например:combobox.text выбираю на одной форме c собобокса какой-то текст, клац по кнопке и туту бабам> динамически создается окно
со своим комбобоксом и с тем-же текстом что и я выбрал в предыдущем...?
З.Ы.Есть ещё один ньюанс, сомбобоксы настроены OnDropDown, получается по этому событию выгребается список из Датасета,взял насильно засунул в кобобокс такой же стринг что и в выпадающем сиске датасета, а.... обновлятся по моему запросу не хочет, только надо OnDropDown выбрать тоже самое... ах.. помогите пожалуйста с динамическим перебрасыванием(см.выше)???
26-01-2007 09:01 | Комментарий к предыдущим ответам
Маразм крепчал... Автор даже не понимает, что это не вопрос, а аттракцион :)
> tru:=trust.Cteate(application)
> все приложения наследуют класс Tynasledovani
> создать ini-файл в памяти
Разработку этого кода надо начинать с учебника русского языка и освоения технологии Ctrl+C - Ctrl+V
Ins'y>ты не подсказывал, всё таки это был Мур Федор!Сообщения windows - это сильно круто, пока ещё до реализации этого я не дорос!(...AV у меня на постой, причем каждый раз разное, всё вылазит при создании окна, тобишь
var
tru:Tynasledovani;
trust:Tynasledovaniclass;
begin
tru:=trust.Cteate(application);
tru.show; >>>>>> babam AV....
если копнуть глубже, то мы увидим интересную чтуку, получается в програмулине
все приложения наследуют класс Tynasledovani, в этом класе есть некий конструктор в котором есть 2-а параметра, зачем?Затем что-бы с так званого ТриВью вызывать все приложения (все потомки Tynasledovani)..вот сам конструктор:
constructor TTmpForm.CreateTyn(AOwner: TComponent; trn: TTreeNode);
var
myr: TMyRgstr;
i: integer;
begin
Create(AOwner);
FModified:= True;
Ftn:= trn;
myr:= TMyRgstr.Create(Self);
try
mуr.LoadBounds;
i:= (Ftn.Parent.Count - 1) * 20;
if i > 0 then
SetBounds(Left + i, Top + i, Width, Height) ;
DoCreateReg(mуr);
finally
mуr.Free;
end;
end;
А я например не хочу вызывать окно клацая на ветку в дереве)(только не надо как с датасетом:), а хочу по кнопке, и тогда получается какой-то конфликт конструкторов), получается CreateTyn можно вызвать если Sender есть Tmenuitem,а не Tbutton
tn:= FindNode(blabal.bla, nil, FindNodeRec);
Но вообщето мы не о том!Вместо того что-бы лахать с сисек датасета, попробую создать ini-файл в памяти, а не физически на диске, можно сказать
динамический ini-файл, может кто делал, слышал что-то вроде memoini?
26-01-2007 03:09 | Вопрос к автору: запрос дополнительной информации
Автору:
Что Вам кажется сложным? Это же элементарно!
А ещё Вы говорите, что "AV at address 004baca4 про вызове формы, в моей програмулине не катит" - какой должна быть програмулина, если при создании формы возникает AV? Скорее всего, form2 создаётся автоматически, а Вы её из автокриэйта не убрали.
25-01-2007 11:10 | Комментарий к предыдущим ответам
2 Андрей Токинов
Да нет же, Вы, просто, не понимаете, всё это можно решить через сисечки комбомбимбомкса. Значит, вставляете в одну сисю комбимбома первый запрос, а в другую сисю другой запрос, и всё! Задача решена! ))
25-01-2007 10:43 | Комментарий к предыдущим ответам
Это недостаточно круто - передавать текст комбубамбокса через ini-файл. Я бы посоветовал использовать сообщения Windows.
А еще автор хотел запросы использовать, но так и не решился...
Всем большое спасибо! Voldan'y for best regards,skiff'y:"Способ довольно таки не сложный , я таким образом пробовал AV at address 004baca4 про вызове формы, в моей програмулине не катит", но вот Василию большое благодарственное
, надо будет рекордами забабахать вот так я примерно хотел....Но пока что сделал всё это с помощью создания ini-файла, всё очень просто(подсказал Мур Федор)
в первой форме
...
Interface
...
Uses
... Inifiles ...
// при нажатии на кнопку
Var
Ini: Tinifile;
Begin
If ComboBox1.Text <> 'текст по умолчанию' then
Begin
Ini:=TiniFile.Create(extractfilepath(Application.ExeName)+'temp.ini'); // создаст файл в том же каталоге что и программа
Ini.WriteString('Tip','Tip', ''+ComboBox1.Text+'');// запишет то что будет в комбобоксе
Ini.Free;
во второй форме
...
Interface
...
Uses
... Inifiles ...
Var
Ini: Tinifile;
Tip : string;
Begin
Ini:=TiniFile.Create(extractfilepath(Application.ExeName)+'temp.ini');// чтение из ini файла
Tip:=Ini.ReadString('Tip','Tip', '');
Ini.Free;
//а дальше пойдет условие
If tip = 'тест' then
Begin
пишем что нам надо отоброзить на форме
End;
//--------вот такие пирожки с котятами, ты их кушаешь, а они пищат---------
Ошибулька, однако...Конечно - TDinForm.Create(кто-то)...
Как! Неужели он не видит объект "кто-то", да это же такой же глобальный объект как Application или Screen :)) Може у Вас дельфи нелицензионная?
Коль скоро Вы столкнулись с подобными проблемами - воспользуйтесь, например, таким подходом...
unit DinFofm;
.....
TTypeForm = (Type1,Type2................);
TFormParam = packed record
TypeForm: TTypeForm;
FormData: данные в каком-то виде;
еще что нибудь
end;
TDinForm = class(TForm)
....
public
Params: TFormParam;
....
end;
function NewDinForm(Param:TFormParam);
.....
implementation
function NewDinForm(Param:TFormParam);
begin
with TFormParam.Create(кто-то) do begin
Params := Param;
case Param.TypeForm of
.....короче что угодно и как угодно
end;
.....
end;
end;
Дабы сгенерить новое окно - вызов NewDinForm с нужными параметрами. Очень удобно для MDI-чайлдов с однотипной информацией. Например, результаты запроса с различным набором параметров и их значениями.
24-01-2007 20:43 | Комментарий к предыдущим ответам
Voldan,
Вы забыли ещё про такие компоненты, как "собобокс" и "кобобокс".
Автору:
Насчёт того, что вы кличете динамическим перебрасыванием:
Делаете форму, скажем, form2, а на ней такой же комбобокс (combobox2).
На onSelect первого комбобокса:
:):):)
Замечательный топик! Нет, восхитительный!!!
Мне больше всего понравилось с "динамическим перебрасыванием" комбобоксом )))
Ну, и ещё не плохо на счет "туту" и "бабам"! :):) Всё сразу становится на свои места! )
Ну, а душещипательное "Ах" достойно всяком похвалы - сразу видно, как автора замучала это проблема... )))
P.S. Держитесь! "Программистом" быть нелегко! )
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.