-
Дата создания MDI окна
Подскажите пожалуйста, можно ли как то получить (делфи) дату-время открытия окна. Это нужно что бы при закрытия приложения можно было все дочерние окна(каскады) закрывать строго в обратном порядке для корректного сохранения данных? Или надо вводить переменную в форму типа дата и по ней сортировать потом окна при закрытии.. Но форм много . Не хочется все менять.... Может винда хранить гдето автоматом дату-время...
-
сделать можно конечно - модифицировать класс формы, т.е создать класс-наследник с нужными св-вами и методами.
Но сама идея не корректна - если менялись данные в дочерних формах и пользователь их не сохранил - автоматом что-то сохранять не стоит.
-
[QUOTE=sin-st;1860856]Подскажите пожалуйста, можно ли как то получить (делфи) дату-время открытия окна. Это нужно что бы при закрытия приложения можно было все дочерние окна(каскады) закрывать строго в обратном порядке для корректного сохранения данных?
[/QUOTE]
А почему для корректного сохранения данных нужно закрывать окна в определенном порядке? :shock:
[QUOTE=sin-st;1860856]
Может винда хранить гдето автоматом дату-время...[/QUOTE]
Нет. В истории программирования это еще никому не было нужно. :rzhu_nimagu:
-
зачем такие сложности?
1. при создании окна пишешь MDiForm.Caption:='YourCaption ('+DateToStr(Now)+')';
результат : в заголовке сидит дата создания
2. При закрытии (идея состоит в создании массива с номерами дочерних окон записанных по возрастанию/убыванию)
SetLength(MDI_Indexes,MainForm.MDIChildCount);
CurDate:=Date(Now); // получение текущей даты для начала сортировки
for i:=0 to MainForm.MDIChildCount-1 do
begin
TempDate:=StrToDate(Copy(MDIChildren[i].Caption, ')', Length(DateToStr(Now)));
{
тут сам напишешь алгоритм пузырьковой сортировки индексов "детей"
}
end;
// после получения сортированного массива индексов делаешь такое
For i:=0 to Length(MDI_Indexes)-1 do
begin
MainForm.MDIChildren[i].BringToFront; //закрываемая форма на передний план
// далее необходимые действия перед закрытием окна
MainForm.MDIChildren[i].Free; //убиваем ребенка аки Тарас Бульба
end;
-
и даже еще проще.
дети, создаваясь один за другим - индексируются.
Соотвествено дите, созданное позже - получает больший индекс.
для того, чтобы закрывать их в обратном порядке, тебе надо просто пустить цикл по
For i:=MainForm.MDIChildCount-1 downto 0 do
begin
MainForm.MDIChildren[i].BringToFront;
// действия перед закрытием формы
MainForm.MDIChildren[i].Free;
end