Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.12.26;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1284625750
SPeller
2010-09-16 12:29
2010.12.26
Кто разбирается в ОО проектировании? Совет бы мне...


2-1285833478
Jacksotnik
2010-09-30 11:57
2010.12.26
Помогите с запросом


2-1285805956
HF-Trade
2010-09-30 04:19
2010.12.26
Назначить диапазону массива значения


2-1285589727
istok
2010-09-27 16:15
2010.12.26
convert LSA_UNICODE_STRING to string


2-1286078679
mdel
2010-10-03 08:04
2010.12.26
юникод в delphi7





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский