Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Непонятная ошибка в редакторе компонента


Страницы:   1 2

TStas ©   (2006-01-15 00:23:00) 

Написал компонент - диалог поиска в папке. Работает замечательно, два редактора свойств - тоже. Написал редактор компонента, не то, чтобы сильно нужный, но, чтобы просто в DesignTime'е диалог вызывал, как у других диалоговых компонетов. В меню появился, ошибок компиляции нет, но при двойном щелчке на компоненте в DesignTime'е вылезает ошибка, что в модуле rtl70.bpl ошибка по какому-то адресу (но не nil). Вот код модуля:
unit stFolderSearchDialogEditor;

interface

uses
 DesignIntf, DesignEditors;

type
 TstFolderSearchDialogEditor = Class(TComponentEditor)
 public
   function GetVerbCount: Integer; override;
   function GetVerb(Index: Integer): String; override;
   procedure ExecuteVerb(Index: Integer); override;
 end;

procedure Register;

implementation
uses stFolderSearchDialog, SysUtils;

procedure Register;
begin
 RegisterComponentEditor(TstFolderSearchDialog, TstFolderSearchDialogEditor)
end;

{ TstFolderSearchDialogEditor }

procedure TstFolderSearchDialogEditor.ExecuteVerb(Index: Integer);
begin
 case Index of
 0: TstFolderSearchDialog(Component).Execute;
 end;
end;

function TstFolderSearchDialogEditor.GetVerb(Index: Integer): String;
begin
 case Index of
 0: Result := 'Test dialog';
 end;
end;

function TstFolderSearchDialogEditor.GetVerbCount: Integer;
begin
 Result := 1;
end;

end.

Нашел файл rtl70.bpl. Он живет в папке System32, что он там делает - не знаю, я его не писал. И в чем может быть дело?


Юрий Зотов   (2006-01-16 14:17:00) [21]

> Rouse_ ©   (16.01.06 09:01) [6]

Саш, в сабже к меню добавляется 1 пункт. Если у тебя есть непреодолимое желание писать case из одной ветки - пиши. Я не против, чес-слово.

Только другим такое не советуй, плз. Тут я против. И буду применять синий карандаш. Обязан даже.


Rouse_   (2006-01-16 09:01:00) [22]


> В этом случае нужно писать что нить типа такого:

Именно так это и пишеться :)


Юрий Зотов   (2006-01-15 23:55:00) [23]

> jack128 ©   (15.01.06 20:56) [4]

Точно так, но это даже не главное (даже при наследовании индексация новых пунктов меню у каждого нового наследника все равно начинается с нуля).

Основная суть в том, чтобы функция, которую вызывает среда, всегда возвращала "хорошее" значение, а не случайный мусор, как в [0]. Иначе реакция среды может быть непредсказуемой - и возможно, что причина сабжа как раз в этом и есть.


jack128   (2006-01-15 20:56:00) [24]

Rouse_ ©   (15.01.06 19:32) [2]
Я так понял, ЮЗ хочет, чтобы всё это барахло работало если редакторы насдедуются друг от друга. В этом случае нужно писать что нить типа такого:
function TstFolderSearchDialogEditor.GetVerb(Index: Integer): String;
begin
 case Index - inherited GetVerbCount of
   0: ...;
   1: ...;
   2: ...;
 else  
   Result := inherited GetVerb(Index)
 end
end
;


Юрий Зотов   (2006-01-15 20:50:00) [25]

> Rouse_ ©   (15.01.06 19:32) [2]

case Index - GetVerbCount + 1 of

:o)


Rouse_   (2006-01-15 19:32:00) [26]


> Юрий Зотов ©   (15.01.06 04:02) [1]

Круто.. У меня 4 обработчика, и что я буду делать вот с этим:

if Index = GetVerbCount - 1 then

?


Юрий Зотов   (2006-01-15 04:02:00) [27]

procedure TstFolderSearchDialogEditor.ExecuteVerb(Index: Integer);
begin
  if Index = GetVerbCount - 1 then
    TstFolderSearchDialog(Component).Execute
  else
   inherited
end;

function TstFolderSearchDialogEditor.GetVerb(Index: Integer): String;
begin
  if Index = GetVerbCount - 1 then
    Result := 'Test dialog'
 else
   Result := inherited GetVerb(Index)
end;

function TstFolderSearchDialogEditor.GetVerbCount: Integer;
begin
  Result := inherited GetVerbCount + 1
end;

Не факт, что это поможет, но писать все равно надо так.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо