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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2007, 13:49   #1
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию Сверху\снизу

Здравствуйте! Подскажите пож-та как сделать так чтобы рисунок был сверху другого:
у меня есть рисунок на image1 и рисунок "добытый" процедурой:
procedure TForm1.FormCreate(Sender: TObject);
begin
card:=TBitmap.Create;
card.Width:=100;
card.Height:=150;
card.LoadFromFile('card.bmp');
DoubleBuffered:=true;
end;
И почему то при перемещении image1 всегда ока-ся сверху "добытого",
а мне надо наоборот,чтобы image1 был снизу!Не знаете как это осуществить?

From Stilet: Тему называй пожалуйста по нормальному, иначе отвечать на нее на захотят
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome

Последний раз редактировалось Stilet; 02.11.2007 в 13:53.
Marsik вне форума Ответить с цитированием
Старый 02.11.2007, 13:54   #2
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Что-то не совсем понятно... Покажи что ль исходник.
AidarBik вне форума Ответить с цитированием
Старый 02.11.2007, 14:05   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ока-ся сверху "добытого",
А ты где этот "добытый" отрисовываешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2007, 17:16   #4
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Айдар вот код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

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

var
Form1: TForm1;
card: TBitmap;
cx,cy,fx,fy: integer;
MouseOnCard, catch: boolean;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
card:=TBitmap.Create;
card.Width:=100;
card.Height:=150;
card.LoadFromFile('card.bmp');
DoubleBuffered:=true;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Draw(cx,cy,card);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x > cx) and (x < cx+100) and (y > cy) and (y < cy+150) then
begin
if not MouseOnCard then
begin
MouseOnCard:=true;
Cursor:=crHandPoint;
end;
end
else
if MouseOnCard then
begin
MouseOnCard:=false;
Cursor:=crDefault;
end;

if catch then
begin
cx:=x-fx;
cy:=y-fy;
Repaint;
end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if MouseOnCard then
begin
catch:=true;
fx:=x-cx;
fy:=y-cy;
end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if catch then catch:=false;
end;

end.
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 02.11.2007, 17:18   #5
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Стилет "добытое" на форме Form1 рисуется
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 02.11.2007, 19:28   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

О, знакомый код
Image снизу не будет, ты либо все рисунки держи в имиджах (их можно таскать точно так же) и меняй то один сверху то другой (не помню свойство или OnTop или что-то с этим связаное), либо все рисунки рисуй на канве (из битмапов), тогда контроль кто сверху кто снизу у тебя, к-рый последний отрисовал тот и сверху.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 02.11.2007, 19:49   #7
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Не я пробовал в имиджах,но они не перемещаются!там выходит что то типа ошибка timage tgraphic.Может что то менять надо в коде?
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 02.11.2007, 21:14   #8
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Перетаскивание одного имиджа, свойство имиджа Enabled поставь False
Если их много нужно делать массив, или же для каждого обрабатывать события мыши отдельно, и потом неизвестно их кол-во фиксировано или может меняться.
Код:
var
Form1: TForm1;
cx,cy,fx,fy: integer;
MouseOnCard, catch: boolean;
imw,imh: integer;//ширина и высота имиджа

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

procedure TForm1.FormPaint(Sender: TObject);
begin
//не нужен
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x > cx) and (x < cx+imw) and (y > cy) and (y < cy+imh) then
begin
if not MouseOnCard then
begin
MouseOnCard:=true;
Cursor:=crHandPoint;
end;
end
else
if MouseOnCard then
begin
MouseOnCard:=false;
Cursor:=crDefault;
end;

if catch then
begin
cx:=x-fx;
cy:=y-fy;
Image1.Left:=cx;
Image1.Top:=cy;
end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if MouseOnCard then
begin
catch:=true;
fx:=x-cx;
fy:=y-cy;
end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if catch then catch:=false;
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 03.11.2007, 10:54   #9
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Мутадор я как только не вставлял твой код,перепробовал все,а результата ноль.Главное ни единой ошибки,а имидж не двигается и все!Впрям как часовые!
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 03.11.2007, 12:02   #10
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Ну так переменные позаполнять надо вначале
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
imw:=Image1.Width;
imh:=Image1.Height;
cx:=Image1.Left;
cy:=Image1.Top;
DoubleBuffered:=true;
end;
не забудь Image.Enabled = False
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


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