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

Вниз

Вот завел себе блог   Найти похожие ветки 

 
Суслик ©   (2007-03-05 01:10) [0]

Здравствуйте.

Сегодня я завел себе блог http://timokhov.blogspot.com/
Как таковой мне лично он не нужен :) Я его завел для того, чтобы доносить народу новости о Delphi 2007, которая выйдет очень скоро.

Если кому интересно, то можете читать блог и оставлять комменты (вот я оторвусь на модерировании :)).

Я планирую писать что-то каждый день. Писать есть о чем.


 
Германн ©   (2007-03-05 03:04) [1]


> Я планирую писать что-то каждый день. Писать есть о чем.
>

В добрый путь! (Только не возгордись слишком:)


 
Суслик ©   (2007-03-05 03:07) [2]


> Германн ©   (05.03.07 03:04) [1]
> > Я планирую писать что-то каждый день. Писать есть о чем.
> В добрый путь! (Только не возгордись слишком:)


И как тебе в голову могло прийти такое пожелание? :(


 
Германн ©   (2007-03-05 03:30) [3]


> И как тебе в голову могло прийти такое пожелание? :(
>

Меня смутило то, что это уже вторая твоя ветка по данному вопросу за небольшой период времени. :( Ведь http://delphimaster.net/view/15-1173008259/ ещё даже не ушла с первой страницы!


 
KSergey ©   (2007-03-05 10:39) [4]

Прикольно, людям есть что писать каждый день...


 
Суслик ©   (2007-03-06 15:26) [5]

Что вы знаете про FastMM? Хороший и бесплатный прибамбас к Дельфи, способный сильно повысить качество создаваемых программ.

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

http://timokhov.blogspot.com/2007/03/delphi-2007-iii-fastmm.html

Замечания welcome.


 
Плохиш ©   (2007-03-06 15:32) [6]

Незачёт!
Темы разведения сусликов и секса не раскрыты :-(


 
Ega23 ©   (2007-03-06 15:34) [7]

Дима!
Хватит дизайн менять по 5 раз на дню.


 
Суслик ©   (2007-03-06 16:07) [8]


>  [7] Ega23 ©   (06.03.07 15:34)
> Дима!
> Хватит дизайн менять по 5 раз на дню.

больше не буду - я просто искал дизайн где ширина у текста большая. Нашел наконец, а то переносов очень много.


 
Dok_3D ©   (2007-03-07 09:57) [9]

2 KSergey ©   (05.03.07 10:39) [4]
>>Прикольно, людям есть что писать каждый день...

Гораздо прикольней, что теперь людям есть что читать каждый день :))


 
Суслик ©   (2007-03-07 10:24) [10]

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


 
xayam ©   (2007-03-09 11:53) [11]


> Суслик ©  

кстати раз ты тестируешь D2007, у нее есть такой баг http://delphimaster.net/view/15-1173008259/  ? На турбе и 2006 есть.


 
jack128 ©   (2007-03-09 13:50) [12]

Дим, а будет подправлен баг с хелперами такого содержания:
Хелпер - предок

unit Unit3;

interface

uses
 Classes;

type
 TStringsHelper = class helper for TStrings
 public
   procedure DoWork;
 end;

implementation

procedure TStringsHelper.DoWork;
begin
 //
end;

end.


Хелпер-потомок, добавляет overload метод
unit Unit4;

interface

uses
 Classes, Unit3;

type
 TStringsHelper = class helper for TStrings
 public
   procedure DoWork(I: Integer); overload;
 end;

implementation

procedure TStringsHelper.DoWork(I: Integer);
begin
 //
end;

end.


используем:

unit Unit2;
uses
 Unit3;

procedure TForm2.Button1Click(Sender: TObject);
begin
 Memo1.Lines.DoWork; // [Pascal Error] Unit2.pas(30): E2250 There is no overloaded version of "DoWork" that can be called with these arguments
end;


То есть потомок скрывает метод предка, не смотря на дерективу overload


 
Игорь Шевченко ©   (2007-03-09 15:45) [13]


> используем:
>
> unit Unit2;
> uses
>  Unit3;
>
> procedure TForm2.Button1Click(Sender: TObject);
> begin
>  Memo1.Lines.DoWork; // [Pascal Error] Unit2.pas(30): E2250
> There is no overloaded version of "DoWork" that can be called
> with these arguments
> end;


Я сильно извиняюсь, а если unit4 включить в uses ?


 
Суслик ©   (2007-03-09 15:57) [14]


> Я сильно извиняюсь, а если unit4 включить в uses ?

вот он опыт! а я и не заметил, что unit4 отсутствует


 
Ega23 ©   (2007-03-09 16:00) [15]

Я сильно извиняюсь, но что это за зверь:
TStringsHelper = class helper for TStrings????

З.Ы. смотрел в хелпе - не понял. Delphi 7.


 
Kolan ©   (2007-03-09 16:02) [16]

> не понял. Delphi 7

Шутишь, да?

от BDS почитай справку "class helpers"


 
Джо ©   (2007-03-09 16:02) [17]

> [15] Ega23 ©   (09.03.07 16:00)
> Я сильно извиняюсь, но что это за зверь:
> TStringsHelper = class helper for TStrings????
>
> З.Ы. смотрел в хелпе - не понял. Delphi 7.

Это нужно смотреть в хелпе к 2006 & 2007 :)


 
Игорь Шевченко ©   (2007-03-09 16:06) [18]

Джо ©   (09.03.07 16:02) [17]

Можно прочитать нашу статью на Королевстве Delphi про Delphi 2005, там, где эти helper"ы появились.

Ega23 ©   (09.03.07 16:00) [15]

Helper - это конструкция языка, позволяющая добавлять к классу поведение, не меняя его объявления. Сделано при реализации Delphi для .Net, в первую очередь.


 
Ega23 ©   (2007-03-09 16:10) [19]


> Helper - это конструкция языка, позволяющая добавлять к
> классу поведение, не меняя его объявления. Сделано при реализации
> Delphi для .Net, в первую очередь.
>


Понял.
С .Net дел не иммел. Просто увидел такую конструкцию - и стало страшно интересно, чего я не знаю.
Всем спасибо!


 
Джо ©   (2007-03-09 16:28) [20]

> [19] Ega23 ©   (09.03.07 16:10)

> С .Net дел не иммел.

Это применимо и к версии языка для Win32.


 
Игорь Шевченко ©   (2007-03-09 16:33) [21]

Джо ©   (09.03.07 16:28) [20]


> Это применимо и к версии языка для Win32.


Это да, применимо. Только не всегда можно понять, когда имеет смысл применять такую конструкцию в реальной жизни


 
Суслик ©   (2007-03-09 16:37) [22]


> Это да, применимо. Только не всегда можно понять, когда
> имеет смысл применять такую конструкцию в реальной жизни

согласен.
я вообще не очень понимаю семантическую нагрузку, возложенную на хелперы. было бы очень здоров, если бы:
1. дока по хелперам была лучше.
2. сам кодгир показал мастер-класс применения хелперов где-то у себя в коде. пока, насколько я знаю, примеров нет.


 
jack128 ©   (2007-03-09 16:43) [23]

Суслик ©   (09.03.07 15:57) [14]
> Я сильно извиняюсь, а если unit4 включить в uses ?

вот он опыт! а я и не заметил, что unit4 отсутствует

то же самое.


 
oxffff ©   (2007-03-09 16:47) [24]


> согласен.
> я вообще не очень понимаю семантическую нагрузку, возложенную
> на хелперы. было бы очень здоров, если бы:
> 1. дока по хелперам была лучше.
> 2. сам кодгир показал мастер-класс применения хелперов где-
> то у себя в коде. пока, насколько я знаю, примеров нет.


Скорее всего смысл в том, что для некоторых классов имеет место быть набор процедур и функций, которые являются вспомогательными и вносить их определение класса является семантической ошибкой.

Но поскольку их  можно/нужно сгруппировать. поэтому и придумали концепцию helperов (аля подпространства имен для класса) .  
Imho.


 
Джо ©   (2007-03-09 16:47) [25]

> [21] Игорь Шевченко ©   (09.03.07 16:33)
> Джо ©   (09.03.07 16:28) [20]
>
>
> > Это применимо и к версии языка для Win32.
>
>
> Это да, применимо. Только не всегда можно понять, когда
> имеет смысл применять такую конструкцию в реальной жизни

Я, честно говоря, так ни разу и не использовал, тоже применения не нашел :) Ну, если бы еще были закрытые для наследования классы, то тогда, в качестве костыля, может и пригодилось бы. А так — тоже не понимаю, зачем вносить в код лишнюю путаницу.
Недавно писал SaveToStream одного вреднего класса. Вначале наделал хелперов к TStream вроде WriteString и т.п. Затем подумал... и убрал :) Не знаю, может и зря убрал. В общем, я еще открыт для выслушивания мнений по этой теме :)


 
oldman ©   (2007-03-09 16:47) [26]


