Форум: "Основная";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
ВнизПривязка к графическому объекту вне зависимости от масштаба Найти похожие ветки
← →
Zheksonz (2008-09-26 10:17) [0]Имеется графический объект загруженный в компонент класса TImage, его контуры обозначены компонентом класса TShape. При увеличении масштаба изображения необходимо пропорционально увеличивать Shape, что я делаю при помощи перемножения на коэффициент разницы, но при этом происходит смещение изображения относительно компонента Shape.
Я думал, что можно будет использовать тот же коэффициент, для сдвига Shape в направлении изображения, но этот вариант не сработал. Кто знает, как рашить этот вопрос, подскажите, что нужно сделать. Спасибо.
← →
Vlad Oshin © (2008-09-26 10:24) [1]Shape1.Left:=image1.Left?
← →
Zhekson (2008-09-26 10:26) [2]Забыл сказать, Shape, имеет меньший диаметр, поэтому Image всё время в нуле, по обеим осям.
← →
Zhekson (2008-09-26 10:28) [3]всмысле не поэтому, а вообще в нуле, а Shape обозначает контуры определённого объекта на изображении.
← →
Vlad Oshin © (2008-09-26 10:35) [4]код давай, писать с 0 лень
скорее всего коэффициент подобрать можно, но не так просто
← →
Zhekson (2008-09-26 10:50) [5]мысля крутится, может сам разберусь... просто уже введена пара коэффициентов, которые всё время нужно учитывать...
← →
Zheksonz (2008-09-26 11:26) [6]не, без поллитры не разберёшься...
установил Shape по определённым ориентирам на изображении сверху и слева... записал координаты, сверху 33 пикс., слева 64 пикс. Увеличил Image на 1000(прибавил по высоте и ширине по 1000че и растянул). установил Shape на зараее заданные ориентиры и получил сверху: было 33, стало 62; слева было 64, стало 118. Какие будут варианты???
← →
Vlad Oshin © (2008-09-26 11:40) [7]
> Увеличил Image на 1000
не на, а в
во сколько увеличил?
← →
Zheksonz (2008-09-26 12:04) [8]предположим есть коэфициент, во сколько раз увеличил, дальше его как использовать???
← →
Vlad Oshin © (2008-09-26 12:13) [9]во столько раз увеличивать Shape и во столько раз изменится его left
← →
Zhekson (2008-09-26 12:25) [10]я так и сделал, но результата нет... ещё раз всё перепроверю...
← →
Vlad Oshin © (2008-09-26 12:26) [11]я ручкой на бумажке прикинул - должно
← →
Zhekson (2008-09-26 12:33) [12]Спасибо Влад, буду разбираться.
← →
Vlad Oshin © (2008-09-26 12:40) [13]
> во столько раз увеличивать Shape и во столько раз изменится
> его left
ну и тоp, естественно :), просто не дописал, надеюсь ты его тоже меняешь?
Увеличение может быть по разным осям разное
причем, надо брать иногда наоборот. 1/К.
В зависимости от того увеличивается или уменьшается
KH=image.Heght1/image.Heght2;
KW=image.Width1/image.Width2;
shape1.left:=shpe1.left*(1/KW)
shape1.top:=shape1.top*(1/KH)
shape1.Width:=shape1.Width*(1/KW)
shape1.Heght:=shape1.Heght*(1/KH)
← →
{RASkov} © (2008-09-26 13:26) [14]> [2] Zhekson (26.09.08 10:26)
Image растянут на всю форму?
Т.е. имеет Image.Left=0, Image.Top=0, Image.Width=Width и Image.Height=Height, так?
← →
{RASkov} © (2008-09-26 13:38) [15]Попробуй так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Shape1: TShape;
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
private { Private declarations }
StartW, StartH, SL, ST, SW, SH: Integer;
public { Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered:=True;
StartW:=Image1.Width;
StartH:=Image1.Height;
SL:=Shape1.Left-Image1.Left;
ST:=Shape1.Top-Image1.Top;
SW:=Shape1.Width;
SH:=Shape1.Height;
end;
procedure TForm1.FormResize(Sender: TObject);
var KofW, KofH: Extended;
begin
KofW:=Image1.Width/StartW;
KofH:=Image1.Height/StartH;
Shape1.Left:=Image1.Left+Round(SL*KofW);
Shape1.Top:=Image1.Top+Round(ST*KofH);
Shape1.Width:=Round(SW*KofW);
Shape1.Height:=Round(SH*KofH);
end;
end.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c