Topic: прокручивание формы

Есть ли возможность на первой форме, расположить допустим кусок второй, с возможностью скролинга? То есть вторая форма бы была видна не полностью, но могла прокручиваться вниз.

Re: прокручивание формы

agatlogic101 wrote:

Есть ли возможность на первой форме, расположить допустим кусок второй, с возможностью скролинга? То есть вторая форма бы была видна не полностью, но могла прокручиваться вниз.

используйте Parent

Form2.Parent:=Form1;
Form2.Show;

 
скролинг формы

Form1.AutoScroll:=True;

3 (edited by agatlogic101 2020-03-04 09:44:40)

Re: прокручивание формы

А что бы в панели поместить другую форму? Я попробовал по аналогии, но ничего не получилось

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
  Form1.Panel1.Parent:=Form2;
end;

Смысл в том, что у меня на форме есть много слоёв панелей, которые при том или ином образе должны отображаться или скрываться. И их очень неудобно редактировать в таком случае. Поэтому решил слои распределить по формам и их уже отображать на панели. Вопрос
1) Каким скриптом это реально сделать
2) Есть ли еще какие то альтернативные способы при редактировании, что бы было удобно работать с слоями, или если по другому говоря, с большим количеством панелей с разными настройками visible в зависимости от условий. Так как визуально для меня они накладываются друг на друга и в редакторе видно в итоге только одну верхнюю.

Re: прокручивание формы

Form2.Parent:=Form1.Panel1

к чему применяем :=Куда помещаем 
 
Вам в таком случае проще использовать закладки (PageControl)

Re: прокручивание формы

Оу, с PageControl вариант, а возможно скрыть скриптом выбор вкладок? Что бы малых прямоугольников "Вкладка1" "Вкладка2" не было видно при запуске формы?

Re: прокручивание формы

agatlogic101 wrote:

Оу, с PageControl вариант, а возможно скрыть скриптом выбор вкладок? Что бы малых прямоугольников "Вкладка1" "Вкладка2" не было видно при запуске формы?

Form1.PageControl1.Pages[0].TabVisible:=False;  
Form1.PageControl1.Pages[1].TabVisible:=False;  

Re: прокручивание формы

agatlogic101 wrote:

Оу, с PageControl вариант, а возможно скрыть скриптом выбор вкладок? Что бы малых прямоугольников "Вкладка1" "Вкладка2" не было видно при запуске формы?

Процедура скрывает все ярлыки закладок у многостраничника:

procedure HideTabs( APageControl: TdbPageControl );
// скрыть закладки
var
  i: integer;
begin
  for i := 0 to APageControl.PageCount - 1 do
  begin
    APageControl.Pages[i].TabVisible := false;
  end;
end;

Пример использования:

HideTabs( Form1.PageControl1 );
Визуальное программирование: блог и телеграм-канал.

Re: прокручивание формы

agatlogic101 wrote:

А что бы в панели поместить другую форму? Я попробовал по аналогии, но ничего не получилось
...

Попробуйте использовать эту процедуру:

// отобразить форму на панели
procedure ShowFormOnPanel(AForm:TAForm; APanel:TdbPanel);
var
  tmpGrid: TdbStringGridEx;
  tmpButton: TdbButton;
begin
  // отстёгиваем предыдущую форму от панели
  if ActiveForm <> nil then
  begin
    // если вызвали отображение текущей активной формы - ничего не делать
    if ActiveForm = AForm then
      exit;
    // спрятать текущую активную форму и отстегнуть её от панели
    ActiveForm.Visible := false;
    ActiveForm.Parent := nil;
    SetParent( ActiveForm.Handle, nil);
  end;
  if AForm.Visible then
  begin
    ShowMessage(S_ERR_SHOW_ON_PANEL);
  end
  else
  begin
    // подготавливаем форму
    AForm.borderStyle := bsNone;
    AForm.Align := alClient;
    // накидываем её на панель
    AForm.Parent := APanel;
    SetParent( AForm.Handle, APanel.Handle);
    AForm.visible := true;
    ActiveForm := AForm;
    // автоматизация
    // 1. нажатие кнопки для обновления табличных данных
    tmpButton := TdbButton(AForm.FindComponent('btnSearch'));
    if tmpButton<>nil then
    begin
      tmpButton.Click;
    end
    else
    begin
      // 2. обновление табличных данных, если кнопки нет
      tmpGrid := TdbStringGridEx(AForm.FindComponent('tgrMain'));
      if tmpGrid<>nil then
      begin
        tmpGrid.dbUpdate;
      end;
    end;
    UpdateMainFormCaption();
  end;
end;

Кроме отображения формы на панели она обновляет табличные данные на форме. Подробней о данном решении можно прочитать здесь: https://vk.com/@createmyvisualdatabasea … lya-dannyh    В конце статьи - ссылка на пример для скачивания.

Визуальное программирование: блог и телеграм-канал.

Re: прокручивание формы

k245 wrote:
agatlogic101 wrote:

Оу, с PageControl вариант, а возможно скрыть скриптом выбор вкладок? Что бы малых прямоугольников "Вкладка1" "Вкладка2" не было видно при запуске формы?

Процедура скрывает все ярлыки закладок у многостраничника:

procedure HideTabs( APageControl: TdbPageControl );
// скрыть закладки
var
  i: integer;
begin
  for i := 0 to APageControl.PageCount - 1 do
  begin
    APageControl.Pages[i].TabVisible := false;
  end;
end;

Пример использования:

HideTabs( Form1.PageControl1 );

попробовал применить, в итоге Вкладки исчезают, но и информация полностью на этой вкладке пропадает

Post's attachments

Attachment icon тест.zip 334.89 kb, 268 downloads since 2020-03-11 

Re: прокручивание формы

agatlogic101 wrote:

попробовал применить, в итоге Вкладки исчезают, но и информация полностью на этой вкладке пропадает

как только вы программно переключите страницу, всё вернется на место:

Form1.PageControl1.ActivePageIndex := 1;
Form1.PageControl1.ActivePageIndex := 0;

Видимо, при изменении свойства страницы TabVisible меняется и свойство Visible

Визуальное программирование: блог и телеграм-канал.

Re: прокручивание формы

все компоненты установленные на вкладке так же  visible:=False ,  и это абсолютно естественно Вы ведь скрываете вкладку а значит все что установлено на ней то же исчезнет //
по умному - это наследование  свойств

12 (edited by agatlogic101 2020-03-12 10:31:09)

Re: прокручивание формы

Нашёл пример на форуме, там как я понял реализовано через Form1.PageControl1.ActivePageIndex, что даёт упрощение кода, где нет бесконечных visible := True;
http://myvisualdatabase.com/forum/viewtopic.php?id=5786

Re: прокручивание формы

agatlogic101 wrote:

А что бы в панели поместить другую форму? Я попробовал по аналогии, но ничего не получилось

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
  Form1.Panel1.Parent:=Form2;
end;

Смысл в том, что у меня на форме есть много слоёв панелей, которые при том или ином образе должны отображаться или скрываться. И их очень неудобно редактировать в таком случае. Поэтому решил слои распределить по формам и их уже отображать на панели. Вопрос
1) Каким скриптом это реально сделать
2) Есть ли еще какие то альтернативные способы при редактировании, что бы было удобно работать с слоями, или если по другому говоря, с большим количеством панелей с разными настройками visible в зависимости от условий. Так как визуально для меня они накладываются друг на друга и в редакторе видно в итоге только одну верхнюю.

Я вот сделал 10 кнопок на главной форме и каждая открывает отдельную форму в Panel4 за счет скрипта:
  frmMain.Left:=frmStart.Panel4.Left;
  frmMain.Top:=frmStart.Panel4.Top;
  frmMain.Width:=frmStart.Panel4.Width;
  frmMain.Height:=frmStart.Panel4.Height;

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