Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  10:17[Войти] | [Зарегистрироваться]

Обсуждение материала
"Шаманский метод Geo"
Полный текст материала


Другие публикации автора: George Judkin

Цитата или краткий комментарий:

«... Как можно изменять существующие компоненты, при этом избежать их регистрации в палитре компонент, но сохранить частичную возможность использования при визуальном проектировании форм ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]18100%
 
  Ничего особенно нового и интересного
[2]00%
 
  Написано неверно (обязательно укажите почему)
[3]00%
 
Всего проголосовали: 18

Оценка стиля изложения

  Все понятно, материал читается легко
[1]18100%
 
  Есть неясности в изложении
[2]00%
 
  Непонятно написано, трудно читается
[3]00%
 
Всего проголосовали: 18




Смотрите также материалы по темам:
[Наследование] [Секции private/public/protected/published]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 72

31-03-2016 02:20
>>>Geo
Верно.

>>>Алексей Акулов
Молодец.

TMyTreeNode() - жесткое приведение типов в рамках одного модуля достаточно безопасно.

Просто запомни, что как только ты потеряешь из виду
NodeClass := TMyTreeNode;
Например, при переходе через границу формы/модуля
Нужно проверять используя Is/As
{
Проверяет тип Cls объекта Obj и возвращает ссылку Ref на него.
может использоваться как замена паре is as .
  if aSomeObject is TMyObject then
  begin
   aMyObject := aSomeObject as TMyObject;
   // do something with aMyObject
  end;
При использовании IsAs примет вид:
  if IsAs(aSomeObject, TMyObject, aMyObject) then
  begin
   // do something with aMyObject
  end;
}
function IsAs(const Obj: TObject; const Cls: TClass; out Ref{: Pointer}): Boolean; {$IFDEF HAS_INLINE} inline; {$ENDIF}
function IsAs(const Obj: TObject; const Cls: TClass; out Ref{: Pointer}): Boolean;
begin
  Result := (Obj <> nil) and (Obj is Cls);
  if Result then
    TObject(Ref) := Obj;
end;



В последнее время испытываю сложности в отправке сообщений.
Предлагают контактировать с администратором.
Судя по сообщениям в соседних ветках, не я один. :-)


31-03-2016 00:12
>>>Geo
А ну понял. Спасибо за разъяснения. В принципе именно так я себе и объяснил код Алексея Гаврилова.
Только немножко недодумал как нужно модифицировать свой код, чтоб заработало. Модифицировал код следующим образом и всё вроде заработало:

unit Unit1;

interface

uses
  Winapi.Windows, Vcl.Forms, System.SysUtils, System.Classes,
  Vcl.Controls, Vcl.Buttons, Vcl.ComCtrls;

type

  TMyTreeNode = class(TTreeNode)
  protected
   FID : Integer;
   procedure SetID(Value : Integer);
  public
   property ID : Integer read FID write SetID;
  end;

  TFormMain = class(TForm)
    TreeView1: TTreeView;
    procedure FormCreate(Sender: TObject);
    procedure TreeView1CreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

procedure TFormMain.TreeView1CreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
begin
NodeClass := TMyTreeNode;
end;

procedure TFormMain.FormCreate(Sender: TObject);
var TN : TMyTreeNode;
begin
TN := TMyTreeNode(TreeView1.Items.AddChild(nil, 'Root, PID=0')); // <<—-
TN.ID := 1;
TN.Text := TN.Text + ', ID='+IntToStr(TN.ID);

TN := TMyTreeNode(TreeView1.Items.AddChild(TN, 'Sibling, PID=1'));  // <<—-
TN.ID := 2;
TN.Text := TN.Text + ', ID='+IntToStr(TN.ID);
//...
end;

{ TTreeNode }

procedure TMyTreeNode.SetID(Value: Integer);
begin
FID := Value;
end;

end.



30-03-2016 16:14
сообщение от автора материала
Методом, описанным в статье, ваша проблема не решается. Дело в том, что вы в своем коде не создаете экземпляры класса TTreeNode, их создает TTreeView в своем коде. Соответственно, ему на все ваши подмены глубоко начхать.

Пока Алексей Гаврилов не появился, попробую прокомментировать его код. Как я понял, у TCustomTreeView имеется событие, которое вызывается при создании нового узла. При этом в качестве параметра передается тип данных — класс-наследник TTreeNode — для создаваемого узла. Если написать обработчик этого события, то можно подменить значение на свой вариант типа TTreeNode.
 Geo


30-03-2016 08:46
>>>Алексей Гаврилов

а прокомментировать код можно? Что-то я не догоняю пока. Как этим кодом вы обеспечиваете совместимость типов базового TTreeNode (который возвращается методом TreeView1.Items.AddChild) и модифицированного Unit1.TTreeNode??


