Форум: "Основная";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];
Внизсразу много вопросов: Найти похожие ветки
← →
agafon (2002-08-13 19:51) [0]1) компонента FormStorage:
f.FormStorage1.IniSection:="22222";
f.FormStorage1.IniFileName:="22222.ini";
чудестно создает данный ини файл и секцию, но при повторном запуске не считывает!
2) создаю окна:
f := Tfmavtovis.Create(Application);
f.name:="new22222" ;
f.FormStorage1.IniSection:="22222";
f.FormStorage1.IniFileName:="22222.ini";
(это одно окно, но, в общем мне нужен ряд окон , но с разными параметрами - эти параметры, соотвественно в ини файлах - в данном случае 22222). допустим загрузил окна. Но мне их надо спрятать с основной формы, как будто их нет (но, в тоже время каждое окно выполняло свой процесс).
теперь на форме есть только механизмы вызова этих окон
(допустим TreeView). как мне, скажем, по нажатию правой клавиши открыть выбранное окно
(пояснение)
22222
33333
44444
55555
22222 - я описал чуть выше - все остальные - тоже самое но с другими параметрами.
если бы речь просто шла об окне, то showModal
но тут окна созданы динамически.
итак:
считали список окон (222 333 444 555), у нас есть ini файлы (22222.ini и т д), есть механизм, который солздал эти окна по описанным выше правилам.
Теперь мне надо спрятать эти окна
2) иметь возможность их вызывать
← →
agafon (2002-08-14 10:41) [1]Для понятности
ftp://csoft@csoft.nnov.ru/pub/proba.rar
Итак, что я хочу:
1) чтобы дочерние окна при открытии не были видны.
2) я там поставил на наждое окно разные интервалы таймера
begin
for i := 1 to TreeView1.Items.Count do
begin
Child := TForm3.Create(Application);
Child.Timer1.Interval:=i*1000;
Child.Name:="MyForm"+inttostr(i);
//Child.Show;
end;
и иметь возможность из TreeView1 открывать каждое окошечко модально.
+ таймеры у меня "смешиваются" :(
то есть 1 срабатывает раз в сек, второй раз в 2, третий раз в 3 , а у меня получается, что значение всех 3 окон суммируется, а должны работать независимо
← →
agafon (2002-08-14 11:14) [2]http://www.csoft.nnov.ru/proba.rar
отсюда
← →
McSimm (2002-08-14 11:37) [3]1. У TForm3 св-во Visible установи в False
2.
procedure TForm1.FormCreate(Sender: TObject);
var Child: TForm3;
begin
for i := 1 to TreeView1.Items.Count do
begin
Child := TForm3.Create(Application);
Child.Timer1.Interval:=i*1000;
Child.Name:="MyForm"+inttostr(i);
TreeView1.Items[i-1].Data := Pointer(Child) //связываем Node с формой
end;
end;
3.
Вызываем форму по DblClick:
procedure TForm1.TreeView1DblClick(Sender: TObject);
begin
if Assigned(TreeView1.Selected) then
if Assigned(TreeView1.Selected.Data) then
TForm3(TreeView1.Selected.Data).Show; // или ShowModal
end;
При уничтожении экземпляра TForm3 необходимо позаботиться о том, чтобы соотв. Node.Data принял значение nil, либо чтобы соответствующий Node был просто удален.
← →
agafon (2002-08-14 12:56) [4]Спасибо..
уже что то...
но проблема в следующем:
я поставил кнопку "пуск" , при нажатии меняется на "Стоп".
и наоборот.
так вот, на 1 дочернем окне нажимаю пуск -он стал "стоп", открываю второе окно - там тоже стоп, то есть кнопки, как бы запараллелены.
а мне нужно, чтобы процессы были сами по себе, независимо
← →
McSimm (2002-08-14 13:02) [5]>то есть кнопки, как бы запараллелены.
Даже не представляю себе как такое может получиться...
← →
agafon (2002-08-14 13:10) [6]то есть должно быть все отдельно или от того, что у меня получилось не уйти?
← →
agafon (2002-08-14 13:14) [7]вссе. вроде сделал.
скажи мыло - я тебе вышлю проект...
у меня куча вопросов.
у тебя RX библиотека стоит?
← →
McSimm (2002-08-14 13:18) [8]это несерьезно.
Есть вопросы - задавай. Будет желание - ответят.
А такая постановка вопроса больше похожа на наем.
В принципе персональные консультации и выполнение работ вполне возможны, но на других условиях.
:)
← →
agafon (2002-08-14 13:21) [9]ладно...
в каждой дочерней форме у меня стоит таймер
каждую секунду i:=i+1;
сейчас открыл все три запущенных окна и увидел , что i суммируются...
то есть идет не 1,2,3
а 1,4,7 и т д
тут в чем проблема?
← →
McSimm (2002-08-14 13:30) [10]Здесь все очень просто.
Переменная i у тебя описана глобально и для всех форм это одна и та же переменная.
Чтобы для каждого экземпляра формы был независимый счетчик надо делать его членом класса TForm3. Тогда каждый экземпляр этого класса будет работать со своими данными.
type TForm3 = class(TForm)
...
private {или public}
MyCount: Integer;
...
← →
agafon (2002-08-14 13:55) [11]for i := 1 to TreeView1.Items.Count do
begin
Child := Tfmavtovis.Create(Application);
Child.Name:="MyForm"+inttostr(i);
TreeView1.Items[i-1].Data := Pointer(Child)
TreeView у меня выглядет так:
Item1
11111
22222
3333
Item2
11111
22222
33333
как сделать
, чтобы на верхние
Child := ТItem1.Create(Application);
а на нижние
Child := ТItem2.Create(Application);
а на сами Item1, Item2 открывались другие окна?
← →
McSimm (2002-08-14 14:14) [12]Если я правильно понял условие - то
Количество узлов верхнего уровня (Item1, Item2,...) ограничено и заранее известно, т.к. соответствует типам форм (TForm2, TForm3, ...)
Тогда можно сделать так:
procedure TForm1.FormCreate(Sender: TObject);
var
Child: TForm;
I: Integer;
begin
for I := 0 to TreeView1.Items.Count - 1 do
begin
if Assigned(TreeView1.Items[I].Parent) then
begin
if TreeView1.Items[I].Parent.Text = "Item1" then
begin
Child := TForm2.Create(Application);
// Настройка свойств формы
// Child.Name:="MyForm"+inttostr(i+1);
end else
if TreeView1.Items[I].Parent.Text = "Item2" then
begin
Child := TForm3.Create(Application);
// Настройка свойств формы
// Child.Name:="MyForm"+inttostr(i+1);
end;
TreeView1.Items[I].Data := Pointer(Child)
end;
end;
end;
← →
agafon (2002-08-14 14:40) [13]как в TreeView1 получить текст выбранной позиции (если без индексов)?
← →
McSimm (2002-08-14 15:11) [14]if Assigned(TreeView1.Selected) then S := TreeView1.Selected.Text
else S := "";
← →
agafon (2002-08-14 15:20) [15]а имя родителя + TreeView1.Selected.Text ?
← →
McSimm (2002-08-14 15:31) [16]Родителя можно найти по свойству Parent. Не забыв проверить его на nil (if Assigned(SomeNode.Parent) then...)
Вот, например, получение полного нода:
S := "";
Node := TreeView1.Selected;
while Assigned(Node) do
begin
S := " - " + Node.Text;
Node := Node.Parent
end;
if S <> "" then System.Delete(S, 1, 3); // удалить лишние " - "
← →
McSimm (2002-08-14 15:35) [17]Есть справка. Постарайся перед тем как задать вопрос попытаться найти ответ самому.
Иначе подобные простые вопросы никогда не исчезнут.
А на них не всегда ответят...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c