> Суслик ©   (06.03.07 15:26) [5]
> Что вы знаете про FastMM? Хороший и бесплатный прибамбас
> к Дельфи, способный сильно повысить качество создаваемых
> программ.


Улыбнуло...

Имхо, лучший прибамбас к Дельфи, действительно способный повысить качество создаваемых программ - это программист!!!
:)))


 
Суслик ©   (2007-03-09 16:49) [27]


>  [26] oldman ©   (09.03.07 16:47)

не нравится - не читай. а прибамбас действительно полезен изрядно.


 
oxffff ©   (2007-03-09 16:51) [28]

в добавлении к  oxffff ©   (09.03.07 16:47) [24]

Хочу заметить. Что при определении виртуальной функции в helper требуется наличие методов Iunknown. При добавлении их. Вызов не работает.
ASM код мы уже разбирали летом.
Кстати есть вопрос по этому поводу на qc.


 
oldman ©   (2007-03-09 16:52) [29]


> Суслик ©   (09.03.07 16:49) [27]


Я же написал - "улыбнуло"...
Хамить-то зачем?
А то ведь "хамить не надо по телефону" Варенуху знаешь куда привело? :)


 
jack128 ©   (2007-03-09 16:53) [30]

jack128 ©   (09.03.07 16:43) [23]
то же самое.

вообще - для доступа к методам хелпера-предка не обязательно добавлять его юнит в uses/ Достаточно добавить туда хотя бы один из модулей, где объявлен хелпер-потомок.


 
Суслик ©   (2007-03-09 16:57) [31]

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

есть такая билиотека nativexml - некий xml парсер. хорош тем, что на дельфи, в исходниках и ни от кого не зависишь - парсер всегда с тобой.

так вот, данная библиотека обладает весьма мерзким (имхо) и невнятным интерфейсом. одним словом не все мне в ней нравится.

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

какие есть пути? можно написать потомка. но! что с ним дальше делать? ведь сама баблиотека ничего о потомке не знает. Например, если я напишу TXmlNodeEx (потомок от TXmlNode - класс, соответствующий узлу в nativexml), то что мне с ним делать дальше? сама библиотека как плодила TXmlNode, так и будет это продолжать делать.

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


 
jack128 ©   (2007-03-09 16:58) [32]

Джо ©   (09.03.07 16:47) [25]
Вначале наделал хелперов к TStream вроде WriteString и т.п. Затем подумал... и убрал :)

И чем заменил?  Набором процедур аля:

procedure Stream_WriteString(AStream: TStream; const S: string);
function Stream_ReadString(AStream: TStream): string;

и чем это лудше хелперов??
Сравни:

procedure TSomeObject.ReadFromStream(Stream: TStream); {override}
begin
 inherited;
 SomeStrProp := Stream_ReadString(Stream);
end;

procedure TSomeObject.ReadFromStream(Stream: TStream); {override}
begin
 inherited;
 SomeStrProp := Stream.ReadString;
end;
Помоему второй вариант гараздо проще для восприятия.


 
jack128 ©   (2007-03-09 16:59) [33]

Суслик ©   (09.03.07 16:57) [31]
выходом может быть написание хелпера. это единственное место, где я этими хелперами пока пользуюсь.


Таким местом может быть любая сторонняя библиотека. В первую очередь - VCL


 
Суслик ©   (2007-03-09 17:00) [34]


>  [30] jack128 ©   (09.03.07 16:53)
> jack128 ©   (09.03.07 16:43) [23]
> то же самое.
> вообще - для доступа к методам хелпера-предка не обязательно
> добавлять его юнит в uses/ Достаточно добавить туда хотя
> бы один из модулей, где объявлен хелпер-потомок.

правило простое - используется 0 или 1 хелпер, который ближе по скопу.

будет ближе предок, будет предок использовать. будет потомок - значит потомок.


>  [29] oldman ©   (09.03.07 16:52)

ладно, не обращай внимания :) это я так - подумал, что издеваешься :)


 
Суслик ©   (2007-03-09 17:01) [35]


> [33] jack128 ©   (09.03.07 16:59)
> Таким местом может быть любая сторонняя библиотека. В первую
> очередь - VCL

Твоя правда.


 
Джо ©   (2007-03-09 17:01) [36]

> [32] jack128 ©   (09.03.07 16:58)
> Джо ©   (09.03.07 16:47) [25]
> Вначале наделал хелперов к TStream вроде WriteString и т.п.
> Затем подумал... и убрал :)
> И чем заменил?

Да просто наделал в своем «вредном классе» приватных методов WriteString, WriteSomething и все...


> и чем это лудше хелперов??

Черт его знает. (Не)здоровый консерватизм, в первую очередь. Как-то оно непривычно :)


 
Суслик ©   (2007-03-09 17:02) [37]


>  [36] Джо ©   (09.03.07 17:01)
> Черт его знает. (Не)здоровый консерватизм, в первую очередь.
> Как-то оно непривычно :)


и правильно делаешь :) они пока доку нормальную не напишут к хелперам с указанием всех особенностей их использования я их широко использовать не буду.


 
Игорь Шевченко ©   (2007-03-09 17:04) [38]

jack128 ©   (09.03.07 16:53) [30]

Какие предки и потомки у helper"ов ? Каждый helper является равноправным.

в help написано -

"You can define and associate multiple class helpers with a single class type. However, only zero or one class helper applies in any specific location in source code. The class helper defined in the nearest scope will apply"

все прекрасно работает:

unit helper1;

interface
uses
Classes;

type
 TStringsHelper = class helper for TStrings
 public
   procedure DoWork;
 end;

implementation

{ TStringsHelper }

procedure TStringsHelper.DoWork;
begin
 //
end;

end.


unit Helper2;

interface
uses
Classes, Helper1;

type
TStringsHelper2 = class helper for TStrings
public
  procedure DoWork(I: Integer);
end;

implementation

{ TStringsHelper }

procedure TStringsHelper2.DoWork(I: Integer);
begin
 //
end;

end.


использование:

implementation
uses
 helper2, helper1;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Lines.DoWork;
end;

end.


или

implementation
uses
 helper1, helper2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Lines.DoWork(1);
end;

end.


Helper"ы не знают друг про друга, как классы в иерархии, поэтому overload к ним вряд ли применим в твоем случае.

Вот такой код еще работает:

unit Helper3;

interface
uses
 Classes;

type
 TStringsHelper = class helper for TStrings
 public
   procedure DoWork; overload;
   procedure DoWork (I : Integer); overload;
 end;

implementation

{ TStringsHelper }

procedure TStringsHelper.DoWork;
begin
 //
end;

procedure TStringsHelper.DoWork(I: Integer);
begin
 //
end;

end.


Использование:

implementation
uses
 helper1, helper2, helper3;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Lines.DoWork(1);
 Memo1.Lines.DoWork;
end;

end.


 
oxffff ©   (2007-03-09 17:04) [39]

Есть еще вариант

TXmlNodeAdapter=class
public
construcor create(Node:TXmlNode);
end;


 
Игорь Шевченко ©   (2007-03-09 17:06) [40]

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



Страницы: 1 2 3 4 5 6 7 вся ветка

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

Наверх





Память: 0.57 MB
Время: 0.047 c
2-1175511389
DelphiLexx
2007-04-02 14:56
2007.04.22
Правильно обработать OnCreate при динамическом создании формы


15-1174994279
Real
2007-03-27 15:17
2007.04.22
IE7


4-1164636280
samael6
2006-11-27 17:04
2007.04.22
Остановка драйвера


8-1154023549
S0ldier
2006-07-27 22:05
2007.04.22
Захват звука


2-1175619207
Troan_81
2007-04-03 20:53
2007.04.22
Проверить существует ли окно





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