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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 28.11.2009, 14:15   #1
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию Не запускается действие MouseMove при прозрачной форме...

Я решил сделать такую программу - по экрану за мышкой должна гоняться картинка.

Я сделал чтобы картинка гонялась по форме, но когда сделал прозрачность формы через TransporantColor, картинка перестала двигаться...

Подскажите в чем ошибка, или подскажите как сделать иначе...

Код программы:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Image1: TImage;
    procedure Timer1Timer(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    v,vx,vy:integer;{ Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  image1.Top:=image1.Top+vy;
  image1.Left:=image1.Left+vx;
  v:=v-1;
  if v<1 then timer1.Enabled:=false;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  v:=30;
  vx:=(x-image1.Left) div v;
  vy:=(y-image1.Top) div v;
  timer1.Enabled:=true;
end;

end.
Заранее спасибо.
Ckomoroh вне форума
Старый 28.11.2009, 15:14   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

"гоняйте" за мышкой не картинку, а саму форму... с регионами работали?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума
Старый 28.11.2009, 15:33   #3
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Хм, нет...
Подскажите что это, пожалуйста...
Ckomoroh вне форума
Старый 28.11.2009, 17:17   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

обрезаете форму по картинке (через >>> регионы <<<), добавляете таймер, в таймере считываете позицию курсора мыши и делате привязку формы к курсору.

функции для создания
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума
Старый 28.11.2009, 21:20   #5
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

А можно исходник пожалуйста, или пример, а то я вообще не понял как сделать с регионами...

И еще координаты курсора в какой процедуре получать?

Последний раз редактировалось Ckomoroh; 28.11.2009 в 21:34.
Ckomoroh вне форума
Старый 28.11.2009, 22:48   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
И еще координаты курсора в какой процедуре получать?
getcursorpos() по таймеру например
Цитата:
А можно исходник пожалуйста, или пример, а то я вообще не понял как сделать с регионами...
читаем help и смотрим как:
Код:
//=================== создаем
function Tltf.BitmapToRegion(Bitmap: TBitmap; TransColor: TColor): HRGN;
var X, Y: Integer;
    XStart: Integer;
    temp:HRGN;
begin
 Result:= 0;
 with Bitmap do
  for Y:= 0 to Height - 1 do begin
   application.ProcessMessages;
   X:= 0;
   while X < Width do begin
    while (X < Width) and (Canvas.Pixels[X, Y] = TransColor) do
     Inc(X);
    if X >= Width then Break;
    XStart:= X;
    while (X < Width) and (Canvas.Pixels[X, Y] <> TransColor) do
     Inc(X);
    if Result = 0 then Result:= CreateRectRgn(XStart, Y, X, Y + 1)
     else temp:= CreateRectRgn(XStart, Y, X, Y + 1);
    CombineRgn(Result, Result,temp, RGN_OR);
    DeleteObject(Temp);
   end;
  end
end;

procedure Tltf.rgn(cb:Tcolor);
var mRgn: HRGN;
begin
 mRgn:= BitmapToRegion(img.Picture.Bitmap,cb); // картинку берем из image
 SetWindowRgn(Handle, mRgn, True);
 DeleteObject(mRgn)
end;
//===================

//использование
procedure Tltf.FormCreate(Sender: TObject);
begin
  SetWindowLong(Application.Handle,GWL_EXSTYLE,GetWindowLong(Application.Handle, GWL_EXSTYLE) or not WS_EX_APPWINDOW);

 rgn(clwhite);
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума
Старый 28.11.2009, 22:53   #7
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Ну а лучше что бы не грузить по таймеру, ловить сообщения передвижения курсора!
uberchel вне форума
Старый 29.11.2009, 17:29   #8
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Спасибо всем, за советы, все получилось...только не понял зачем обрезать форму, если можно ее уменьшить по размерам картинки и отключить края...
Ckomoroh вне форума
Старый 29.11.2009, 17:40   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
только не понял зачем обрезать форму, если можно ее уменьшить по размерам картинки и отключить края...
потому-что выставить форму по размерам картинки и bsnone это само-собой разумеющееся... да, можно просто воспользоваться transparentcolor, но не на всех системах сие "прокатит".
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума
Старый 29.11.2009, 19:36   #10
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Еще вопрос...А как сделать тип, и чтобы для этого типа все действия были одинаковыми...
Например,
Программно создается несколько картинок, например, img1,img2,img3, а потом для этих картинок задается один и тот же рисунок и одни и те же действия, чтобы не писать событие для каждой картинки?
Ckomoroh вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Действие при нажатии на определненный Balloon KoBRaAndrey Общие вопросы Delphi 5 22.11.2009 04:53
действие при обновлении webbrowser Niklan Общие вопросы Delphi 6 07.11.2009 20:45
Непрозрачный LABEL на прозрачной форме CraZZy RabbIt Общие вопросы Delphi 11 16.02.2009 19:45
Действие при простои программы Volkogriz Общие вопросы Delphi 4 26.11.2008 13:35
действие при выборе нужного <option> badfilin JavaScript, Ajax 2 16.04.2008 23:59