Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.01;
Скачать: CL | DM;

Вниз

Привязка к графическому объекту вне зависимости от масштаба   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
6-1209387329
pavel_guzhanov
2008-04-28 16:55
2009.11.01
Адрес приложения, написанного с использованием IntraWeb


2-1252654969
eu1bc
2009-09-11 11:42
2009.11.01
Обработка ошибок


15-1252159778
Ruzzz
2009-09-05 18:09
2009.11.01
Turbo Delphi не хочет компилировать .rc


15-1251453095
@!!ex
2009-08-28 13:51
2009.11.01
Продолжается ли разработка средства Turbo Delphi Explorer?


15-1251731165
HarryG
2009-08-31 19:06
2009.11.01
Печать картинок под wine