pimshtein

Forum Replies Created

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • pimshtein
    Participant

    QUOTE (Torbins @ Apr 5 2010, 01:53 PM) <{POST_SNAPBACK}>
    Нет, кнопки всегда будут в одном и том же месте. И причем тут вообще разрешение экрана? Вот если разный DPI, тогда да, там кнопки по идее должны изменять размер и положение. Обычно это реализуют перекрывая метод ChangeScale.

    Механизмы те же, что и всегда: Align, Anchors и т д.


    Вопрос в связи с этим:
    в примере Demo есть такая функция – ShowFrameBar (показывает или скрывает фрэйм на форме).
    я там добавил такой код

    RichEdit3.Width:=RichEdit3.Width-per;

    и

    RichEdit3.Width:=RichEdit3.Width+per;

    где per принимает ширину фрэйма

    но дело в том, что на разных компьютерах размеры RichEdit получаются разными…

    Как по вашему мнению нужно корректно изменять размеры компонентов? Куда копать.

    подскажите, пожалуйста. Может, литература какая-нибудь есть)

    pimshtein
    Participant

    QUOTE (plasticut @ Apr 5 2010, 05:46 AM) <{POST_SNAPBACK}>
    Немного расширю ))

    CODE
    TYourFrame = class(TFrame)
    private
    fButton: TsSpeedButton;
    public
    procedure CreateButtons;
    procedure DestroyButtons;
    end;

    procedure TYourFrame.CreateButtons;
    begin
    sb := TSpeedButton.Create(Self); //параметр – контрол ответственный за удаление кнопки
    sb.Left := 10;
    sb.Top := 10;
    sb.Parent := Self; //отображаем на форме
    end;

    procedure TYourFrame.DestroyButtons;
    begin
    if Assigned(sb) then FreeAndNil(sb);
    end;

    //


    TMainForm.FrameBarItems0CreateFrame(Sender: TObject;
    var Frame: TCustomFrame);
    begin
    Frame := TYourFrame.Create(Self);
    end;

    // Создали кнопки
    if Assigned(FrameBar.Items[0].Frame) then TYourFrame(FrameBar.Items[0].Frame).CreateButtons;
    // Удалили кнопки
    if Assigned(FrameBar.Items[0].Frame) then TYourFrame(FrameBar.Items[0].Frame).DestroyButtons;

    Уважаемый plasticut! У меня к Вам вопрос:
    В этом коде – существует ли вероятность того, что кнопки с расположением
    sb.Left := 10;
    sb.Top := 10;
    при разных разрешениях экрана будут находиться в разных, порой непредсказуемых местах?)
    И, если да, то хотелось бы расширить вопрос и узнать Ваше мнение – как вообще, при использовании компонентов alphaskins корректно изменять размеры разнообразных компонентов. Например, если требуется их сдвиг, растяжение, уменьшение и т.д.
    Спасибо.

    pimshtein
    Participant

    QUOTE (plasticut @ Apr 1 2010, 09:36 AM) <{POST_SNAPBACK}>
    sFrameBar1.OpenItem(1, True);


    Спасибо, помогло.

    in reply to: TsTitleItem #41946
    pimshtein
    Participant

    QUOTE (plasticut @ Mar 18 2010, 03:44 PM) <{POST_SNAPBACK}>
    FrameUpgrade:=TFrame1.Create(Self);


    Спасибо, разобрался.
    Если кому-то будет интересным, то вот статья, в которой разбирается использование параметров 'nil', 'self', 'application' при использовании конструкторов.
    http://delphi.about.com/od/adptips2005/qt/nilselfapp.htm

    in reply to: TsTitleItem #41937
    pimshtein
    Participant

    QUOTE (Support @ Mar 18 2010, 07:17 AM) <{POST_SNAPBACK}>
    С событием OnDestroyFrame проблема решена?


    Да, спасибо большое.
    В событии OnDestroyFrame необходимо сделать следующее:
    CanClose:=false; (то есть мы не хотим, чтобы фрэйм уничтожался при закрытии, как и написано у вас в справке).
    Но теперь возникла другая проблема:
    Допустим, создаем фрейм:
    procedure Tl.sFrameBar1Items1CreateFrame(Sender: TObject;
    var Frame: TCustomFrame);
    begin
    FrameUpgrade:=TFrame1.Create(nil);
    Frame:=FrameUpgrade;
    end;
    FrameUpgrade объявлена как глобальная переменная.
    Как мне теперь грамотно уничтожить FrameUpgrade?
    При FrameUpgrade.Free вылетает Access Violation – при закрытии формы. (Если при этом CanClose:=false;). Если вообще забыть про уничтожение FrameUpgrade, то все без ошибок. Может я что-то не понимаю… Буду очень признателен, если объясните.

Viewing 5 posts - 1 through 5 (of 5 total)