ПредишенСледващото

Свързване и свързващи елементи образуват

Аз не знам точно как да се обадя на въпроса и преминете направо към въпроса.
Има форма с 3 Timage. 1 се намира в центъра на ляво, другата вдясно от центъра на формата, 3 - в центъра на правото.
Те динамично зареждане на изображения, всички имоти трябва Пропорционално.
Когато променяте размера форма изображения се изнесат от позициите си

Необходимо е да се постигне такъв ефект, че когато формата е оразмерен (също максимизиране) компоненти TImage ще запазят
разпоредби по отношение на формата, в правилната пропорция, + увеличен / намален с образа по време на промяна на размера.

Опитах Котвите имот
1 I са изложени в вярно (ляво, bootom, до)
Y 2 - у 1 I изложени в вярно (ляво, bootom, нагоре, дясно)
от 3 - показва в истинския (вдясно, bootom, до)

но само в централната изображението се след което се увеличава, а другият не е, Ограничения имущество не работи

ако Y 2 премахване наляво и надясно, докато 1 и 3 се увеличава и 2 остава малък

Като цяло, въпросът как да се приложи

Може би някои skrinshotik изложи? И доста трудно да се разбере. Например, аз зле да си представя какво "се намира в центъра на защитата на гостите."

панел - това е като Timage
отдолу - Headercontrol

1 снимки форма в нормално състояние
2 форма в разширено състояние

Сега групата следва да се разшири и да остане на мястото си, както го прави headercontrol

Мисля, че трябва това, но това не е d7

Мисля, че не е трудно да се реализира логиката на поведение "на ръка", като го пиша в OnResize формуляра манипулатор.

Джо - вече се беше опитал, бъги след няколко risayzov, особено след като се максимизира

Това е кодът

I: = кръг (StrToFloat (inttostr (GroupBox13.Width)) / (345/105));
J: = кръг (StrToFloat (inttostr (GroupBox13.Width)) / 43,125);
Image2.Width: = I;
Image3.Width: = I;
Image4.Width: = I;
Image2.Left: = й;
Image3.Left: = J * 2 + I;
Image4.Left: = к * 3 + 2 * I;>

три изображения са grupbokse kotorgo дължина 345
Дължина на изображението 105
43125 е съотношението на 345/8
8 - то image2.left
съответно, когато формата се увеличава отляво увеличава

Между другото за задължителни компоненти.

все още се сблъскват с проблема за 1

форма, PageControl, 2 страници,
1 страница етикет (RightJustify) Котви (правилно)
т.е. етикета на десния край се подравнява, autosize на имот = вярно

и това е така,
когато прилагането започва форма Преоразмерявате (увеличава)
2 страница по подразбиране, определена във всеки текстов етикет
превключите на първа страница
и ние виждаме, че етикетът не се измества надясно

и ако autosize фалшива, а след това всичко работи добре
ето един бъг

и ако poslezapuska изберете една страница, а след това на втория, за да зададете етикет текст, за да се върнете към първия, всичко е наред!

> I: = кръг (StrToFloat (inttostr (GroupBox13.Width)) / (345
> / 105));
> J: = кръг (StrToFloat (inttostr (GroupBox13.Width)) / 43,125)
>;

Можете да, разбира се, съжалявам, но какви финтове ушите?

Като цяло, тук е код за пример (грубо шлифоване), която привежда (ако правилно съм разбрал задачата) е необходимо. Той, от една страна - няколко излишни, а от друга - непълно, все още е направил достатъчно гъвкав, за да го завърши в правилната посока.

# XA0; TAnchorType = (atLeft, atRight, atBottom);
# XA0; TAnchorTypes = набор от TAnchorType;

# XA0; TPlacementPoilitics = запис
# XA0; # XA0; AnchorType: TAnchorTypes;
# XA0; # XA0; LeftCoeff,
# XA0; # XA0; TopCoeff,
# XA0; # XA0; RightCoeff,
# XA0; # XA0; BottomCoeff: Единична
# XA0; край;