30-03-2016 06:09
>>>Алексей Акулов


  TCustomTreeView = class(TWinControl)

  protected
    property OnCreateNodeClass: TTVCreateNodeClassEvent read FOnCreateNodeClass write FOnCreateNodeClass;




type
   TMyTreeNode = class(TTreeNode)
   protected
    FID : Integer;
    procedure SetID(Value : Integer);
   public
    property ID : Integer read FID write SetID;
   end;




procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
begin
  NodeClass := TMyTreeNode;
end;

>>>


30-03-2016 02:58
Всем привет!
Хорошая, понятная статья. Методом приходилось пользоваться. Но вот столкнулся с такой проблемкой:
при заполнении TTreeView очень хотелось хранить ID каждого Item'а (это в упрощённом варианте, а вообще - расширить стандартный набор свойств стандартного TTreeNode), при этом нет нужды/желания регистрировать новый компонент.
Вот накидал примерно то, что требуется сделать в проекте:


unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Buttons, Vcl.StdCtrls, Vcl.ComCtrls;

type
  TTreeNode = class(Vcl.ComCtrls.TTreeNode)
  protected
   FID : Integer;
   procedure SetID(Value : Integer);
  public
   property ID : Integer read FID write SetID;
  end;

  TFormMain = class(TForm)
    TreeView1: TTreeView;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

procedure TFormMain.FormCreate(Sender: TObject);
var TN : TTreeNode;
begin
TN := TreeView1.Items.AddChild(nil, 'Root, ID=1, PID=0');
// [DCC Error] Unit1.pas(37): E2010 Incompatible types: 'Unit1.TTreeNode' and 'Vcl.ComCtrls.TTreeNode'
TN.ID := 1;
//... заполнение дерева ...
end;

{ TTreeNode }

procedure TTreeNode.SetID(Value: Integer);
begin
FID := Value;
end;

end.



ну и вопрос понятен - как обойти?


28-01-2012 01:19
сообщение от автора материала
>>> И как этим пользоваться?
Везде, где действует данное объявление, если в коде стоит TMenuItem, будет использоваться данный класс, а не стандартный из юнита Menus.

>>> У меня не получается даже скомпилировать
Приведите текст сообщения об ошибке, которое выдает компилятор, и участок кода, в котором эта ошибка возникает.
 Geo


27-01-2012 21:15
Не понял, предполагается ли это изначально, но я часто использую прием в подобных ситуациях:
type
TMenuItem = class(Menus.TMenuItem)
  private
    FNewProp : SomeType;
  public
    property NewProp : SomeType Read FNewProp write FNewProp;
end;

даже и не знаю, как можно было бы сделать по другому.
==============================
И как этим пользоваться? У меня не получается даже скомпилировать. Про хелперы знаю, но этот прием мне нравится больше


09-06-2011 00:30
сообщение от автора материала
>>> Кстати, в книге Марко Кэнту такой custom-класс называется "interceptor class"
Маленькая поправка: "Interposer class". Информация взята из презентации "Delphi Tips and Tricks" Марко Кэнту и Кэри Дженсона на "CodeRage 5".

Ссылки на презентацию (оригинальную и переведенную на русский язык) можно взять в блоге Всеволода Леонова

Имхо, "класс-перехватчик" тоже подходит по смыслу, но "класс-вклиниватель" подходит несколько больше ;-)
 Geo


21-01-2011 14:29
В книжке Майкла Физерса "Эффективная работа с унаследованным кодом" подобный приём называется "швом".

>>> Шов - это место, где можно изменить поведение программы, не правя код программы в этом месте.

У каждого шва есть разрешающая точка - это место, где можно выбрать один из вариантов поведения.

Швы делятся на препроцессорные (не применимо в Delphi, реализуются подменой функции макросами препроцессора), компоновочные (сюда относится "метод Geo" - это когда выбор функции выполняется за счёт подмены скомпилированных полуфабрикатов) и объектные (это когда в объекте вводится новый метод с именем = старой функции).

В случае с методом Geo разрешающей точкой будет порядок модулей в uses.

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


10-10-2009 16:21
сообщение от автора материала
В страхе, что придется доказывать свой приоритет ( :D ), решил поискать в своих архивах самую раннюю дату использования этого метода.

С Delphi начал работать в 1996 (если память мне не изменяет). Но основная работа шла на рабочем компе. Сейчас к сожалению эти архивы утеряны (выход из строя винчестера). Осталось только то, что делал дома (либо исследование каких-то примочек, либо мелкие проекты для себя). Выполнил у себя поиск и обнаружил, что самая ранняя зафиксированная дата использования данного приема -- 31.12.1996 (ни фига себе, встретил новый год :-)).

Думаю, что есть шанс пободаться даже с самим Марко Кэнту, не говоря уж про "Крылья Ветра" :D
 Geo


10-10-2009 04:50
Я читал. Собирался даже написать им как на самом деле этот метод называется. :)


10-10-2009 04:45
Wings of Wind открыл для себя и большой части англоязычного комьюнити этот же метод :) http://wings-of-wind.com/2009/10/07/turbocharging-delphi-2010-2-adding-dynamic-functionality-to-3rd-parties-the-solution/


08-01-2009 12:21
Кстати, в книге Марко Кэнту такой custom-класс называется "interceptor class".


23-12-2008 01:28
сообщение от автора материала
to Python:
Это, как бы, не совсем то же самое. Тут все еще более просто и очевидно. Тем более, вовсю использовалось Борландом, когда дельфийские функции и функции WinAPI имеют одинаковые названия, то вызов апишных предваряется именем модуля (сейчас это Windows).
 Geo


22-12-2008 14:11
>>> Writeln умеет значительно больше, чем наша функция, но в принципе, этот метод работает и может применяться для других целей
Обычно для этого применяют "перенаправление" вывода, как, например, описано здесь: http://www.delphisources.ru/pages/faq/base/rus_console.html (последний способ).


22-12-2008 13:42
Подобный метод подходит не только для компонентов, но и для процедур. Например, есть общеизвестная процедура Writeln. Она превосходно работает для файлов, но... увы, для консольных приложений она некорректно выводит русский текст. Причина очевидна - консоль работает в кодировке OEM, тогда как исходный код пишется в кодировке ANSI. Преобразование можно выполнять функцией:

function ToOem(const S:string):string;
begin
  SetLength(Result,Length(S));
  CharToOemBuff(PChar(S),PChar(Result),Length(S));
end;


Но писать каждый раз Writeln(ToOem('Привет!')); не очень удобно. Функцию можно перекрыть таким образом:

procedure Writeln(const S:string);
begin
  System.Writeln(ToOem(S));
end;


Это, конечно, плохой пример, так как мы теряем больше, чем находим - Writeln умеет значительно больше, чем наша функция, но в принципе, этот метод работает и может применяться для других целей.


22-12-2008 10:19
сообщение от автора материала
to Мухтар:
Тогда прочитайте. Хотя бы введение. И вы поймете, почему она так называется. Советую так же обратить внимание на то, что это название в самой статье взято в кавычки. Наверное, это не просто так ;-)
 Geo


22-12-2008 09:46
Статью не читал. Но называть статью "Шаманский метод Geo" как минимум смешно. Звучит как "метод Лобановского".


22-12-2008 04:33
сообщение от автора материала
>>> В общем идея "локальных" компонентов проекта (или группы проектов) достаточно очевидна, странно что она до сих пор не реализована.
Мой личный жизненный опыт (пусть и не самый большой) показывает, что труднее всего заметить наиболее очевидные вещи ;-)
 Geo


22-12-2008 03:48
Речь не об этом. Опции проекта в части используемых пакетов - это частично опции проекта, а частично опции среды. Перенесите проект на другую установку Delphi c  другими установленными компонентами, и опции придётся настраивать заново. А если проект содержит собственные компоненты, придётся устанавливать их в палитру так что они по умолчанию станут видны всем проектам, и в этих проектах также придётся настраивать опции чтобы не видеть эти компоненты.
В общем идея "локальных" компонентов проекта (или группы проектов) достаточно очевидна, странно что она до сих пор не реализована.


22-12-2008 03:24
Сейчас нет delphi под рукой, но разве в опциях проекта нельзя выставить галочки для тех bpl которые нужны? или я не о том говорю (я не до конца понял сообщение mr.Апреля)
 riff


22-12-2008 01:06
сообщение от автора материала
>>> В общем имхо надо попинать разработчиков Codegear чтобы они довели до ума то, что у них уже есть
Если Вы сможете допинать разработчиков Delphi, что они добавят возможность кастомизировать палитру под конкретный проект, то я (да наверное и не только я) скажу Вам огромное спасибо ;-)
 Geo


20-12-2008 15:10
Автор хочет связать компонент с конкретным проектом, а не с глобальной палитрой, что конечно во многих случаях разумно.

Попробуем без шаманства (экспериментировал с Delphi 2006):

1)Создаём новый Project Group (File/New/Other/Other Files/Project Group
2)Добавляем в Project Group новый пакет (я не стал его переименовывать и оставил название Package1)
3)Добавляем в Package1 новый модуль, копипастим в него код компонента TMyLabel из статьи и сохраняем под именем MyLabels.pas
4)Компилируем (build) Package1
5)Добавляем в Project Group новое VCL-приложение (Project1)
6)Открываем опции Project1, Packages/Add, находим наш Package1.bpl и добавляем его.
7)На странице Samples палитры находим наш TMyLabel, кидаем на форму, компилируем Project1, всё замечательно работает.

Но теперь начинаются неприятности - TMyLabel стал виден ВСЕМ проектам. Конечно можно исключить наш Package1 из Default Project Options, но это повлияет только на новые проекты, создаваемые в этой конкретной установке Delphi и проблему отвязать компонент от глобальной палитры и привязать к конкретной Project Group не решает.

В общем имхо надо попинать разработчиков Codegear чтобы они довели до ума то, что у них уже есть.


18-12-2008 01:00
сообщение от автора материала
>>> Есть предложение: если в ответе на Круглом Столе приводится код, использующий этот метод, приводить ссылку на эту статью
Ну, я и так, конечно же, привожу ;-) А вот ходят ли по приведенной ссылке авторы вопросов...
 Geo


17-12-2008 14:00
Есть предложение: если в ответе на Круглом Столе приводится код, использующий этот метод, приводить ссылку на эту статью, дабы не вводить в ступор тех, кто видит этот приём в первый раз. Причины ступора:

1. Непонятно.
2. Боязно использовать.

Кроме того, возможны неожиданности в других модулях, ипользующих модуль с переопределённым компонентом. Человек должен чётко представлять механизм и возможные побочные эффекты. Если внесённые изменения могут быть нежелательны в других местах, перекрывающий класс лучше выносить в отдельный модуль и подключать через uses, тогда он будет действовать только в целевом модуле.


18-07-2008 06:34
Пользовался, пользуюсь и буду пользоваться.
За что автору (и королевству, разумеется) большое спасибо.

Не понял, предполагается ли это изначально, но я часто использую прием в подобных ситуациях:

type
TMenuItem = class(Menus.TMenuItem)
  private
    FNewProp : SomeType;
  public
    property NewProp : SomeType Read FNewProp write FNewProp;
end;



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


10-07-2008 08:26
Все, кто хочет обсудить правомерность копирования чужих статей, приглашаются сюда: http://www.delphikingdom.com/asp/talktopic.asp?ID=386

Здесь с этого момента все подобные сообщения - оффтопик, и будут удаляться.


10-07-2008 01:53
сообщение от автора материала
to bik:
Как правильно заметил Sega-Zero, обсуждение вопросов публикации и авторских прав в данной теме является оффтопиком. Мне есть что Вам ответить, но делать здесь я это не буду. Если Вам действительно интересен данный вопрос, то можете написать мне мейлом через мой профиль. Или попросить Королеву создать новую тему на Базарной Площади.
 Geo


10-07-2008 00:48
Все очень просто и казалось бы нативно, но я об этом не догадывался. Спасибо за расширение кругозора. Все гениальное просто.
А насчет установки компонентов в палитру: я тоже не люблю забивать ее разным мусором. Да и с переносом проектов на другой комп потом проблемы. В палитру следует устанавливать компоненты, которые используются в разных проектах, например, подменяя стандартные, или имеется главный основной проект, использующий эти компоненты. А так я почти все новое создаю в рантайме. Геморой, конечно есть, но не хронический.


09-07-2008 15:20
Поздравляю, Гео! Отличная статья, даже не думал раньше о такой фиче :))

+1 к хедеру материала


09-07-2008 11:57
Хрен знает что, господа!
А на кой ляд вы вообще здесь статьи и прочее пишете, если это не может быть перепечатано и скопировано? Маразм какой-то. Спрячьте в сундук и никто ваши умные мысли использовать не будет.

Я понимаю, что печатается все для того, чтобы другие люди могли не ходить по тем же тропкам. И не последнее место занимают самолюбие и профессиональная гордость авторов. Таки не надо ныть, как хлюпикам в дестком саду, у которых сломали песочный домик. Вообще заняли жуткое место на сайте под всякого рода разговоры на "завалинке", которые уместно вести старым бабкам, которым делать нечего. Противно даже читать все это.


09-07-2008 06:36
господа модераторы и просто юзеры (: вам не кажется, что перепечатка статей на других сайтах к обсуждению этой статьи как то слабо относится?:) Давайте создадим тему на БП и там будем это обсуждать;) А то оффтоп жуткий просто (кошмар, и мне об этом приходится напоминать модераторам? :о))


09-07-2008 03:19
>>>некая новостная панель нашего хостера
А я почему то подумал про третье зеркало Королевства.

