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

Вниз

Добавление published свойства   Найти похожие ветки 

 
RASkov   (2006-10-02 16:33) [80]


> DimaBr   (02.10.06 16:10) [79]

Спасибо за индех. То что надо.

> Лучше всего организовать правильно, иначе плохо будет работать
> :)))

Это понятно.... :) я имел ввиду обработать OnMove  и PtInRect() или еще как? и на 5 - ?


 
DimaBr   (2006-10-02 17:02) [81]


> я имел ввиду обработать OnMove  и PtInRect() или еще как?

Да, естественно, только не OnMove, а procedure MouseMove(Shift: TShiftState; X, Y: Integer);override;

> 5 - Чем лучше?

Тем что в OwnedCollection уже реализован GetOwner и гораздо удобнее динамически менять класс элементов коллекции (хотя в вашем случае в этом не необходимости)


 
RASkov   (2006-10-04 02:52) [82]

DimaBr, Вот еще такокой вот вопрос попробую сформулировать...
Как отловить в дизайнтайме выделение/выбор-невыбор itema в редакторе TCollection в инсп. объектов. (ниже конкретней попробую описать) Если это возможно конечно, я думаю возможно, но если это сложно то отставить пока.
Вообщем идея такая когда выделяю на форме свой компанент и жму кнопку[...] в поле MenuCollection - то открывается редактор этого поля - так вот хотелось бы при выборе элемента в коллекции (именно в дизайнтайме) группа итемов меню этого элемента, которые рисуются на канве вертикально или горизонтально, обводились пунктир. прямоугольником ну или еще как выделялись бы. Т.е. когда их (эл. коллекции) штуки 3 и более при выборе различать где он свои итемы рисует... Вот. Если вопрос не понятен, то не судьба мне...:( все равно спасибо.


 
DimaBr   (2006-10-04 09:19) [83]

Не знаю точно, но думаю что со стандартным редактором ничего не выйдет.
Я бы ввёл в элемент коллекции свойство DesignerSelected: boolean и написал свой редактор для коллекции, который изменяет это свойство. А отрисовка уже просто. Вы можете написать свой редактор ?


 
RASkov   (2006-10-04 10:32) [84]


> Вы можете написать свой редактор ?

Я пока даже и незнаю что и ответить. Впервой с написанием компанентов и ихими "причендалами". А почему не смогу - смогу, но только потом:). По всей видимости пока отставить в эту сторону. Сейчас нужно немного доделать (на данный момент компанент умеет себя рисовать) функционал компанета а там посмотрим....
Ну я так понял, что не совсем просто это [82].
А вот при удалении элемента коллекции нужно перерисовать компанент - я так думаю нужно перекрыть метод коллекции (TOwnedCollection - он получше:) чутьчуть) Notify  - наверное в перекрытом нужно просто вызвать inherited; и GetOwner.Invalidate; Его параметр (Notify(Item: TColl...Item;...) Item я так думаю не надо ни с кем сравнивать?


 
DimaBr   (2006-10-04 11:18) [85]

Не знаю, отрабатывает ли Notify в дизайнере, можно и в TPicMenuCollectionItem.Destroy;


procedure TPicMenuCollectionItem.Destroy;
var AOwner: TPicMenus;
begin
 AOwner := GetPicMenus;
 inherited Destroy;
 AOwner.Invalidate
end;


 
RASkov   (2006-10-04 14:02) [86]

Блин, почему мне такая мысль не пришла на ум, ведь элементарно ж:)
DimaBr, незнаю уже как и благодарить.... постараюсь "мелочные" вопросы в этой ветке больше не спрашивать. Спасибо.


 
RASkov   (2006-10-08 15:53) [87]

Вот такой вот вопрос - добавил свойство:
property FileSoundEnter: TFileName read FFileSoundEnter write SetFileSoundEnter;
ну и такое же для Leave.
как можно задать фильтр в диалоговом окне выбора файлов когда в инспекторе щелкаем [...] кнопку?
Или это опять ужасно сложно?
На данный момент компанент почти готов осталось реализовать клики по итемам, думаю с этим справлюсь. А прикольный получается компанентик:)
А реально ли в компаненте использовать библиотеку, к примеру BASS? (само собой эту версию BASS распростронять с компанентом), или никчему это.
Хотел сделать (т.е. уже сделал) звуки на смену итемов, ну и само собой есть свойство UseSound которое запрещает звуки.
Доделаю полностью выложу - но только в скомпелированном виде (стыдно за код:|) постараюсь с ридмиком, но если кого заинтересует.... хотя врядли, писал его для себя и в целях обучения:) DimaBr если нужно код - без разговора:)
ЗЫ 2 вопросика в посте. Спасибо.


 
atruhin ©   (2006-10-08 16:20) [88]