функционални CreatePlacementPolitics (AControl: TWinControl;
# XA0; AType: TAnchorTypes): TPlacementPoilitics;

процедура ApplyPlacementPolitics # XA0 (AControl: TWinControl; политика: TPlacementPoilitics);

функционални CreatePlacementPolitics (AControl: TWinControl;
# XA0; AType: TAnchorTypes): TPlacementPoilitics;
започвам
# XA0; с Резултат правя
# XA0; започне
# XA0; # XA0; AnchorType: = AType;
# XA0; # XA0; ако atLeft в AType след това
# XA0; # XA0; # XA0; LeftCoeff: = AControl.Left / GetParentForm (AControl) .Width;
# XA0; # XA0; ако atRight в AType след това
# XA0; # XA0; # XA0; RightCoeff: = AControl.Width / GetParentForm (AControl) .Width;
# XA0; # XA0; ако atBottom в AType след това
# XA0; # XA0; # XA0; BottomCoeff: = AControl.Height / GetParentForm (AControl) .Height;
# XA0; край;

процедура ApplyPlacementPolitics # XA0 (AControl: TWinControl; политика: TPlacementPoilitics);
започвам
# XA0; с политика правя
# XA0; започне
# XA0; # XA0; ако atLeft в Politics.AnchorType след това
# XA0; # XA0; започне
# XA0; # XA0; # XA0; AControl.Left # XA0 ;: = кръг (LeftCoeff * GetParentForm (AControl) .Width);
# XA0; # XA0; край;

# XA0; # XA0; ако atRight в Politics.AnchorType след това
# XA0; # XA0; # XA0; AControl.Width # XA0 ;: = кръг (RightCoeff * GetParentForm (AControl) .Width);

# XA0; # XA0; ако atBottom в Politics.AnchorType след това
# XA0; # XA0; # XA0; AControl.Height # XA0 ;: = кръг (BottomCoeff * GetParentForm (AControl) .Height);
# XA0; край;
приключи;

Пример за приложение (случай се приема с 3 панели от [2]):


тип
# XA0; TForm27 = клас (TForm)
# XA0; # XA0; Panel2: TPanel;
# XA0; # XA0; Panel3: TPanel;
# XA0; # XA0; Panel1: TPanel;
# XA0; # XA0; процедура FormCreate (Sender: TObject);
# XA0; # XA0; процедура FormResize (Sender: TObject);
# XA0; частен
# XA0; # XA0; Panel1Politics: TPlacementPoilitics;
# XA0; # XA0; Panel2Politics: TPlacementPoilitics;
# XA0; # XA0; Panel3Politics: TPlacementPoilitics;
# XA0; край;

процедура TForm27.FormCreate (Sender: TObject);
започвам
# XA0; Panel1Politics: = CreatePlacementPolitics (Panel1 [atRight, atBottom]);
# XA0; Panel2Politics: = CreatePlacementPolitics (Panel2 [atLeft, atRight, atBottom]);
# XA0; Panel3Politics: = CreatePlacementPolitics (Panel3 [atLeft, atRight, atBottom]);
приключи;

процедура TForm27.FormResize (Sender: TObject);
започвам
# XA0; ApplyPlacementPolitics (Panel1, Panel1Politics);
# XA0; ApplyPlacementPolitics (Panel2, Panel2Politics);
# XA0; ApplyPlacementPolitics (Panel3, Panel3Politics); # XA0;
приключи;

И моля, не се гавриш с всички светии вътре в мен, не прави повече от това:
I: = кръг (StrToFloat (inttostr (GroupBox13.Width)) / (345/105));
J: = кръг (StrToFloat (inttostr (GroupBox13.Width)) / 43,125);


> И моля, не се гавриш с всички светии вътре в мен,
> # XA0; не правят повече от това:
> I: = кръг (StrToFloat (inttostr (GroupBox13.Width)) / (345
> / 105));
> J: = кръг (StrToFloat (inttostr (GroupBox13.Width)) / 43.
> 125);

Това е, IMHO, ляво / се формира след експерименталния метод на "сляпо копие".

Послепис Сега се даде решение за Windows на всички! (Промяна на разделителната способност на дисплея, промяна на шрифта "голям / нормален" и т.н., и т.н. -)


> Има форма с 3 Timage. 1 се намира в центъра на ляво, а другият
> Точна център на формата, 3 - в центъра на дясно.

И това е проблемът сложи всички тези Imago панел и подравнявеане наляво по AlLeft точно на Alright и централно за всичко останало?

И това е проблемът сложи всички тези Imago панел и подравнявеане наляво по AlLeft точно на Alright и централно за всичко останало?

И какво ще правиш така? Опитайте. Тя ще, а не какво е необходимо:
Image Only центъра ще се увеличи.

> [12] allrussia # XA0; (04.12.06 17:12)
> Елен
>
> Какъв е проблемът да се сложи всички тези Imago панел и да зададете
> Изравнете от ляво на дясно на AlLeft Добре и централно
> За останалата част?
>
> И какво ще правиш така? Опитайте. Няма ли, че
> Задължително:
> Image Only центъра ще се увеличи.

Можете код в [9] се опита?

бъдете сигурни, за да се опита да постигне целта си

Eraser - 3 пост не се чете?

Джо - Не мога да разбера как да използвате вашия код

> [17] allrussia # XA0; (04.12.06 21:28)
> Joe - Не мога да разбера как да използвате вашия код

Така да се каже?

Джо - когато до стандартна вложка yunit1
Опитах се мъчиш 10 минути аз се опитах всички възможности

> [19] allrussia # XA0; (04.12.06 21:32)
> Joe - когато до стандартна вложка yunit1
> Опитах измъчван 10 минути аз се опитах всички възможности

Пфу. Това, съжалявам, че въпросът е дори много по-ниска, отколкото на клона "начинаещи", да не говорим за "основни". Както и да е, тъй като съм дошъл.

Създаване на отделна единица в проекта. Кажете Unit1.pas. В този раздел го поставя интерфейс използва SysUtils, контроли, Формуляри; и код
тип

TAnchorType = (atLeft, atRight, atBottom);
TAnchorTypes = набор от TAnchorType;

TPlacementPoilitics = рекорд
# XA0; AnchorType: TAnchorTypes;
# XA0; LeftCoeff,
# XA0; TopCoeff,
# XA0; RightCoeff,
# XA0; BottomCoeff: Single
приключи;

функционални CreatePlacementPolitics (AControl: TWinControl;
AType: TAnchorTypes): TPlacementPoilitics;

процедура ApplyPlacementPolitics # XA0 (AControl: TWinControl; политика: TPlacementPoilitics);


Така че можете обявен тип 2, 1 и 1 процедура функция.

Сега, в раздела за изпълнение добавите изпълнението на функциите и процедури:

функционални CreatePlacementPolitics (AControl: TWinControl;
AType: TAnchorTypes): TPlacementPoilitics;
започвам
с Резултат правя
започвам
# XA0; AnchorType: = AType;
# XA0; ако atLeft в AType след това
# XA0; # XA0; LeftCoeff: = AControl.Left / GetParentForm (AControl) .Width;
# XA0; ако atRight в AType след това
# XA0; # XA0; RightCoeff: = AControl.Width / GetParentForm (AControl) .Width;
# XA0; ако atBottom в AType след това
# XA0; # XA0; BottomCoeff: = AControl.Height / GetParentForm (AControl) .Height;
приключи;
приключи;

процедура ApplyPlacementPolitics # XA0 (AControl: TWinControl; политика: TPlacementPoilitics);
започвам
с политика правя
започвам
# XA0; ако atLeft в Politics.AnchorType след това
# XA0; # XA0; AControl.Left # XA0 ;: = кръг (LeftCoeff * GetParentForm (AControl) .Width);

# XA0; ако atRight в Politics.AnchorType след това
# XA0; # XA0; AControl.Width # XA0 ;: = кръг (RightCoeff * GetParentForm (AControl) .Width);

# XA0; ако atBottom в Politics.AnchorType след това
# XA0; # XA0; AControl.Height # XA0 ;: = кръг (BottomCoeff * GetParentForm (AControl) .Height);
приключи;
приключи;

функция CreatePlacementPolitics се създава запис (запис) с информация за "задължителен" прехвърля й наследник TWinControl.
процедура ApplyPlacementPolitics използва предварително записан задължителен политика за посочения TWinControl "а.

След това, основната форма в раздел използва интерфейс раздел добавите Unit1.
Pomeschaesch да образуват три панела, и ги поставя като сте нарисували пост [2].
Създадена през класовете образуват три самостоятелни променливи, а именно:
тип
TForm27 = клас (TForm)
# XA0.
частен
# XA0; Panel1Politics,
# XA0; Panel2Politics,
# XA0; Panel3Politics: TPlacementPoilitics;
приключи;

Освен това, в случай OnCreate форми определят политиката на поставяне на забързаното панели и го съхранява в рамките на съответните частни полета за бъдеща употреба:
процедура TForm27.FormCreate (Sender: TObject);
започвам
Panel1Politics: = CreatePlacementPolitics (Panel1 [atRight, atBottom]);
Panel2Politics: = CreatePlacementPolitics (Panel2 [atLeft, atRight, atBottom]);
Panel3Politics: = CreatePlacementPolitics (Panel3 [atLeft, atRight, atBottom]);
приключи;
И накрая, форма манипулатор OnResize се прилага към панелите предварително запазени политика за сядане (за всеки панел - А):
процедура TForm27.FormResize (Sender: TObject);
започвам
ApplyPlacementPolitics (Panel1, Panel1Politics);
ApplyPlacementPolitics (Panel2, Panel2Politics);
ApplyPlacementPolitics (Panel3, Panel3Politics); # XA0;
приключи;

Съжаляваме, подхлъзна подравняване.

Тествам кода си
е само 50% - чрез увеличаване fopmy всичко ОК
намалява:
1) Третият панел правилно намалява
2) ако панелът е Timage се завърта на 180 градуса по хоризонталната ос и започва огледално