>>>... современные мысли носятся вокруг особенностей реализации (ActiveX, .NET и т.п.) ...
Пусть носятся, особенно вокруг да около, IMHO реальная классика актуальнее! :) Или только у меня одного Delphi7 (и 6) осталась? :)
 Ivax


09-07-2008 01:37
сообщение от автора материала
>>> А ещё её опубликовали на http://dotnetpanel.org
Это, как я понял, некая новостная панель нашего хостера. Обратите внимание на ссылку внизу страницы, кто предоставляет хостинг Королевству.

С таким же успехом можно обвинить subscribe.ru :D На самом деле есть и еще упоминания, но, в основном, это ссылки.

>>> как Ваш современный взгляд и мысли профессионала на эту тему
Здесь маленький нюанс. Дело в том, что мои мысли, возможно, уже далеко несовременные. Так как современные мысли носятся вокруг особенностей реализации (ActiveX, .NET и т.п.). Ну и еще... вообще-то я не являюсь профессиональным программистом :D
 Geo


08-07-2008 22:25
А ещё её опубликовали на http://dotnetpanel.org! Но без нарушений копирайта :)
загадочное имя у этого сайта при дословном переводе

>>>... вернутся к работе над начатой серией статей ...
Тем серия и хороша что можно выкладывать кусочками, а не отдавать всю и сразу!
Очень жду кусочек про "зачем вообще объединять свой код в классы" и остальное как Ваш современный взгляд и мысли профессионала на эту тему. А то Кнопка уже до дыр зачитан.
 Ivax


08-07-2008 01:37
сообщение от автора материала
Нашел еще в одном месте свою статью. Удивляет то, то дали правильную ссылку на оригинальную публикацию, но текст передрали у "Интерфейса" (видно по названию и еще кое-каким характерным приметам). В общем, сейчас с человеком списались и, вроде как, договорились.
 Geo


08-07-2008 00:50
Когдая там свою статью обнаружил, то Елена Филиппова сказала, что у Королевства есть договоренность с CITForum о публикации у них "королевских" материалов

На самом деле договорённость была только о публикации нескольких конкретных статей, но CIT'овцы поняли это разрешение слишком широко, а Елена не хочет с ними ссориться и переубеждать их. Но статьи они действительно убирают, если автор настаивает - мне удалось заставить их убрать мои статьи.

Но к CITFoum'у приведённый Сергеем Осколковым адрес, похоже, не имеет никакого отношения. Просто случайное совпадение. Это сайт некоей фирмочки "1СИТ - 1-й центр информационных технологий" из Красноармейска, которой тоже силёнок явно не хватает, чтобы наполнять свой сайт оригинальными материалами.

У них на сайте есть форум. Как показывает практика, обычно о плагиате эффективнее писать прямо в форум - конечно, в большинстве случаев банят, но от греха подальше предпочитают убирать статьи или выполнять другие требования автора, потому что огласка такой некрасивой деятельности никому не нужна.


07-07-2008 08:31
Geo, я думаю, что это другой сайт. На citforum как раз указывают автора и происхождение статьи.
Почему не открывается адрес, не знаю, у меня открывается. ((


07-07-2008 08:24
сообщение от автора материала
Сергей!

У меня приведенный адрес открываться не хочет, но, судя по анализу адреса, это одно из зеркал CITForum. Когдая там свою статью обнаружил, то Елена Филиппова сказала, что у Королевства есть договоренность с CITForum о публикации у них "королевских" материалов. То, что Вам не ответил на мейл, странно. Потому что мне ответили очень быстро. И все мои просьбы по публикации были удовлетворены. Видимо, Вы писали не на тот адрес.

Я сейчас порылся в своих почтовых архивах через WEB-интерфейс, но нужного мейла не нашел. Попробую еще дома на локальном клиенте полискать нужный адрес.
 Geo


07-07-2008 08:11
Они кстати и другие статьи с КД тоже так беспардонно разместили (Юрия Спектора например про криптографию)
http://1cit.ru/content/category/9/23/53/


07-07-2008 08:07
Извиняюсь за оффтоп по отн. к обсуждению статьи Geo, но если interface дает хотя бы внизу в углу ссылку, то вот эти
http://1cit.ru/content/view/340/53/
вообще не указывают ни автора ни источник.
Я им написал в апреле:
Здравствуйте!
Вы разместили на своем сайте мою статью "Пишем простой хелп",
http://1cit.ru/programmirovanie/pishem-prostoy-help.html
первоначально опубликованную на сайте "Королевство Дельфи" - http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1132
Пожалуйста, разместите информацию о том, откуда взята статья или уберите её со своего сайта.

Но не получил ответа и статья так и осталась там.


07-07-2008 06:42
Ivax:

но ссылка ведет на главную страницу :)

Мои статьи по моему требованию оттуда уже убраны. Вместе с комментариями, разумеется.


07-07-2008 06:28
Ещё написал комментарий к своей статье, размещённой там, в которой изложил своё мнение по поводу такого копирования: http://www.interface.ru/iservices/messages.asp?forumId=587&fromId=16336
Интересно было бы прочесть ... но ссылка ведет на главную страницу :)
 Ivax