Создать свой PropertyEditor в твоем варианте не сложно.


 
RASkov   (2006-10-08 17:36) [89]

> как можно задать фильтр в диалоговом окне выбора файлов
> когда в инспекторе щелкаем [...] кнопку?

Блин, щас вот второй раз прочитал... короче вот:
в published добавил вышеописанное свойство -  в инспекторе для этого свойства прикрутился FileOpenDialog - как задать фильтр на типы файлов которые можно выбрать в нем *.wav;*.mp3... Вооще одного wav"a хватит.


 
RASkov   (2006-10-08 17:41) [90]

> [88] atruhin ©   (08.10.06 16:20)

Да не приходилось никогда иметь дело с PropertyEditor, даже не знаю с какой стороны подойти... Если не трудно в трех словах с кодом - можно рассказать про это нехитрое дело. Создание своих редакторов свойств. Или как это делает например, RxLib, подменяет обычный/стандартный редактор Caption"ов на свой диалог?


 
atruhin ©   (2006-10-09 03:49) [91]

В двух словах не получится. Найди в сети книгу "Создание оригинальных компонент с среде Delphi 2" Рэй Конопка, там все хорошо описано, с примерами.


 
DimaBr   (2006-10-09 11:12) [92]


TFindFileProperty = class(TStringProperty)
 function GetAttributes: TPropertyAttributes; override;
 procedure Edit; override;
end;

{ TFindFilerProperty }

procedure TFindFolderProperty.Edit;
begin
 inherited;
 with TOpenDialog.Create(nil) do
    try
      Filter := "*.wav";
      if Execute then SetValue(FileName);
    finally
       Free;
    end;{try}
end;

function TFindFolderProperty.GetAttributes: TPropertyAttributes;
begin
 Result := inherited GetAttributes + [paDialog];
end;

procedure Register;
begin
...
 RegisterPropertyEditor(TypeInfo(string), TMyComponent, "NameProperty", TFindFileProperty);
end;


 
RASkov   (2006-10-09 13:32) [93]

> [92] DimaBr   (09.10.06 11:12)

Спасибо, помоему ничего сложного, вечером попробую.
procedure Register; я так понимаю одна и для регистрации компанента и свойства. Ну т.е. это все в одном модуле с компанентом писать? ответ наверное: можно но не обязательно. Верно?
А по второму вопросу про "звуки в компаненте"?


 
DimaBr   (2006-10-09 13:52) [94]


>  Ну т.е. это все в одном модуле с компанентом писать?

Всё зависит от версии Delphi, для шестёрке и выше - отдельный модуль с регистрацией + DesignIDE.dcp в пакет


 
RASkov   (2006-10-09 14:16) [95]

> [94] DimaBr   (09.10.06 13:52)

Ух. Понял. У меня D7. А ведь я бы все в одном прикрутил и "заработало" бы:)
т.е. в пакете создать новый модуль в нем описать редактор свойства и добавить еще и DesignIDE.dcp в пакет? DesignIDE.dcp а че в нем? он тай большой. Спасибо.


 
DimaBr   (2006-10-09 15:01) [96]

Начиная с шестёрки идёт разделение дизайн кода и Run-Time кода. Вы просто не сможете добавить DesignEditors (в котором описаны редакторы) и скомпилять в одном модуле - будет ругаться - не хватает Proxies.dcu


 
RASkov   (2006-10-09 16:52) [97]


> Начиная с шестёрки идёт разделение дизайн кода и Run-Time
> кода. Вы просто не сможете добавить DesignEditors (в котором
> описаны редакторы) и скомпилять в одном модуле - будет ругаться
> - не хватает Proxies.dcu


Я вот в прочих вопросик задавал - ответа толкового нет. Может есть соображения какие. Вопрос кое каким боком относится к компанентам.
http://delphimaster.net/view/15-1159716860/
и вот из последнего

