Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.26;
Скачать: CL | DM;

Вниз

Resize формы   Найти похожие ветки 

 
Германн ©   (2010-09-26 02:50) [0]

Д2007
Есть форма. На ней PageControl с двумя вкладками. Нужно ограничить максимальные ширину и высоту формы, но в зависимости от того какая вкладка PageControl активна.
При этом на одной вкладке TStringGrid с Align = alClient, в котором я при Resize пересчитываю ширину колонок так, чтобы ущерб информационности был минимальным. На другой вкладке TTreeView + TPanel, для которых есть свои пожелания о минимальной ширине.
Дайте совет по реализации такого чуда. У меня пока что плохо получается.


 
Loginov Dmitry ©   (2010-09-26 09:27) [1]


> Дайте совет по реализации такого чуда.


Мой совет - не делать такого чуда :)

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


 
Юрий Зотов ©   (2010-09-26 12:04) [2]

Присоединяюсь к Дмитрию. Очень некрасиво это, когда размер формы "прыгает" при переключении вкладок.


 
Юрий Зотов ©   (2010-09-26 14:28) [3]

Но если все же есть непреодолимое желание - то см. WM_GETMINMAXINFO.


 
Palladin ©   (2010-09-26 14:30) [4]

Присоединяюсь к Юрию.

P.S.: Состав поезда - не нарушать!


 
Германн ©   (2010-09-27 01:17) [5]


> Мой совет - не делать такого чуда :)

Я пожалуй еще помучаюсь :)

> Очень некрасиво это, когда размер формы "прыгает" при переключении
> вкладок.

Да нет. В данном конкретном случае нормально


 
Германн ©   (2010-09-27 01:27) [6]

Встретил интересный то ли глюк, то фичу. Не пойму.
Странно работает alClient.
Вот код
pas
unit Unit26;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, Grids;

type
 TForm26 = class(TForm)
   PageControl1: TPageControl;
   TabSheet1: TTabSheet;
   TabSheet2: TTabSheet;
   StringGrid1: TStringGrid;
   TreeView1: TTreeView;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form26: TForm26;

implementation

{$R *.dfm}

end.


dfm
object Form26: TForm26
 Left = 0
 Top = 0
 Caption = "Form26"
 ClientHeight = 293
 ClientWidth = 426
 Color = clBtnFace
 Constraints.MinWidth = 100
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "Tahoma"
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object PageControl1: TPageControl
   Left = 0
   Top = 0
   Width = 426
   Height = 293
   ActivePage = TabSheet1
   Align = alClient
   TabOrder = 0
   object TabSheet1: TTabSheet
     Caption = "TabSheet1"
     object StringGrid1: TStringGrid
       Left = 0
       Top = 0
       Width = 418
       Height = 265
       Align = alClient
       TabOrder = 0
       ExplicitLeft = 96
       ExplicitTop = 104
       ExplicitWidth = 320
       ExplicitHeight = 120
     end
   end
   object TabSheet2: TTabSheet
     Caption = "TabSheet2"
     ImageIndex = 1
     object TreeView1: TTreeView
       Left = 0
       Top = 0
       Width = 418
       Height = 265
       Align = alClient
       Constraints.MinWidth = 350
       Indent = 19
       TabOrder = 0
       ExplicitLeft = 64
       ExplicitTop = 48
       ExplicitWidth = 121
       ExplicitHeight = 97
     end
   end
 end
end


dpr
program Project23;

uses
 Forms,
 Unit26 in "Unit26.pas" {Form26};

{$R *.res}

begin
 Application.Initialize;
 Application.MainFormOnTaskbar := True;
 Application.CreateForm(TForm26, Form26);
 Application.Run;
end.


Если ни разу не открывать вторую закладку, то StringGrid1 при любых размерах формы всегда alClient. Но стоит лишь хоть раз открыть вторую вкладку как сразу AlClient у StringGrid1 работает только при ширине окна большем некоторого значения.


 
Jumbo   (2010-09-27 01:43) [7]

>>Нужно ограничить максимальные ширину и высоту формы, но в зависимости от того какая вкладка PageControl активна.

procedure TForm1.TabSheet1Show(Sender: TObject);
begin
 Constraints.MaxWidth := 500;
//  Constraints.MinWidth := 500;
 Constraints.MaxHeight := 400;
//  Constraints.MinHeight := 400;
end;

procedure TForm1.TabSheet2Show(Sender: TObject);
begin
 Constraints.MaxWidth := 600;
//  Constraints.MinWidth := 600;
 Constraints.MaxHeight := 500;
//  Constraints.MinHeight := 500;
end;


 
Германн ©   (2010-09-27 02:04) [8]


> Германн ©   (27.09.10 01:27) [6]

В Д6 такой же глюк.


 
Германн ©   (2010-09-27 02:09) [9]


> Jumbo   (27.09.10 01:43) [7]

Иду пока в направлении указанном ЮЗ в [3].
Т.е. плюю на VCL-ные фишки типа Constraints и обрабатываю WM_GETMINMAXINFO.

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


 
sniknik ©   (2010-09-27 10:16) [10]

> Т.е. плюю на VCL-ные фишки типа Constraints и обрабатываю WM_GETMINMAXINFO.
плевать можно только не используя совсем, в ином случае ты от него зависишь...

похоже ресайз не отрабатывает(/криво) у контрола, попробуй добавить типа -

procedure PageControlResize(Sender: TObject);
begin
 TabSheet.Width := PageControl.ClientWidth;
 TabSheet.Height:= PageControl.ClientHeight;
end;


 
Германн ©   (2010-09-28 01:20) [11]


> sniknik ©   (27.09.10 10:16) [10]
>
> > Т.е. плюю на VCL-ные фишки типа Constraints и обрабатываю
> WM_GETMINMAXINFO.
> плевать можно только не используя совсем, в ином случае
> ты от него зависишь...
>

Кажись начинаю понимать, что плевать на VCL-ные фишки не так-то просто. :(
В тестовом проекте всё шло как по маслу. В рабочем - AV.


 
Anatoly Podgoretsky ©   (2010-09-28 08:56) [12]

> Германн  (28.09.2010 01:20:11)  [11]

Доплевался :-)


 
Jumbo   (2010-09-28 10:02) [13]

"Ежики ругались, плакали, но упорно продолжали лезть на кактус" (С)

Чем Constraints не угодил-то? Названием? Две строки кода - и все проблемы решены. А ты который день подряд продолжаешь изобретать велосипед.


 
Германн ©   (2010-09-28 19:54) [14]


> Чем Constraints не угодил-то?

Тестовый проект приведенный  выше как раз Constraints использует и имеет при этом глюк связанный явно с ними.


 
Jumbo   (2010-09-28 20:25) [15]

Установи для StringGrid те же ограничения, что и для TreeView (в примере 350). Вообще можно Constraints устанавливать для всей формы. Да, глюк, но не смертельный же...


 
Германн ©   (2010-09-29 03:24) [16]


> Jumbo   (28.09.10 20:25) [15]
>
> Установи для StringGrid те же ограничения, что и для TreeView
> (в примере 350).


> Вообще можно Constraints устанавливать для всей формы.

Прочитай ещё раз сабж. Посмотри на мой тестовый пример. И перестань быть анонимом aka ёжиком :)



Страницы: 1 вся ветка

Текущий архив: 2010.12.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.009 c
4-1243039481
Warner
2009-05-23 04:44
2010.12.26
Эмулирование нажатия комбинации клавиш CTRL+<стрелка>


2-1286186824
Overclocker
2010-10-04 14:07
2010.12.26
Работа с файлами


15-1284723086
И. Павел
2010-09-17 15:31
2010.12.26
Как преобразовать строку "123" в "1,2,3" в MS SQL 2005


2-1285616407
istok
2010-09-27 23:40
2010.12.26
проблемка с LsaGetLogonSessionData...


2-1285804432
slai
2010-09-30 03:53
2010.12.26
Таблица и строки