Форум: "Media";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
ВнизКак из Image сделать полноценную кнопку? Найти похожие ветки
← →
BadTester (2006-07-26 16:33) [0]Есть проблемма. Помогите плиз!!!Нужно реализовать полноценную кнопку из Image. Как реализовать такой эффект, когда происходит нажатие по Image то копируется регион из BMP файла , это делается так -
Wizard:=Tbitmap.Create;
Wizard.LoadFromFile(ExtractFilePath(ParamStr(0)) + "\Skins\Skin1.bmp");
BitBlt(OpenImg.Canvas.Handle,0,0,21,21, Wizard.Canvas.Handle,0,0,SrcCopy);
Потом при наведение курсора на Image - onMouseMove у меня работает так:procedure TfrmMain.OpenImgMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
OpenImg.Visible := false;
OpenImg.Visible := true;
BitBlt(OpenImg.Canvas.Handle,0,0,21,21, Wizard.Canvas.Handle,0,21,SrcCopy);
end;
При onMouseDown:procedure TfrmMain.OpenImgMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
OpenImg.Visible := false;
OpenImg.Visible := true;
BitBlt(OpenImg.Canvas.Handle,0,0,21,21, Wizard.Canvas.Handle,0,84,SrcCopy);
end;
Как сделать так чтоб при нажатии на рисунок происходила проверка Если нажата клавиша и отпущена то происходит событие, а Если нажата и неотпущена то ничего неделать. Собственно нужно сделать так чтоб работало как в стандартных кнопках.
← →
@!!ex © (2006-07-26 19:05) [1]Значит так.
1) ИМХо имж для этого использовать отстойно.
Могу дать модуль в котором реализовано класс типа графическая кнопка.
Но ува он не визуальный и создавать его придеться руками, извиняюсь, но компоненты не пишу.
2) На OnMouseDown в некую булевскую переменную пишешь - true
на OnMouseUp смотришь, если булевская переменная TRUE, значит выполнить действие которое надо выполнить при нажатии кнопки.
← →
BadTester (2006-07-26 19:21) [2]Спасиб. Давай посмотрю
← →
BadTester (2006-07-26 19:40) [3]Чето непалучается.....
← →
BadTester (2006-07-26 19:47) [4]У меня два Image на одну кнопку. Первый служит для появления и наведения , а второй для нажатия. Понимаешь? Как для двух сделать?
← →
@!!ex © (2006-07-26 19:47) [5]http://www.afera-net.narod.ru/GButton.rar
var
Button:TGButton;
Procedure ButtonPress(Handle:integer); stdcall;
begin
case Handle of
Button.Handle:{Действие};
end;
end;
OnCreate:
Button:=TGButton.Create, Form1.Handle, GetDC(Form1.Handle),X,Y,Width,Height,"Button.bmp",ButtonPress);
OnPaint:
Button.Update;
OnMouseDown:
LBPressed:=True;
Button.Update;
OnMouseUp:
LBPressed:=False;
Button.Update;
Картинка для кнопки - это BMP содержащий три состояния кнопки:
1) Обычное.
2) С наведеной мышой.
3) Нажатое.
В bmpшнике они расположеный друг за другом по горизонтали
← →
@!!ex © (2006-07-26 19:48) [6]Упс. Опечатался. вот правильное.
Button:=TGButton.Create(Form1.Handle, GetDC(Form1.Handle),X,Y,Width,Height,"Button.bmp",ButtonPress);
← →
@!!ex © (2006-07-26 20:01) [7]BadTester
У меня два Image на одну кнопку. Первый служит для появления и наведения , а второй для нажатия. Понимаешь? Как для двух сделать?
Да также как и для одного.
Хотя гемор еще тот.... :))
<offtop>
Когда первый свой медиаплеер писал, тоже кнопочки через сменные имажи делал.... Захарился.... :))
</offtop>
TopImage:OnMouseDown
begin
TopImage.Visible:=false;
BottomImage.Visible:=True;
end;
BottomImage:OnMouseUp
begin
TopImage.Visible:=true;
BottomImage.Visible:=false;
Выпонение нужного действия.
end;
Будет работать. Но будет неприятный глюк, если нажать мышой на имадже, а отпустить где нить в другом месте.
← →
BadTester (2006-07-26 20:08) [8]Да да, как от этого избавиться? Если хочешь можешь посмотреть мой плеер.
www.terabit.by.ru
← →
BadTester (2006-07-26 20:10) [9]Procedure ButtonPress(Handle:integer); stdcall;
begin
case Handle of
Button.Handle:{Действие}; -----> Какое действие?Что писать?И как?
end;
end;
← →
@!!ex © (2006-07-26 20:17) [10]>>Какое действие?Что писать?И как?
Ну собственно действие которое должно выполняться по нажатию на кнопку. :)
Выкгдяит примерно так:
Procedure ButtonPress(Handle:integer); stdcall;
begin
case Handle of
Button_Close.Handle:
begin
Form1.Close;
end;
Button_Save.Handle:
begin
Memo1.Lines.SaveToFile();
end;
end;
end;
← →
BadTester (2006-07-26 20:20) [11]Спасиб чувак!!! Щас буду пробовать
← →
@!!ex © (2006-07-26 20:22) [12]>>Да да, как от этого избавиться? Если хочешь можешь посмотреть мой плеер.
Я обычно вешаю на OnMouseMove формы Update всех кнопок.
Но тут я тебе не слишком хороший советчик.
сто лет уже ничего на GDI не писал.
А модуль который тебе взял изначально вообще для OpenGL написан.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c