Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2015, 14:23   #1
Тоба
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 86
По умолчанию Получить координаты и размер битмапа относительно TImage

Здравствуйте.
На форме имеется Panel c привязкой alClient
В этой панели находится TImage
TImage настроен так:
Align:= alClient
Center:= true
Proportional:= true
Stretch:= true
Собственно вопрос:
Как получить TRect изображения, загруженного в TImage, относительно самого TImage, иначе говоря узнать координаты битмапа внутри TImage
Т.е при растягивании формы - пропорционально растягивается и изображение, соответственно меняя и свои визуальные размеры
В панели лежит Label(LabelTime), в котором по таймеру показывается
время.
Что надо:
При растягивании формы LabelTime должен всегда перемещаться/находиться в
правом нижнем углу именно изображения, а не имеджа.
Чтобы было понятней вот набросок:




Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    PanelControl: TPanel;
    PanelView: TPanel;
    ImageView: TImage;
    Timer1: TTimer;
    LabelTime: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure PanelViewResize(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
PanelView.DoubleBuffered:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
LabelTime.Caption:=TimeToStr(Now);
end;

procedure TForm1.PanelViewResize(Sender: TObject);
begin
// здесь надо вычичлять координаты изображения и перемещать LabelTime(часы)
//в нижний правый угол изображения
end;

end.
Вложения
Тип файла: rar Example.rar (264.6 Кб, 9 просмотров)

Последний раз редактировалось Тоба; 28.12.2015 в 14:28.
Тоба вне форума Ответить с цитированием
Старый 28.12.2015, 14:52   #2
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

Код:
implementation

type
  THackImage = class(TImage);

procedure TForm1.PanelViewResize(Sender: TObject);
var
  R: TRect;
begin
  R := THackImage(ImageView).DestRect;
  LabelTime.Top := R.Bottom - LabelTime.Height;
  LabelTime.Left := R.Right - LabelTime.Width;
end;
Или
Код:
procedure TForm1.PanelViewResize(Sender: TObject);
var
  R: TRect;
  T, L: Integer;
begin
  R := THackImage(ImageView).DestRect;
  T := R.Bottom - LabelTime.Height;
  L := R.Right - LabelTime.Width;
  LabelTime.SetBounds(L, T, LabelTime.Width, LabelTime.Height);
end;

Последний раз редактировалось Filka; 28.12.2015 в 14:55.
Filka вне форума Ответить с цитированием
Старый 28.12.2015, 14:59   #3
Тоба
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 86
По умолчанию

Хм...
Как всё просто на самом деле.
Я уже начал с GR32 выдерать функцию GetBitmapRect под свои нужды, а тут...

Спасибо тебе мил человек.
Тоба вне форума Ответить с цитированием
Старый 28.12.2015, 15:04   #4
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

Пожалуйста.
Filka вне форума Ответить с цитированием
Старый 30.12.2015, 05:37   #5
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Цитата:
Тоба
При растягивании формы LabelTime должен всегда перемещаться/находиться в
правом нижнем углу именно изображения, а не имеджа.
Привязка к якорю.

Цитата:
Тоба
Хм...
Как всё просто на самом деле.
Я уже начал с GR32 выдерать функцию GetBitmapRect под свои нужды, а тут...
Привязка к якорю в 2 клика еще не проще ли!?
Изображения
Тип файла: jpg 120.jpg (50.9 Кб, 115 просмотров)

Последний раз редактировалось NIKOLAYY2; 30.12.2015 в 05:42.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 30.12.2015, 23:25   #6
Тоба
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 86
По умолчанию

Так не получается, так Label привязывается к своему родителю в правый нижний угол, а надо именно относительно самого битмапа, а вот способ предоставленный
Filka, прекрасно подходит, я могу варировать абсолютно любыми отступами.
Но всё равно спасибо, что попытались помочь.
Тоба вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Координаты мыши относительно родителя Shkolota Общие вопросы Delphi 2 09.12.2013 17:42
координаты мыши относительно формы David Villa C++ Builder 3 19.04.2012 16:59
Получить хендл битмапа tuip Общие вопросы C/C++ 1 27.01.2011 15:45
Как ускорить загрузку битмапа в tImage Altera Мультимедиа в Delphi 10 24.03.2008 17:39
Координаты мышки НЕ относительно формы Nowichok Общие вопросы Delphi 2 27.02.2007 17:03