Свързване и свързващи елементи образуват
Аз не знам точно как да се обадя на въпроса и преминете направо към въпроса.
Има форма с 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 гр