> Paket и ни в каком другом (пакете) он не already, кроме
> как в тестовом проекте в модуле тестовой формы.....

Даже если и просто один пакет открыть в IDE и ничего более, иногда (даже без явных и неявных ошибках) т.е. проверяешь синтаксис нормально (не хинтов не варнингов ни errorов), произведешь несущественное изменение (сотрешь буковку и ее же напишешь), хочешь опять проверить синтаксис - и тут эта ошибка.:( Спасибо.


 
RASkov   (2006-10-10 01:10) [98]

> помоему ничего сложного, вечером попробую.

Спасибо разобрался, минут 10 попарился с регистрацией... с толку сбило TypeInfo(string) у меня то TFileName; (TFileName = type string;)
И я у метода Edit убрал inherited, он ведь в цепочке TFindFileProperty = class(TStringProperty) вызывается непосредственно из TPropertyEditor в котором ничего путевого для OpenDialog не нашел, да еще TStringList там создается к чему то - незнаю... может я и неправ - убрав его.
DimaBr, вот уже я немного вник в редакторы свойст, спасибо большое за [92].
Близится к завершению мой чудо-юдо компанент.
>
И вот еще вопросик: как ограничить установку моего компанента только в D7?
Потому, что делал его в D7, а заморачиваться с дерективами пока нехочу.
Знаю, что это грубое решение... но пока учусь сойдет, тем более для себя его делал. Хотя сам компанент использует
Windows, SysUtils, Classes, Graphics, Controls; У меня нет уверенности, что везде они одинаковые... да еще редактор свойства
SysUtils, DesignIntf, DesignEditors, PicMenu;
То что подчеркнул сомнительные; А может я зря переживаю?


 
DimaBr   (2006-10-10 08:20) [99]


> А может я зря переживаю?

Зря, если не будите устанавливать на < Delphi 6


 
RASkov   (2006-10-10 15:44) [100]

> [99] DimaBr   (10.10.06 08:20)

Ну дык если кто нить попросит компанент а у него D4 или ниже?
Точнее выложу в инете для "ознакомления" без исходников:) ну и чебы ...
Ведь как то можно вопрос решить?:) Не, ну да ладно, я не сильно за это переживаю:)


 
RASkov   (2006-10-10 15:45) [101]

DesignIntf в D4 такого нет помоему, там вроде DsgnInf или че то так.


 
RASkov   (2006-10-10 16:11) [102]

> Не, ну да ладно, в данный момент я не сильно за это переживаю:)

Хотя потом нужно будет научится различать версии Delphi....Чебы проблем не было:)


 
RASkov   (2006-10-11 20:34) [103]

Вот пару вопросиков появились:
1) можно ли как нибудь объеденять некоторые свойства(разного типа) в группы (т.е. чтоб в инспекторе был + и имя группы), ну типа как у свойства Font только без кнопки диалога? Или же опять редактор нужен, но тут уже походу непросто будет.
2) Как реализовать двойной клик по компаненту в дизайнере, что бы появилось окно свойства TCollection? ну т.е. в инспекторе у свойства типа TCollection есть кнопочка, так вот как даблкликнув по компаненту кликнуть по этой кнопочке?

Вот как сделал, а дальше чето несоображу:(
procedure TPicMenusEditor.Edit;
begin
 ExecuteVerb(1);
end;

procedure TPicMenusEditor.ExecuteVerb(Index: Integer);
begin
 case Index of
  0: MessageDlg("Author RASkov 2006"#13"Thanks DimaBr"#13
     +"and www.delphimaster.ru", mtInformation, [mbOk], 0);
  1: MessageDlg("Unknow edit", mtInformation, [mbOk], 0);
 end;
end;

function TPicMenusEditor.GetVerb(Index: Integer): String;
begin
 case Index of
  0: Result:="&About PicMenus";
  1: Result:="&Edit Menu";
 end;
end;

function TPicMenusEditor.GetVerbCount: Integer;
begin
 Result:=2;
end;


 
RASkov   (2006-10-12 04:13) [104]

Кому интересно вот можно посмотреть что получается, в архиве только exe с использованием этого компанента
http://slil.ru/23237676 (610 Kb)
Вот скрин:
http://slil.ru/23237678 (110 Kb)


 
RASkov   (2006-10-12 04:25) [105]

Только здесь мнения, просьба не высказывать, если необходимо можно завести ветку в прочих. Дабы эта ветка туда не перекочевала.
[103] в силе вопрос 2
по первому, я так понял, просто не получится.


 
DimaBr   (2006-10-12 08:39) [106]


> 1) можно ли как нибудь объеденять некоторые свойства(разного
> типа) в группы (т.е. чтоб в инспекторе был + и имя группы)

Можно. Это  делается так.

TMyGroup = class(TPersistent)
 private
   fMyProperty: integer;
 published
    property MyProperty: integer read fMyProperty write fMyProperty;
end;

TMyComponent = class(TComponent)
 private
   fMyGroup: TMyGroup
 published
   property MyGroup: TMyGroup read fMyGroup write SetMyGroup;
end;

constructor TMyComponent.Create();
begin
  inherited;
  fMyGroup := TMyGroup.Create;
end;

destructor;
begin
 fMyGroup.Free;
 inherited;
end;


> 2) Как реализовать двойной клик по компаненту в дизайнере,  что бы появилось окно свойства TCollection?


С позволения Юрия Зотова, выкладываю его творчество.

TColunmEditor = class(TComponentEditor)
private
  FPropInfo: PPropInfo;
  FPropEdit: IProperty;
  procedure GetPropProc(const PropEdit: IProperty);
public
  constructor Create(AComponent: TComponent; ADesigner: IDesigner); override;
  procedure ExecuteVerb(Index: Integer); override;
  function GetVerb(Index: Integer): string; override;
  function GetVerbCount: Integer; override;
  function GetPropertyName:string; virtual;
end;

{ TColunmEditor }
//  редактор свойства - коллекции (возвращаем имя свойства)
function TColunmEditor.GetPropertyName: string;
begin //
end;

constructor TColunmEditor.Create(AComponent: TComponent; ADesigner: IDesigner);
begin
 inherited;
 FPropInfo := GetPropInfo(GetComponent.ClassInfo, GetPropertyName, [tkClass])
end;

procedure TColunmEditor.GetPropProc(const PropEdit: IProperty);
begin
 if PropEdit.GetPropInfo = FPropInfo then FPropEdit := PropEdit
end;

procedure TColunmEditor.ExecuteVerb(Index: Integer);
var Selections: TDesignerSelections;
begin
 case Index of
  0: begin
       if (FPropEdit = nil) and (FPropInfo <> nil) then begin
         Selections := TDesignerSelections.Create;
         try
           Designer.GetSelections(Selections);
           GetComponentProperties(Selections, [tkClass], Designer, GetPropProc)
         finally
           Selections.Free
         end;{try}
       end;{if}
       if FPropEdit <> nil then FPropEdit.Edit
     end
  else inherited;
 end;{case}
end;

function TColunmEditor.GetVerb(Index: Integer): string;
begin
 case Index of
   0: Result := GetPropertyName+" Editor...";
   else Result := inherited GetVerb(Index);
 end;
end;

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



 
DimaBr   (2006-10-12 08:50) [107]

Что значит "Масштаб надписей" ???


 
RASkov   (2006-10-12 11:56) [108]

> [106] DimaBr   (12.10.06 08:39)

Спасибо.

> [107] DimaBr   (12.10.06 08:50)

Ну это чтоб при масштабировании и текст "надписи"(Caption) тоже масштобировался:)


 
RASkov   (2006-10-12 12:35) [109]

Вечером попробую..., вот по первому вопросу я в принципе так и думал что через класс их объеденять нужно, поэтому теперь доступ к непосредственно свойству необходим будет через префикс MyGroup.<бывшее не в группе свойство>:=...; Так ведь? И также я думал что можно и попросче сделать, но наверное так и сделаю.
А вот в ответе на 2 чето немного запутался. GetPropertyName virtual должна вернуть имя свойства т.е. Result:="MenuCollection";?
И Designer.GetSelections(Selections); что, только если будет выделенно свойство откроется редактор? или же это можно заменить на GetComponent(0)? которое возврощает (0) первый компанент из выделенных вроде.
И наверное правельнее будет переписать все в метод Edit; (он же на двойной клик) а в ExecuteVerb - n: Edit;... так вродебы красивее.


 
DimaBr   (2006-10-12 13:03) [110]

