Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-84933
restless
2002-08-07 11:11
2002.08.26
Таблицы в приложении


14-85236
greenrul
2002-07-26 16:32
2002.08.26
Сайт P2P : взаимовыгодный перевод программ


1-84958
Hawk2
2002-08-15 10:52
2002.08.26
Снова Excel, а точнее форматирование.


14-85203
Alexey-neo
2002-04-28 20:44
2002.08.26
Как работать с модемом???


14-85165
Nikolay
2002-07-29 17:27
2002.08.26
Драйвер для CDRW





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский