Создание обьектов, изменение положения и размера обьектов [D7, Win]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Exile1985, 20 Jun 2007.

  1. Exile1985

    Exile1985 Elder - Старейшина

    Joined:
    10 Aug 2006
    Messages:
    124
    Likes Received:
    35
    Reputations:
    1
    Доброго всем времени суток!

    Народ, у меня такой вопрос: допустим есть программа у которой две формы. 1-я форма - это меню и панель инстументов, на второй форме ничего нет, т.е. она полностью пустая.

    у 1-й формы на панели инструментов есть к примеру кнопки c именами:
    Button и Memo.

    возможно ли сделать так чтобы при щелчке на кнопке с именем Button и последующем щелчке на форме в любом ее месте там появлялся бы компонент Button1, т.е. если говорить точнее возможно ли добовлять обьекты (Button, memo и тд) уже в работающей программе, что нибудь вроде:
    Application.CreateButton (TButton1, Button1);

    Пытался решить сам эту проблемму, была идея кинуть на форму TImage и в нее загружать только картинки обьектов а не создавать сами обьеты, а работать уже как бы с "реальными" обьектами, но тут опять проблемма, можно ли и главное как создать уже в работающей проге, заранее неизвестное количество обьектов TImage.


    Второй вопрос заключается в том что, есть к примеру на форме кнопка (TButton или любой другой обьект) как можно сделать так чтобы при щелчке на этой кнопке, кнопка бы выделялась рамкой, так как это вы видите в делфи когда кидаете на форму кнопке и хотите изменить ее размеры или ее положение, в принципе для этих же целей я и ищу ответ на этот ворос.

    Как изменить положение кнопки или ее размеры эт я знаю, но не удобно будет работать когда не знаешь какой обьект выделен.

    надеюсь Вы мне поможете, я не прошу написать мне код, подскажите в каком направлении копать, что юзать с чем работать чтобы это реализовать.


    Добавлено:

    народ, с созданием обьектов в работающей проге уже разобрался, остальные вопросы остаются открытыми, в частности Как сделать рамку вокруг обьектов при щелчке левой кнопкой мыши на нем.

    ЗЫ вот может кому пригодится, как создавать обьекты в рабоающей проге, например Button:


    Code:
    var
    TempComponent:TButton;
    begin
    TempComponent:=TButton.Create(Form1);
    TempComponent.Left:=10;
    TempComponent.Top :=10;
    TempComponent.Width := 120;
    TempComponent.Height := 24;
    Form1.InsertControl(TempComponent);
    end;
     
    #1 Exile1985, 20 Jun 2007
    Last edited: 20 Jun 2007
  2. Xserg

    Xserg Elder - Старейшина

    Joined:
    9 Dec 2006
    Messages:
    135
    Likes Received:
    127
    Reputations:
    53
    Тыкаем по Form DblClick
    И редактируем размеры и положение кнопки
    Еще раз тыкаем DblClick и используем кнопку как обычно
    Code:
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    if tag=1 then begin
    with Sender as Tcomponent do
     if tag=555 then begin
     with Sender as TButton do begin
     SetWindowLong(handle,GWL_STYLE,
     GetWindowLong(handle,GWL_STYLE)or WS_BORDER  or WS_SIZEBOX);
     ReleaseCapture;
     Perform(WM_SYSCOMMAND,SC_MOVE+2,0);
                              end;
                     end else begin
     for i:=0 to form1.ComponentCount-1 do
      if form1.Components[i].Tag=555 then
      with form1.Components[i] as TButton do begin
       SetWindowLong(handle,GWL_STYLE,
       GetWindowLong(handle,GWL_STYLE)and not(WS_BORDER  or WS_SIZEBOX));
       Visible:=false;Visible:=true; ; // так проще
                                           end; 
                              end;
                   end;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    // установка обработчика mousevent созданного компонента
    Button1.Tag:=555;
    Button1.OnMouseDown:=FormMouseDown;
    end;
    
    procedure TForm1.FormDblClick(Sender: TObject);
    begin
    // включение - выключение редактирования компонента
    if Form1.Tag=0 then Form1.Tag:=1 else Form1.Tag:=0;
    end;