Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.141.162] |
|
Сообщ.
#1
,
|
|
|
Собратья! Требуется помощь знатока.
Вот к примеру создал я TMyBestForm наследника от TCustomForm, зарегистрировал честь по чести, всё ОК! type TMyBestForm1 = class(TMyBestForm) end; ... И вот в наследнике я назначаю метод OnCreate, и он прописывается так: ... procedure TMyBestForm1.MyBestFormCreate(Sender: TObject); begin inherited; end; А нужно, чтоб так: ... procedure TMyBestForm1.FormCreate(Sender: TObject); begin inherited; end; Кто знает?!! - подскажите, как это реализовать... Премного благодарен! |
Сообщ.
#2
,
|
|
|
Вах! похоже на этом форуме я не дождусь ответа....
|
Сообщ.
#3
,
|
|
|
Смотрим
procedure TMethodProperty.Edit; var FormMethodName: string; CurDesigner: IDesigner; begin CurDesigner := Designer; { Local property so if designer is nil'ed out, no AV will happen } if not AllNamed then raise EDesignPropertyError.CreateRes(@SCannotCreateName); FormMethodName := GetValue; if (FormMethodName = '') or CurDesigner.MethodFromAncestor(GetMethodValue) then begin if FormMethodName = '' then FormMethodName := GetFormMethodName; if FormMethodName = '' then raise EDesignPropertyError.CreateRes(@SCannotCreateName); SetValue(FormMethodName); end; CurDesigner.ShowMethod(FormMethodName); end; и выясняем что текст берётся из FormMethodName function TMethodProperty.GetFormMethodName: string; var I: Integer; begin if GetComponent(0) = Designer.GetRoot then begin Result := Designer.GetRootClassName; // вот возвращается класс ФОРМЫ if (Result <> '') and (Result[1] = 'T') then Delete(Result, 1, 1); end else begin Result := Designer.GetObjectName(GetComponent(0)); for I := Length(Result) downto 1 do if Result[I] in ['.', '[', ']', '-', '>'] then Delete(Result, I, 1); end; if Result = '' then raise EDesignPropertyError.CreateRes(@SCannotCreateName); Result := Result + GetTrimmedEventName; end; Переопределите GetFormMethodName и будет вам счастье |
Сообщ.
#4
,
|
|
|
Цитата DimaBr @ Переопределите GetFormMethodName и будет вам счастье Сделал... Переписал... Счастье уже близко... а как зарегистрировать, то есть чем? RegisterPropertyEditor(TypeInfo(????), TMyBestForm, '', TMyBestFormMethodProperty); тут проблема... или RegisterComponentEditor(TMyBestForm, TMyBestFormMethodProperty); и тут проблема... Добавлено вроде понял: RegisterPropertyEditor(TypeInfo(TNotifyEvent), TMyBestForm, '', TMyBestFormMethodProperty); а если, к примеру в форме есть другие методы (собственные)? для всех остальных, для каждого? или можно как-то общё(для всех методов сразу)? |
Сообщ.
#5
,
|
|
|
ВСЁ!!! Сообразил...
procedure Register; procedure RegMethodProperty(Comp: TComponentClass); var PropList: PPropList; i: integer; begin i := 0; PropList := AllocMem(SizeOf(PropList^)); try GetPropList(Comp.ClassInfo, [tkMethod], PropList); while (PropList^[i] <> nil) and (i < High(PropList^)) do begin RegisterPropertyEditor(PropList^[i].PropType^, Comp, '', TisFormMethodProperty); Inc(i); end; finally FreeMem(PropList); end; end; begin RegisterCustomModule(TMyBestForm, TCustomModule); RegMethodProperty(TMyBestForm); end; Спасибо Вам, о, великий гуру, DimaBr!!! Сделаю себе наколку с вашим именем |
Сообщ.
#6
,
|
|
|
Такое решение неприемлемо в КОММЕРЧЕСКОМ КОДЕ.
|
Сообщ.
#7
,
|
|
|
Тоже заинтересовался...
Цитата cboss @ Такое решение неприемлемо в КОММЕРЧЕСКОМ КОДЕ. А как правильно? |
Сообщ.
#8
,
|
|
|
Не обращай внимания, это какой-то странный полуспамер.
|