07-07-2008 03:50
сообщение от автора материала
>>> Тут есть один нюанс
Есть. Но есть и другой нюанс: перепечатку все равно не остановить. Интересный материал все равно будут таскать. Так что я придерживаюсь в этом вопросе стандартных правил вежливости: перепечатывайте на здоровье, но выполняйте при этом несколько требовнаий:
1. Не искажайте материал.
2. Указывайте автора.
3. Публикуйте ссылку на Королевство и оригинальную публикацию.

Из трех пунктов был выпролнен только третий. После моего письма выполнены и первые два пункта. Посему претензий в этом вопросе к "Интерфейсу" у меня больше нет.
 Geo


07-07-2008 03:42
авторские права на мои статьи принадлежат мне самому

Тут есть один нюанс: передавая свою статью на публикацию в Королевство, вы соглашаетесь с нашими правилами, в т.ч.: "Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта (выделено мной - А.Г.)" (эта фраза есть внизу на каждой странице). Но так как вы, Юрий, входите в команду Королевства, будем считать, что в данном случае администрация сайта тоже дала своё разрешение ;)


07-07-2008 03:05
сообщение от автора материала
Мне несколько проще: авторские права на мои статьи принадлежат мне самому, а я никогда не возражал против их перепечаток с указанием ссылки на оригинал и автора.

В общем, от "Интерфейс" я отклик уже получил. Очень оперативно. Претензии по поводу искажений и отсутствия авторства удовлетворены, статья поправленя в соответствии с замечаниями, извинения принесены и приняты. Так что претензий к "Интерфейс" у меня болоьше нет. Разве что они не смогли название поставить в кавычках (а это важно). Ну, да бог с ними ;-)
 Geo


07-07-2008 02:48
В общем, написал на "Интерфейс" письмо, в котором вежливо высказался по поводу неуместности, с моей точки зрения, некоторых их действий. Перепечатка статей -- это уже дело вполне привычное. Но вот неуказание автора и искажение названия -- это уже не очень хорошо. Посмотрим, что из этого получится ;-)

Я тоже написал, тоже жду. В моём случае, правда, есть нюанс - они скопировали ту статью, которая вошла в книгу, и право на её публикацию теперь принадлежит издательству. О чём есть соответствующий договор, оформленный по всем правилам. Не знаю, напугает ли их это, попробую ещё позвонить, поговорить лично.

Ещё написал комментарий к своей статье, размещённой там, в которой изложил своё мнение по поводу такого копирования: http://www.interface.ru/iservices/messages.asp?forumId=587&fromId=16336
Предлагаю всем авторам, чьи статьи также оказались скопированными без разрешения, оставить аналогичное сообщение в комментариях к своим статьям. Вот неполный список того, что скопировано с Королевства:
http://www.interface.ru/home.asp?artId=16505
http://www.interface.ru/home.asp?artId=16705
http://www.interface.ru/home.asp?artId=16504
http://www.interface.ru/home.asp?artId=16430
http://www.interface.ru/home.asp?artId=16429
http://www.interface.ru/home.asp?artId=16369


07-07-2008 02:43
Ну там в нижнем правом углу есть скромная ссылка на источник.
На сколько я понял оперативно передираются все статьи напр.:
http://www.interface.ru/home.asp?artId=16705
http://www.interface.ru/home.asp?artId=16504
http://www.interface.ru/home.asp?artId=16505
 Cep


07-07-2008 01:49
сообщение от автора материала
В общем, написал на "Интерфейс" письмо, в котором вежливо высказался по поводу неуместности, с моей точки зрения, некоторых их действий. Перепечатка статей -- это уже дело вполне привычное. Но вот неуказание автора и искажение названия -- это уже не очень хорошо. Посмотрим, что из этого получится ;-)

to Ivax:
Спасибо за отзыв. Но Вы же теперь меня обязываете вернутся к работе над начатой серией статей по разработке компонент ;-)
 Geo


06-07-2008 14:56
Вопрос о преимуществах модификации стандартных компонент перед использованием сторонних компонент, перед использованием обработчиков событий, позволяющих зачастую изменять внешний вид стандартных компонент в достаточно широком диапазоне, а также зачем вообще объединять свой код в классы, а не ограничиться применением стандартных классов, выходит за рамки данной статьи.
Надеюсь это будет столь же интересная статья и не одна. Буду ждать :)
 Ivax


