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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2009, 09:06   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот на скорую руку пример:

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 var
  Img1,Img2:TImage;
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);

begin
  //Создаем 1-й Image.
  Img1:=TImage.Create(Form1);
  with Img1,Img1.Canvas do
  begin
    Name:='Image1';
    Top:=50;
    Left:=50;
    Height:=50;
    Width:=100;
    Transparent:=true;
    Parent:=Form1;
    Pen.Color:=clRed;
    Pen.Style:=psSolid;
    Pen.Width:=30;
    Brush.Style:=bsSolid;
    Brush.Color:=clWhite;
    Rectangle(0,0,100,50);
    OnMouseMove:=FormMouseMove;
  end;
  //Создаем 2-ой Image.
  Img2:=TImage.Create(Form1);
  with Img2,Img2.Canvas do
  begin
    Name:='Image2';
    Top:=35;
    Left:=65;
    Height:=50;
    Width:=100;
    Transparent:=true;
    OnMouseMove:=FormMouseMove;
    Parent:=Form1;
    Pen.Color:=clBlack;
    Pen.Style:=psSolid;
    Pen.Width:=30;
    Brush.Style:=bsSolid;
    Brush.Color:=clWhite;
    Rectangle(0,0,100,50);
  end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if sender is TImage then begin
      if (TImage(Sender).Canvas.Pixels[x,y]<>0) then
     caption:='Img2' else caption:='Img1';
 end;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.02.2009, 10:24   #12
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Я извиняюсь WN_NCHITTEST. Функционально это выглядит как и писал Stilet:
Цитата:
Сообщение от Stilet Посмотреть сообщение
По клику проверяем если цвет куда мыша попала = транспаренту то переслать клик контролу под ним.
Только не по клику, а как написано в MSND:
Цитата:
Сообщение от MSDN
The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is sent to the window that has captured the mouse.
Вот пример, не совсем то что надо, но думаю переделать не составит труда:
http://forum.vnetcore.com/viewtopic.php?f=12&t=225

у тебя будет что то вроде

Код:
TImage = Class(ExtControls.TImage)
private
  TransparentColor : TColor;
  Function isTransparent(x, y : integer) : boolean;
protected
  procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
....

procedure Timage.WMNCHitTest(var Message: TWMNCHitTest);
begin
  inherited;
    Message.Result := not isTransparent(Message.XPos, Message.YPos);
end;

procedure Timage.IsTransparent(x, y : integer) : boolean;
begin
 //Возможно еще прийдетя переводить экрнанные координаты в родительские, но точно не помню... - пишу на память ;)
 result := picture.bitmap.canvas[x,y] = TransparentColor;
end;
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 05.02.2009, 23:03   #13
Саня
Пользователь
 
Регистрация: 08.01.2007
Сообщений: 30
По умолчанию

Да
Понимаю, что это самый простой и быстрый способ. Всем огромное спасибо.
Особенное спасибо Stilet и Onni за Ваше терпение.
Я не волшебник, я только учусь!
Саня вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TImage maxvodo.dll Мультимедиа в Delphi 3 24.10.2008 21:29
TImage в TImage One.Love Общие вопросы Delphi 15 22.09.2008 19:37
TImage Killbrum Помощь студентам 8 27.08.2008 22:40
Timage RealSHELS Общие вопросы Delphi 7 05.05.2008 20:12
TImage Andrey9392 Компоненты Delphi 6 06.04.2007 10:43