Форум: "Основная";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
ВнизОтносительный резайз Найти похожие ветки
← →
Kolan © (2008-05-28 18:51) [0]Здравствуйте,
Есть форма и на ней, для примера, 10 кнопок в два ряда. Кнопки 75 на 25, между ними расстояние 8 (размеры указаны в пикселях).
Задача: При ресайзе формы кнопки должны резайзиться соответственно, причем расстояния между ними должны тоже увеличится соответственно.
Задачу надо решить используя Delphi. Решение должно работать для любых форм и контролов. Кроме того, желательно обойтис без написания кода вообще, а уж если писать, то один раз и навсегда.
Вопрос: Как это реализовать? Куда копать?
← →
Reindeer Moss Eater © (2008-05-28 19:00) [1]OnCanResize
type TCanResizeEvent = procedure(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean) of object;
← →
Reindeer Moss Eater © (2008-05-28 19:02) [2]Остается определить есть слева,справа,сверху, снизу от контрола другой контрол
← →
{RASkov} © (2008-05-28 20:46) [3]Попробуй такой вариант:
DFMobject Form1: TForm1
Left = 192
Top = 114
Width = 412
Height = 106
Caption = "Form1"
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnResize = FormResize
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 4
Top = 4
Width = 75
Height = 25
Caption = "Button1"
TabOrder = 0
end
object Button2: TButton
Left = 84
Top = 4
Width = 75
Height = 25
Caption = "Button2"
TabOrder = 1
end
object Button3: TButton
Left = 164
Top = 4
Width = 75
Height = 25
Caption = "Button3"
TabOrder = 2
end
object Button4: TButton
Left = 244
Top = 4
Width = 75
Height = 25
Caption = "Button4"
TabOrder = 3
end
object Button5: TButton
Left = 324
Top = 4
Width = 75
Height = 25
Caption = "Button5"
TabOrder = 4
end
object Button6: TButton
Left = 4
Top = 32
Width = 75
Height = 25
Caption = "Button6"
TabOrder = 5
end
object Button7: TButton
Left = 84
Top = 32
Width = 75
Height = 25
Caption = "Button7"
TabOrder = 6
end
object Button8: TButton
Left = 164
Top = 32
Width = 75
Height = 25
Caption = "Button8"
TabOrder = 7
end
object Button9: TButton
Left = 244
Top = 32
Width = 75
Height = 25
Caption = "Button9"
TabOrder = 8
end
object Button10: TButton
Left = 324
Top = 32
Width = 75
Height = 25
Caption = "Button10"
TabOrder = 9
end
end
PASunit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
ExtCtrls;
type
TCtrlStartParam = record
Left, Top, Width, Height: Integer;
end;
TCtrlStartParams = array of TCtrlStartParam;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
private
W, H: Integer;
CSP: TCtrlStartParams;
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var N: Integer;
begin
W:=ClientWidth;
H:=ClientHeight;
SetLength(CSP, ControlCount);
for N:= 0 to ControlCount-1 do begin
CSP[N].Left:=Controls[N].Left;
CSP[N].Top:=Controls[N].Top;
CSP[N].Width:=Controls[N].Width;
CSP[N].Height:=Controls[N].Height;
end;
end;
procedure TForm1.FormResize(Sender: TObject);
var KofW, KofH: Extended; N: Integer;
begin
KofW:=ClientWidth/W;
KofH:=ClientHeight/H;
for N:=0 to ControlCount-1 do begin
Controls[N].Left:=Round(CSP[N].Left*KofW);
Controls[N].Top:=Round(CSP[N].Top*KofH);
Controls[N].Width:=Round(CSP[N].Width*KofW);
Controls[N].Height:=Round(CSP[N].Height*KofH);
end;
end;
end.
С вложенными контролами нужно будет доработать, но там не сложно)
← →
{RASkov} © (2008-05-28 21:09) [4]Как былоб удобно прекреплять файлы архивов к посту....
Вот если об этом еще не известно и вдруг сюда заглянет Максим, то... как вариант для рассмотрения к новому форуму..... если он вообще конечно стартанет(форум новый) :)
← →
Eraser © (2008-05-28 21:44) [5]> [0] Kolan © (28.05.08 18:51)
Здача легко бы решалась с пом. стандартного компонента TGridPanel, если бы не
> причем расстояния между ними должны тоже увеличится соответственно.
но и это можно решить, меняя динамически padding"и при ресайзе TGridPanel.
← →
Kolan © (2008-05-28 22:03) [6]Код понял, благодарю, а может есть какие-то более штатные решения?
Кстати, подобный эффект можно получить используя TGridPanel.Вежливые вопросы и предложения по клиентскому протоколу и форуму можно писать на http://dev2.delphimaster.ru/forum/other/
© Максим
← →
Kolan © (2008-05-28 22:13) [7]Да, хорошобы, чтобы это все работало и в дизайнере.
> [5] Eraser © (28.05.08 21:44)
Так и не разобрался, как сделать, чтобы кнопки в ней увеличивались? При уменьшении она их поджимает, а при увеличении она возвращаются к начальным значениям, а бальше нет.
← →
MsGuns © (2008-05-28 22:54) [8]>Решение должно работать для любых форм и контролов. Кроме того, >желательно обойтис без написания кода вообще, а уж если писать, то один раз и навсегда.
Это фантастика.
Как "скоординировать" между собою такие разные контролы, как эдит и грид ?
Как учитывать и учитывать ли вообще внутренний ресайзинг (для контролов-контейнеров) ?
Как поступать с минимальными размерами, которые при достижении определенных величин изменяют вид контрола до неузнаваемости ?
Как быть с вертикальным переносом контролов и их ресайзингом ? Что делать с контролами, чей Height не может изменяться ?
Вопросов можно задать еще много. И ни на один из них нет ответа.
← →
Kolan © (2008-05-28 23:25) [9]HTML дает ответы на многие.
← →
MsGuns © (2008-05-29 11:02) [10]А где речь щла о хатмеле ?
← →
Kolan © (2008-05-29 14:56) [11]> А где речь щла о хатмеле ?
В том-то и дело, что нет, о Dlephi.
← →
Kolan © (2008-05-29 15:18) [12]> [3] {RASkov} © (28.05.08 20:46)
Как добиться, чтобы твой вариант срабатывал и во время дизайна?
← →
{RASkov} © (2008-05-29 15:38) [13]> [12] Kolan © (29.05.08 15:18)
Может быть эксперта какого-нибуть написать.... или невизуальный компонент... что даже лучше, так как он будет и в рантайме тоже самое делать :)
← →
Eraser © (2008-05-30 00:46) [14]> [7] Kolan © (28.05.08 22:13)
> Так и не разобрался, как сделать, чтобы кнопки в ней увеличивались?
мм.. у кнопок Aling = alClient, вроде увеличиваются )
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c