04-07-2008 11:18
To Антон Григорьев

Вроде, "Интерфейс" - фирма известная, с хорошей репутацией, а тут вдруг ведёт себя так непорядочно. Кризис у них, что ли, на честное заполнение сайта средств перестало хватать?
Кажется, это у них обыкновение - http://groups.google.com/group/ru-firebird/browse_thread/thread/17d990e550e85445/28ac087def8e1289

С уважением,


04-07-2008 10:13
сообщение от автора материала
Я тоже заметил эту статью. Причем еще и название исказили. Не стал ругаться только потому, что там есть ссылка на оригинальную статью на Королевстве Delphi. Кому будет интересно, пойдет по ссылке и все прочитает.
 Geo


04-07-2008 09:46
А статья-то в народ пошла!

Ага, причём, как обычно, без указания имени автора. На фразу "Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта" внимания явно не обратили - не знаю, как к автору, но к администрации сайта за разрешением никто не обращался. Небольшой поиск показал, что там ещё несколько скопированных таким же образом статей с Королевства, тоже без указания автора. Вроде, "Интерфейс" - фирма известная, с хорошей репутацией, а тут вдруг ведёт себя так непорядочно. Кризис у них, что ли, на честное заполнение сайта средств перестало хватать?


04-07-2008 06:57
А статья-то в народ пошла!
http://www.interface.ru/home.asp?artId=16753


03-07-2008 04:16
А название статьи порадовало:) Давно ждал от вас этой статьи:)

Эт точно! :) Теперь, говоря "Шаманский метод Geo", можно будет подкрепить слова ссылкой
 Ins


03-07-2008 04:00
>>> Могу только добавить, что там автор предлагает использовать такого рода прием для фикса багов
Так получилось, что этот трюк вошёл в серию постов о возможных фиксах компонент в связи с выходом D2007 - non-breaking release. Там же рядом лежат ещё два способа (более грязных) для достижения той же цели (имеется ввиду фикс прогрессбара) - подмена класса и замена виртуальных методов.


03-07-2008 02:14
сообщение от автора материала
>>> Однако, есть небольшой недостаток в таком подходе - описание "нового" компонента находится в интерфейсной части модуля.
А что в этом плохого? Я как-то не считаю, что в модуле формы ы интерфейсной части не должно быть ничего, кроме объявления класса формы ;)
 Geo


03-07-2008 01:55
Да, хорошая статья, особенно для новичков. Однако, есть небольшой недостаток в таком подходе - описание "нового" компонента находится в интерфейсной части модуля.

PS Предлагаю все, что еще небыло напечатано на КД, называть "методом Geo" ;-)


03-07-2008 01:29
сообщение от автора материала
to Александр Алексеев:
Лишнее подтверждение того, что идея лежит на поверхности.

Могу только добавить, что там автор предлагает использовать такого рода прием для фикса багов, я же -- жуткая сволочь -- предлагаю к массовому использованию как штатный прием при разработке своих проектов :D
 Geo


02-07-2008 12:40
Просто ссылка по теме:
http://hallvards.blogspot.com/2007/04/hack16-published-field-rtti-replacement.html


01-07-2008 06:49
Да, забыл сказать, что статья мне очень понравилась. Предполагал, что подобное сделать возможно, но никогда не экспериментировал. Спасибо, возьму на вооружение :)


01-07-2008 06:35
сообщение от автора материала
>>> Ну почему же? Очень даже можно.
Во-первых, то, что сказал Александр Алексеев. Во-вторых, речь идет не о повторе в новом классе функционала оригинального класса, а об использовани оригинального класса: это несколько разные вещи. В-третьих, подозреваю, что не все модификации можно отключить флажком: имейте в виду, что можно не только рисование рамочки добавлять, но и вносить более существенные изменения.

А что касается простенького примера из статьи, то в нем всего лишь надо выставить BorderColor равным значению Color, чтобы внешний вид совпал с оригинальным ;-) Правда, это не сработает (или сработает?), если Transparent = true.
 Geo


01-07-2008 06:34
И как же это вы собираетесь переключать IsStandart во время проектирования и загрузки формы?
Да даже элементарных Label1.IsSnandart:=true при создании формы. А можно вообще использовать Label1.Tag =0 - стандартное поведение, <>0 - рисуем рамочку. Можно вообще по значению Tag рисовать разные рамочки и не только их


01-07-2008 06:13
И как же это вы собираетесь переключать IsStandart во время проектирования и загрузки формы?


01-07-2008 05:42
>>> Как использовать на одной форме модифицированный и не модифицированный TLabel?
Никак. Только если что-то создавать в run-time.