В конструкторе запоминаем какое свойство ищем (FPropInfo), далее перебираем все свойтства компонента и сравниваем является ли текущее свойство тем самым, которое ищем. Если да то запоминае его (FPropEdit). Далее, если такое свойство нашли, вызываем его редактор (FPropEdit.Edit).
Использование:

TPicMenusEditor = class(TColunmEditor)
  function GetPropertyName:string; override;
end;

function TPicMenusEditor.GetPropertyName:string;
begin
 Result := "MenuCollection";
end;

procedure Register;
begin
.................
 RegisterComponentEditor(TPicMenus,TPicMenusEditor);
end;

Если подразумевается несколько пунктов меню, то перекрываем несколько методов, при этом первый будет - редактирование коллекции


type TPicMenusEditor = class(TColunmEditor)
  function GetPropertyName:string; override;
  procedure ExecuteVerb(Index: Integer); override;
  function GetVerb(Index: Integer): string; override;
  function GetVerbCount: Integer; override;
end;


> или же это можно заменить на GetComponent(0)?

Нет, поскольку допустим мы вибираем сначала например Label, а потом TPicMenus. Тогда у GetComponent(0) свойства MenuCollection нет.


 
DimaBr   (2006-10-12 14:03) [111]


> Ну это чтоб при масштабировании и текст "надписи"(Caption)  тоже масштобировался:)

При масштабировании чего ?


 
Наиль ©   (2006-10-12 14:37) [112]

С утра приготовил ответ на [103], но из-за неполадок с интернет не смог отправить. Т.к. первый вопрос достаточно ясен, то замечу только, что отличным примером является TLabeledEdit.
А вот по второму вопросу (вернее по ответам на него) есть замечания.
В [106] GetComponentProperties(Selections, [tkClass], Designer, GetPropProc) вызывает GetPropProc, для всех свойств всех выделеных компонент, следовательно FPropEdit.Edit будет вызван для последнего найденого свойства, а остальные изменены не будут.
Мой облегчёный вариант (без обработки исключений) предполагает, что двойной клик производится лишь по одному компоненту. Написан по аналогии с генофондом.
Пример запуска текущего редактора свойства Font.
procedure Register;

Type
TPanelEdit=class(TDefaultEditor)
private
 FFontProp:IProperty;
protected
 procedure CheckEdit(const Prop: IProperty);
public
 procedure Edit; override;
End;
---------------------------
procedure Register;
begin
RegisterComponentEditor(TPanel,TPanelEdit);
end;
{ TPanelEdit }

procedure TPanelEdit.Edit;
var
 Components: IDesignerSelections;
begin
// По аналогии с TDefaultEditor.Edit
Components := TDesignerSelections.Create;
Components.Add(Component);
FFontProp:=nil;
GetComponentProperties(Components, tkProperties, Designer, CheckEdit);
if FFontProp<>nil then FFontProp.Edit;
end;

procedure TPanelEdit.CheckEdit(const Prop: IProperty);
begin
if FFontProp<>nil then Exit;
if SameText(Prop.GetName,"FONT") then FFontProp:=Prop;

После регистрации сделай двойной щелщок по любой панели (TPanel)


 
DimaBr   (2006-10-12 15:49) [113]


> Наиль ©   (12.10.06 14:37) [112]

Вообще-то, как сейчас испробывал, у меня на D6 DblClick & Popup на двух выбранных компонентах не отрабатывается, поэтому можно голову не морочить и выбирать только первый.

P.S. Да кстати, свойство-коллекция должна быть published


 
RASkov   (2006-10-12 19:26) [114]

Незнаю смотрели демку или нет, там (у моего компанента) есть свойство которое отвечает за "масштабирование всего компанента" (раз разговор зашол про масштаб [107], думаю смотрели демку), там есть галочка "Масштабирование", так вот если ее поставить и поменять размеры окна то... будет видно вообщем косяк с надписями.

> P.S. Да кстати, свойство-коллекция должна быть published

Оно published;
-------------------


> > или же это можно заменить на GetComponent(0)?
>
> Нет, поскольку допустим мы вибираем сначала например Label,
> а потом TPicMenus
. Тогда у GetComponent(0) свойства MenuCollection
> нет.