Опитах се, според назначението на ноктите, малко по-добре, но проблеми не изчезват
Разбира се, аз не мога да разбера защо?
приведе това, което показват в панели?

моя код по-горе работи по-добре.

Имам кратък коментар относно кодекса на Джо. Политика следва да бъде заменен от политика, но нарязани на очите :)

> [22] allrussia # XA0; (14.12.06 20:53)
> Изравнете това, което показват в панели?

Не.
С намаление разбира се, грешки при закръгляването ще бъдат забележими. Аз просто подход показва конкретното прилагане трябва също така да доведе до съзнанието на файл :)

Опитайте се да използвате TPanel всяка снимка, панелът е от своя страна поставя върху "платформа". Панелите могат да посочат подравняване,

С една дума, да дойде с този код. Осъществено от 100%. Точност - контрол размер 1 делене. Проблемът е решен. Тема - скрапа: р

# XA0;
започвам
# XA0; I: = (GroupBox13.Width - 4) DIV 3;
# XA0; J: = (GroupBox13.Width - 4) мод 3;
# XA0; случай й на
# XA0; 0: започнете
# XA0; # XA0; # XA0; Panel1.Width: = I;
# XA0; # XA0; # XA0; Panel2.Width: = I;
# XA0; # XA0; # XA0; Panel3.Width: = I;
# XA0; # XA0; приключи;
# XA0 1: започне
# XA0; # XA0; # XA0; Panel1.Width: = I;
# XA0; # XA0; # XA0; Panel2.Width: = I + 1;
# XA0; # XA0; # XA0; Panel3.Width: = I;
# XA0; # XA0; приключи;
# XA0; 2: започнете
# XA0; # XA0; # XA0; Panel1.Width: = I + 1;
# XA0; # XA0; # XA0; Panel2.Width: = I;
# XA0; # XA0; # XA0; Panel3.Width: = I + 1;
# XA0; # XA0; приключи;
приключи;

Памет: 0,81 MB
Време: 0,094 гр

Подкрепете проекта - споделете линка, благодаря!