Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];

Вниз

Опять регионы.   Найти похожие ветки 

 
.: Joiro :.   (2002-06-15 13:31) [0]

Ну так – всё ещё бьюсь с регионами. Создание, обработка на присутсвие мыши, более правильная перерисовка, итд. С этим я скорее всего разберусь сам, но вот одну вещь никак не могу придумать:

Как работая с регионами определть что мышь ПОКИНУЛА данный регион. На присутсвие и отсутсвие можно проверять их пачками, но если речь идёт о одном конкретном регионе?

Тестовую программу куда я напихал несколько регионов и сделал разные проверки можно скачать здесь: http://www.ltn.lv/~joiro/REGIONS.zip

Там также можно видеть нароботки изменяемого интерфейса, но так как это тест регионов там нет никаких быстрых функцый для графики (для примера и не надо). Также видно как планируется реализовать перемещение (на W2K или XP будет лучще выглядеть). Это соурс и только 9Кб так что можете смело посмотреть.


 
.: Joiro :.   (2002-06-16 11:13) [1]

Похоже что вопрос попался слишком брутальный... окей...

Часть этого можно добится используя переменную, которая следит за тем в котором регионе мышь находилась в последния раз и если есть изменения то делает перерисовку: (Last)

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var
HR: HRGN;
I: Integer;
begin
T.StartTimer;
for I:=0 to List.Count-1 do begin
HR:=HRGN(List[I]);
if PtInRegion(HR,X,Y) then begin
if Last <> I then Canvas.Draw(1,1,B);
PaintRgn(Canvas.Handle,HR);
Last := I;
end;
end;


Но тут это работает только между регионами – если мышь не над кнопкой то перерисовка не пройзойдёт и останется засвеченая кнопка хотя курсор уже в соверщенно другом месте.

Как реализовать полноценную проверку?

А также – может я ошыбся (да, бывает) и есть мэтод получще? Сейчас с тестами проверил – встроенные компоненты (Button,Shape) реагируют на мышь очень быстро, но всё равно не нравится то что они занимают место у них кучи ненужных параметров.

У самого с созданием собственных компонентов опыта нет, так что и создать что-то я не в силах. (Может есть ссылки на полноценный туториал (язык не важен) по созданию своих компонентов?)

Значит нужны прозрачные регионы, которые могут реагировать на MouseIn, MouseOut и MouseDown (примерно так) и которые более-менее легко создавать на форме и получить координаты/размеры. Есть предложения?


 
.: Joiro :.   (2002-06-16 16:15) [2]

Хммм... монолог получился... Anyway...

Ну так - покопался в FAQах, подумал немножко и сделал примочку к стандартному Shape для определения MouseEnter и MouseLeave. Выглядит вот так:

unit ShapeEx;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, ExtCtrls;

type
TShapeEx = class(TShape)
private
{ Private declarations }
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
FDoHighlight: Boolean;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property DoHighlight: Boolean read FDoHighlight write FDoHighlight;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents("Additional", [TShapeEx]);
end;

procedure TShapeEx.CMMouseEnter(var Message: TMessage);
begin
if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
end;

procedure TShapeEx.CMMouseLeave(var Message: TMessage);
begin
if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
end;

end.


Вроде всё правильно и работает прилично.

Тогда последний вопрос - во время експериментов я ставил ShapeEx в папку Samples, но когда более-менее закончил это дело решил ставить в Additional, но Delphi всё равно ставит в Samples. Похоже что где-то записывается куда ставился новый компонент. Как справится с этим?



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-56201
Leonon
2002-10-07 17:23
2002.10.17
Помогите создать SQL запрос


7-56369
MAYOR
2002-08-09 16:57
2002.10.17
Помогите разобраться с TCommPortDriver


3-55939
delfist
2002-09-24 14:09
2002.10.17
А можно ли сразу получить сумму по колонке цифр в таблице?


3-55972
Ал
2002-09-25 09:23
2002.10.17
Временная таблица


1-56031
Эльф
2002-10-08 08:44
2002.10.17
Меню в стиле OfficeXP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский