Delphi 5. Учебник



         

Написание кода



    Создав интерфейс, перейдем к написанию исходного текста приложения, который будет очень похож на код для SDI-приложения.
    Сначала загрузим изображение. Введите следующий код в обработчик события OnClick компонента spbtnLoad.

    procedure TfrmMDIParent.spbtnLoadClick(Sender: TObject);
    begin
        if opndlgLoad.Execute then
            with TfrmMDIChild.Create(Application) do
            begin
                Caption:= opndlgLoad.FileName;
                imgMain.Picture.LoadFromFile(opndlgLoad.FileName);
                ClientWidth:= imgMain.Picture.Width;
                ClientHeight:= imgMain.Picture.Height;
            end;
      end;

    После запуска диалогового окна создается новый экземпляр дочерней формы и загружается файл изображения. После загрузки размеры дочерней формы изменяются так, чтобы можно было видеть все изображение.
    Еще пара штрихов— и приложение заработает, как и предусматривалось. Поскольку модуль ссылается на тип TfrmMDIChild, находящийся в модуле MDIChild, после строки implementation следует добавить еще одну строку:

    uses MDIChild;

    Теперь можно приступить к компиляции и запуску приложения. Однако заметьте, что, когда вы щелкаете на кнопке Close, дочерняя форма не закрывается, а сворачивается в пиктограмму. Чтобы заставить ее закрыться, следует добавить в код обработчика OnClose класса TfrmMDIChild маленькую деталь— изменить свойство Action:

    Action:= caFree;

    Компоненты TSpeedButton Stretch и Center выполняют те же функции, что и в SDI-приложении, однако их обработчики события OnClick следует изменить следующим образом

if not (ActiveMDIChild = Nil) then
     if ActiveMDIChild 15 TfrmMDIChild then
        TfrmMDIChild(ActiveMDIChild).imgMain.Stretch:= spbthStretch.Down;

и

if not (ActiveMDIChild = Nil) then
    if ActiveMDIChild is TfrmMDIChild then
        TfrmMDIChild(ActiveMDIChild).imgMain.Center:= spbthCenter.Down;

    Остается последняя проблема — состояния кнопок Stretch и Center одинаковы для всех дочерних форм Для решения этой задачи добавьте в обработчик события OnActivate класса TfrmMDIChild строки.

    frmMDIParent.spbtnStretch.Down:= imgMain.Stretch;
    frmMDIParent.spbtnCenter.Down:= imgMain.Center;

    И, наконец, самый последний из последних штрихов— в модуле MDIChild добавьте после строки implementation строку.

    uses MDIParent;

    Компилируйте, запускайте и смотрите. MDI-приложение создано!
ПРЕДОСТЕРЕЖЕНИЕ: В этом примере присвоение нового значения свойству Down класса TSpeedButton вызывало событие Оn-click. Будьте осторожны при написании кода обработчика события, который генерирует новое событие путем присвоения значения свойству, ведь при этом можно создать бесконечную рекурсию. 




Содержание  Назад  Вперед