Имелось ввиду они оба будут выделены? если так то по идее если сделать двойной клик по одному из выделенных то выделение со всех остальных снимается и производится действие по умолчанию на котором даблкликнули, если кликнуть правой кнопкой - то меню должно пренадлежать тому по которому кликнули а не всей группе. или же отсчет идет от того кого первым выделили?. Спасибо, сейчас буду пробовать все что почерпнул из новых ответов.
DimaBr, Наиль - Oгромное спасибо!


 
RASkov   (2006-10-13 03:27) [115]

Ну вот вроде все основное сделал, осталось подрихтовать немного, задействовать некоторые свойства (AllowFixed, AllowAllUp, GroupIndex...) и можно хелп делать:) Спасибо Вам огромное.
А Масштаб надписей... да фик с ним.
С редактором разобрался. Свойства сгрупировал. Если все доделаю то выложу, но только не исходник а скомпилированный (про код см выше 87:)), кстати что для это надо выложить, т.е. для того чтобы установить компанент в Делфи нужна bpl и dcu модули с компанентом и редакторами?, а файл пакета dpk нужен? Сорри за такие вопросы про компаненты - первый мой компанент.

ЗЫ Моргает только зараза, если DoubleBuffered отключить. Но я думаю нужно вместо Invalidate - InvalidateRect прикрутить, все ректы есть в свойствах - только чето не получилось сначала... ну и забросил это гиблое дело.
Еще раз Огромное Спасибо всем кто не бросил меня в этой нелегкой битве:)


 
RASkov   (2006-10-13 03:40) [116]

Т.е вот этих файлов достаточно будет для установки?
D7PicMenu.dcu (4 Kb)- хрен его знает, наверное D7PicMenu.dpk скомпилиный
PicMenu.dcu (39 Kb)- модуль с компанентом
PropEditPicMenu.dcu - модуль с редакторами
PicMenu.dcr (2 Kb)- иконка
D7PicMenu.bpl (48 Kb)- пакет
D7PicMenu.dcp (46 Kb)- хрен его знает, большой однако
там вот еще res, dof, cfg и dpk - они нужны?
подзабыл я стандартные расширения делфевые что в чем лежит, pas, dfm, dpr, dpk, dcu, bpl, res, dcr - вроде бы помню(знаю), а об остальных догадываюсь.


 
DimaBr   (2006-10-13 09:30) [117]

Масштабирование.
Изменяйте размер шрифта, согласно размеру одного итема, неужеле это так сложно ?

При выходе с кнопки за пределы формы, кнопка остаётся нажатой. Вообще, хватит засорять форум, пишите в почту.

На счёт файлов для установки.
Необходимы: Reg.pas, dcr, dcu, dpk.  Если используется редактор в виде отдельной формы, то + dfm, res,dcu формы.

Любопытно посмотреть на код (DymondBox(амперсант)yandex.ru)


 
RASkov   (2006-10-13 14:42) [118]

> Изменяйте размер шрифта, согласно размеру одного итема,
> неужеле это так сложно ?

Итем может масштабироваться и по высоте и пошироте:)

> При выходе с кнопки за пределы формы, кнопка остаётся нажатой

Что верно то верно:(

> Reg.pas

?

> Любопытно посмотреть на код

Вот доделаю, нимного впорядок преведу и обязательно.


 
RASkov   (2006-10-13 17:02) [119]

> [117] DimaBr   (13.10.06 09:30)

Воощем отправил....


 
RASkov   (2006-10-13 23:19) [120]

Если амперсант - это собака, то все равно помоему не правильный адрес, одно письмо вернулось с такой мессагой -- The following addresses had permanent fatal errors ---
Здесь в этой ветке есть мыло в моем синем нике.



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

Форум: "Компоненты";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.72 MB
Время: 0.055 c
2-1187433176
Kikoz
2007-08-18 14:32
2007.09.09
Продолжительность MP3


6-1168369775
fuzzylogic
2007-01-09 22:09
2007.09.09
Как создать исключение для стандартного брандмауэра?


2-1187331865
White Barsik
2007-08-17 10:24
2007.09.09
Динамическое добавление контрола


15-1186477407
Сергей М.
2007-08-07 13:03
2007.09.09
За что НЕ уважаю ДДТ...


15-1186646633
IlyaSofronov
2007-08-09 12:03
2007.09.09
Очень срочно дизайнер - от 3000 р.





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