Консультация № 35635
17.02.2006, 18:50
0.00 руб.
0 4 3
Добрый день!!!
В принципе я мог бы не изобретать велосипед и воспользоваться вещами общепринятыми но хочется знать все.

Вопрос такой.
Проектирую многооконный интерфейс MDI, допустим какой нибудь редактор текстов.

В принципе для окон можно использовать Page или Tab Control, но я молодой и мне хочется найти другой путь, сделать для контроля отображения MDIChildren-ов кнопки SpeedButton, с использованием всех ее достоинств и "недостатков"

Q1: Как правильно отловить событие OnClick на кнопке, для того чтобы показать, закрыть(управлять) соответствующей ей, MDIChild формой ?

Q2: Честно говоря интересно спросить у знающих, на сколько < или > такая конструкция занимает место в памяти??
Для меня Важно количство занимаемой памяти.

Спасибо.


Обсуждение

Неизвестный
17.02.2006, 19:34
общий
это ответ
Здравствуйте, Андрей Темный!

Темны дела твои господи

1) Для того чтобы управлять MDIChild не требуется "отлавливать событие onClick"
Для того чтобы ими управлять есть несколько простых процедур (см. приложение) которые вызываются событием onClick от кнопки или меню. По MDI вообще желательно почитать книжки, чтобы использовать его полноценно.

2) Мне смешно, когда сегодня всерьез обсуждают "количество занимаемой памяти"
Если используется Delphi то наблюдается быстрый рост размера приложения от 200к до 1,5Мб, дальнейший рост резко замедляется. ЕСли используется много одинаковых компонентов, то размер приложения практически не растет.
У меня достаточно сложное приложения с БД, с деревьями, вычислениями и протоколами и я с трудом перевалил за 3.5Мб. Сейчас уже нет компьютеров, для которых такой размер являлся бы какой-то проблемой.



Приложение:
procedure TMainForm.FileNew1Execute(Sender: TObject);begin CreateMDIChild(‘NONAME‘ + IntToStr(MDIChildCount + 1));end;procedure TMainForm.FileOpen1Execute(Sender: TObject);begin if OpenDialog.Execute then CreateMDIChild(OpenDialog.FileName);end;procedure TMainForm.btnFileSaveClick(Sender: TObject);Var rpFileName : String; rpExtIndex : Integer;begin If not (ActiveMDIChild=nil) then begin If ActiveMDIChild is TfmAddressFull then TfmAddressFull(ActiveMDIChild).SaveFile(Sender); If ActiveMDIChild is TfmGoodsEdit then TfmGoodsEdit(ActiveMDIChild).SaveFile(Sender); If ActiveMDIChild is TfmPropNameEdit then TfmPropNameEdit(ActiveMDIChild).SaveFile(Sender);// If ActiveMDIChild is TfmContract then TfmContract(ActiveMDIChild).SaveFile(Sender); end else begin If SaveDialog.Execute then begin rpFileName := SaveDialog.FileName; rpExtIndex := SaveDialog.FilterIndex; If (rpExtIndex=1) then SaveAsSQL1(Self,rpFileName);// If (rpExtIndex=2) then fmHttpHost.SaveAsRTF1(Self,rpFileName); end; end;end;
давно
Мастер-Эксперт
425
4118
17.02.2006, 19:46
общий
это ответ
Здравствуйте, Андрей Темный!
1. Если честно, даже не знаю чем вызван Ваш вопрос. OnClick не надо отлавливать. Весь код "отлова" уже готов внутри компонента и Вам нужно только событию OnClick присвоить Вашу процедуру. Видимо Вы неправильно сформулировали вопрос.
2. Ну во-первых, какая конструкция? Что Вы под словом "конструкция" имели в виду? Во-вторых, больше или меньше по сравнению с чем? Ведь больше или меньше - это понятия сравнения и сами по себе они не имеют никакого значения.
**********************
Если мой ответ Вас не удовлетворил, то постарайтесь воздержаться от оценки, т.к. правильно заданый вопрос - 50% ответа. Не сердитесь. :)
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
17.02.2006, 22:28
общий
это ответ
Здравствуйте, Андрей Темный! Уточните пожалуйста вопрос: У вас для каждой формы создается своя кнопка или я чего-то не понял? Если вопрос именно в этом сообщите, вышлю пример.
Неизвестный
17.02.2006, 23:42
общий
для Leshiy2006В принципе да. Т.е. для каждой вновь созданной ChildForm, существует кнопка, ровно также как и наоборот. Т.е Если кнопку убить то должно убиться и Child, вместе с которым она создавалась.
Форма ответа