Ну почему же? Очень даже можно. Ну, правда, еще более модифицированный - добавляется мааааленький флажочек :)

procedure TLabel.Paint;
begin
  inherited;
  if IsStandart then exit;
  with Canvas do
    begin
    Brush.Color:=BorderColor;
    FrameRect(ClientRect);
    end;
end;



01-07-2008 05:20
сообщение от автора материала
>>> Честно говоря, мне кажется, лучше создавать свои компоненты и добавлять их в палитру.
Это хорошо, если Вы постоянно занимаетесь развитием одного и того же проекта. Тогда это будет не просто лучше, это будет правильный вариант.

А у меня, например, долгосрочных серьезных проектов нет. Зато уйма мелких программок (утилиты для себя, игрушки для детей и т.п.). При этом практически в любом проекте либо доабатываются существующие классы, либо создаются новые. Зачастую, изменения незначительны, но я принципиальный сторонник инкапсуляции функционала в классы, но принципиальный противник использования универсальных компонент, которые делают то, что нужно в конкретной задаче, и еще уйму того, что в конкретной задаче не нужно. Вы представляете, как бы раздулась моя палитра?

>>> Такие махинации с подменой VCL-классов ни к чему хорошему не приведут и запутают программистов при совместной разработке.
Могут запутать, если уровень программистов низок (компонентонаформокидатели) и если информационное обеспечение работ не продумано.

>>> Как использовать на одной форме модифицированный и не модифицированный TLabel?
Никак. Только если что-то создавать в run-time. Данное ограничение прописано в статье.

>>> Поэтому сразу появляется желание вынести модифицированный TLabel в отдельный модуль. Как я понимаю, в этом случае метод перестает работать.
Ничуть не перестает. Про это тоже написано в статье. Вариант предложен Юрием Спектором (ака Ins).

>>> Если взвесить все плюсы и минусы, то мне кажется лучше использовать свои компонент зарегестрированный в палитре.
Не получится взвесить все плюсы и минусы один раз на все случаи жизни. Их нужно взвешивать для конкретной задачи. Моменты, которые обязательно нужно учесть в процессе взвешивыания, упомянуты в статье.
 Geo


01-07-2008 04:10
Честно говоря, мне кажется, лучше создавать свои компоненты и добавлять их в палитру. Такие махинации с подменой VCL-классов ни к чему хорошему не приведут и запутают программистов при совместной разработке. Возникает ряд вопросов: Как использовать на одной форме модифицированный и не модифицированный TLabel? Во вторых, к примеру, я не сторонник описания с десятка классов в одном модуле. Поэтому сразу появляется желание вынести модифицированный TLabel в отдельный модуль. Как я понимаю, в этом случае метод перестает работать. Если взвесить все плюсы и минусы, то мне кажется лучше использовать свои компонент зарегестрированный в палитре.    


01-07-2008 01:37
сообщение от автора материала
>>> Но компоненты, созданные в рантайме с явным указанием модуля будут старыми
Это, конечно, правильное замечание. Но, поскольку речь в статье идет именно о визуальном проектировании, то решил не уточнять этот момент каждый раз. И так размер раздулся. Думал будет совсем чуть-чуть, а когда, закончив, увидел в Ворде шесть страниц, то был изрядно удивлен ;-)

>>> ПМСМ ни чего шаманского. Вполне нормальный метод.
Ну, я же сказал, что название исторически сложившееся. Я и себя в названии метода выпячивать не стал бы ;-)
 Geo


01-07-2008 00:52
З.Ы. А название статьи порадовало:) Давно ждал от вас этой статьи:)

Ага. Интересная история у меня с этим названием произошла:
Переписывался по аське с одним знакомым, обсуждали какую-то реализацию, и тут я упомянул про "метод Geo". "Что это за метод?" - не понял он. Объяснил на пальцах, этот способ он знал (он достаточно опытный программист), следом вопрос - "А кто такой Geo?" Оказалось, и про Королевство он знал, просто не принимал участие в обсуждениях. Но название ему понравилось :D Согласитесь, это короче, чем "использование одинаковых имён с указанием конкретного модуля".


01-07-2008 00:38
ПМСМ ни чего шаманского. Вполне нормальный метод.
 Cep


30-06-2008 23:47
Не получится на одной форме использовать и оригинальные, и модифицированные компоненты. Только что-то одно.
Это немного неверное утверждение :о) Те, что были созданы дизайнером форм - безусловно станут таковыми. Но компоненты, созданные в рантайме с явным указанием модуля будут старыми. Иногда это то, что доктор прописал (:

З.Ы. А название статьи порадовало:) Давно ждал от вас этой статьи:)


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Раз дощечка, два дощечка будет лесенка. Раз словечко, два словечко, будет ЧТО?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования