Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1222269356
@!!ex
2008-09-24 19:15
2009.11.01
Какие есть способы определения, нажата клавиша или нет?


9-1181663686
XFACTOR
2007-06-12 19:54
2009.11.01
Звуковой движок


15-1250506938
sanx
2009-08-17 15:02
2009.11.01
Профилирование приложений в Delphi


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


15-1251556679
Дмитрий С
2009-08-29 18:37
2009.11.01
Почему MS не подписывает такие файлы как kernel32.dll?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский