Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.04;
Скачать: CL | DM;

Вниз

URL   Найти похожие ветки 

 
Evgeny ©   (2001-12-22 12:53) [0]

Какие идеи имеются по компоненту URL, но полностью на WinAPI.


 
Evgeny ©   (2001-12-25 10:33) [1]

.


 
panov ©   (2001-12-25 10:44) [2]

Вопрос для форума потрепаться?:-)
Если нет, то вопрос сформулируй получше.


 
Evgeny ©   (2001-12-25 14:37) [3]

Хотелось бы создать компонент URL на основе STATIC, так как не хочется тащить всю тяжесть VCL, может у кого-нибудь имеются наметки на эту тему, или ссылки.


 
Mick   (2001-12-25 15:05) [4]

Консольное приложение + Writeln(MyUrlString) не тащит "всю тяжесть VCL".


 
Evgeny ©   (2001-12-26 14:12) [5]

Про консольное приложение и речи не было. Компонент я уже создал сам, но у меня осталась маленькая проблема.

Вот кусок от объекта
type
TOnEvent = procedure(Sender : TObject) of Object;
TUrlLabel = class
private
...
fOnOverURL : TOnEvent;
fOnURLClick : TOnEvent;
procedure SetOnURL(const Index: Integer; const Value: TOnEvent);
...
published
property Hint: String read fHint write SetHint;
property URL: String read fUrl write SetUrlText;
property OnOverURL: TOnEvent index 0 read fOnOverURL write SetOnURL;
property OnURLClick: TOnEvent index 8 read fOnURLClick write SetOnURL;
end;

procedure TUrlLabel.SetOnURL(const Index: Integer; const Value: TOnEvent);
begin
if Index = 0 then
fOnOverURL := Value
else
fOnURLClick := Value;
end;


А здесь вызов

var
Url : array[Byte] of TUrlLabel;

procedure UrlClick;
begin
MessageBox(Wnd, "Url Click", "Внимание", MB_OK);
end;


procedure xxx;
begin
...
Url[I] := TUrlLabel.Create(I * 14 + 14, 6, 14, 16, hWndDlg);
with Url[I] do
begin
Url := Alpha[I];
Hint := Alpha[I];
OnUrlClick := UrlClick;
end;
...
end;

выделенная строка естественно не проходит, а как сделать правильно не могу никак сообразить.


 
Anatoly Podgoretsky ©   (2001-12-26 15:39) [6]

Сделай обработчик членом класса и все будет хорошо.


 
Evgeny ©   (2001-12-27 06:51) [7]

>Anatoly Podgoretsky
Приведенный выше обработчик, это так для проверки. Реально код может быть любым. Тогда как?


 
Anatoly Podgoretsky ©   (2001-12-28 07:20) [8]

Какая разница какой реальный код, надо что бы обработчик был членом какого либо класса.


 
Evgeny ©   (2001-12-28 14:45) [9]

Беда в том, что классов, кроме самого URL, больше не предвидится. В этом то у меня и вся загвоздка.


 
Anatoly Podgoretsky ©   (2001-12-28 23:25) [10]

Скажем так, совсем не понятно, что ты хочешь сделать, сам то представляешь?


 
Evgeny ©   (2001-12-30 07:27) [11]

Попытаюсь объяснить. Вот сам объект:

type
TOnEvent = procedure(Sender : TObject) of Object;
TUrlLabel = class
private
fParent : HWND;
fAlign : TTextAlign;
fRect : TRect;
fUrl : String;
fSelect : Boolean;
fPressed : Boolean;
fDefColor : ColorRef;
fSelColor : ColorRef;
fDefFont : HFONT;
fSelFont : HFONT;
fFontSize : Integer;
fHint : String;
fOnOverURL : TOnEvent;
fOnURLClick : TOnEvent;
procedure SetOnURL(const Index: Integer; const Value: TOnEvent);
procedure SetUrlText(Value : String);
procedure SetLinkColor(const Index: Integer; Value : ColorRef);
procedure SetFontSize(Value : Integer);
procedure SetAlign(Value : TTextAlign);
procedure SetHint(Value : String);
public
Handle : HWND;
tti : TToolInfo;
constructor Create(x, y, w, h : Integer; hParent : HWND);
destructor Destroy; override;
procedure Redraw;
published
property Align: TTextAlign read fAlign write SetAlign;
property aRect: TRect read fRect;
property FontSize: Integer read fFontSize write SetFontSize;
property Hint: String read fHint write SetHint;
property DefColor: ColorRef index 0 read fDefColor write SetLinkColor;
property SelColor: ColorRef index 1 read fSelColor write SetLinkColor;
property Selected: Boolean read fSelect;
property URL: String read fUrl write SetUrlText;
property OnOverURL: TOnEvent index 0 read fOnOverURL write SetOnURL;
property OnURLClick: TOnEvent index 8 read fOnURLClick write SetOnURL;
end;

{----------------------------------------------------------}

procedure TUrlLabel.SetOnURL(const Index: Integer; const Value: TOnEvent);
begin
if Index = 0 then
fOnOverURL := Value
else
fOnURLClick := Value;
end;


Вызов:

WM_INITDIALOG :
begin
for I := 0 to 29 do
begin
Url[I] := TUrlLabel.Create(I * 14 + 14, 6, 14, 16, hWndDlg);
with Url[I] do
begin
Url := Alpha[I];
Hint := Alpha[I];
// OnUrlClick := UrlClick;
end;
end;

{----------------------------------------------------------}
// Тест
procedure UrlClick;
begin
MessageBox(Wnd, "Url Click", "Внимание", MB_OK);
end;


Ну а так как этот объект единственный, а само WinAPI по определению процедурное, то не могу сообразить как мне теперь организовать вызов
OnUrlClick := UrlClick;
Вот собственно и весь вопрос. Сожалею, что не совсем понятно описал в первый раз.


 
Evgeny ©   (2002-01-03 06:20) [12]

Так-таки никто не знает?


 
nikkie ©   (2002-01-03 10:00) [13]

так-таки все знают... ты пытаешься смешать win api с идеями vcl-программирования. вероятно это можно сделать, но у меня сомнения в разумности этого подхода.

обрати внимание, как объявлено событие:

TOnEvent = procedure(Sender : TObject) of Object;

это означает, что обработчик должен быть методом некоторого класса, а не просто процедурой. Anatoly Podgoretsky тебе про это уже раза 3 сказал.

но ты написал класс так, как будто это vcl-компонента. в vcl обработчики пишутся как методы формы, поэтому и возникло "of object" в определении события. поскольку ты к vcl не привязан (насколько я понимаю), то можно этот "of object" вообще выкинуть.


 
Evgeny ©   (2002-01-04 06:23) [14]

Да все я прекрасно понял и с первого раза. Единственное, что я никак не могу понять - это как мне все таки смешать эти два понятия. Знаю что возможно - не знаю как. В связи с чем и задан был вопрос. При простом выкидывании "of object" невозможно откомпилировать строки:

property OnOverURL: TOnEvent index 0 read fOnOverURL write SetOnURL;
property OnURLClick: TOnEvent index 8 read fOnURLClick write SetOnURL;

Кстати библиотека KOL, как раз и построена на таком смешивании, но автор не учавствует в здешнем форуме, и по сей причине у него не спросишь. Вот и остается надежда на Вас.


 
nikkie ©   (2002-01-04 14:45) [15]

удаляем "of object". компилируем. читаем сообщение об ошибке.

"Published property OnURLClick cannot be of type PROCEDURE"

переносим из published в public. компилируем. радуемся.


 
Evgeny ©   (2002-01-04 15:08) [16]

Сейчас уже не успеваю по экспериментировать, остается заняться этим дома. Но наскоком успел проверить, юнит скомпилировался, а вызов нет.



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

Текущий архив: 2002.03.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
1-9115
Gene Green
2002-02-16 00:23
2002.03.04
DrawGrid, StringGrid etc.


3-9071
latvija
2002-02-06 14:53
2002.03.04
Господа програмисты подскажите кто знает .


1-9162
foks
2002-02-02 11:19
2002.03.04
У меня не работает Delphi 5.0 из под Windows XP


3-9094
Дремучий
2002-02-06 13:42
2002.03.04
Как закрыть незакрытую сессию?


7-9298
Unkown
2001-11-26 12:26
2002.03.04
Чем протестировать компьютер?