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

Вниз

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 вся ветка

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

Наверх





Память: 0.49 MB
Время: 0.004 c
1-9167
DJ X
2002-02-11 16:30
2002.03.04
СУПЕР СРОЧНО!!!


4-9325
Алекс
2002-01-04 09:38
2002.03.04
Помогите с SetWindowLong


3-9088
perov
2002-02-07 08:40
2002.03.04
помогите составить запрос, пожалуйста


1-9127
grab
2002-02-16 21:21
2002.03.04
заполнение ListBox


1-9237
dim2001
2002-02-13 19:48
2002.03.04
стандартный диалог





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский