Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Арсенал форумистов, Выкладывайте свои работы! 
:(
    Опции темы
p0s0l
Дата 15.4.2004, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



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

Единственное правило - в этой теме не флеймить, тут оставлять только краткое описание модулей и ссылки к ним.

Можно скинуть мне на мыло (кнопка E-Mail под моим постом) файл, и я его прикреплю к вашему сообщению при первой же возможности...



--------------------
С уважением, г-н Посол.
PM   Вверх
ДЫМ
Дата 20.1.2005, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



Иллюстрированный самоучитель по Delphi 7 для профессионалов


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

Скачать 3,21 Мб


PM MAIL WWW   Вверх
Петрович
Дата 21.1.2005, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Один из моих наиболее часто используемых библиотечных модулей.
Тут в основном функции работы со строками, но попадаются и некоторые другие. Может кто то найдет что-то интересное для себя.

Это сообщение отредактировал(а) Петрович - 21.1.2005, 11:30

Присоединённый файл ( Кол-во скачиваний: 350 )
Присоединённый файл  awString.zip


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Петрович
Дата 21.1.2005, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Многие кто писал консольные приложения наверное сталкивался с такой проблеммой:
В окне консоли используется кодировка OEM, т.е. DOS-кодировка. Поэтому, если в программе написать:
Код

WriteLn('Вася+Маша=Лубов');

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

Есть еще одна проблема:
Если в консольной программе возникает исключительная ситуация (Exception), то это вызывает малопонятное для клиента окно сообщения о системной ошибке в приложении.

Мне приходилось часто писать консольные приложения. Так вот, что бы не заниматься постоянной перекодировкой и не заботиться об необработанных программой исключениях, я написал свой модулек awConsole.
Просто добавление этого модуля в проект вызывает несколько изменений в поведении программы:
1. Весь консольный ввод/вывод осуществляется в кодировке OEM;
Достигается это подменой "драйвера" обслуживания консольных файлов Input, Output, ErrOutput.
2. Исключения не обработанные программой вызывают окно сообщения вместо системной ошибки.

Ну и есть там еще несколько полезных и не очень полезных функций.

Это сообщение отредактировал(а) Петрович - 21.1.2005, 11:30

Присоединённый файл ( Кол-во скачиваний: 162 )
Присоединённый файл  awConsole.zip


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Петрович
Дата 21.1.2005, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



А вот еще, уже просто выдержки из библиотеки:

интерфейс:
Код

////////////////////////////////////////////////////////////////////////////////
//
// Итераторы.

type
 tRecursiveOrder = (roNone,roParentChildrens,roChildrensParent);
 tForEachProc    = procedure (Component :tObject);

procedure ForEachOwned (Component      :TComponent;
                       Proc           :tForEachProc;
                       RecursiveOrder :tRecursiveOrder =roParentChildrens
                       );
// Вызывают Proc для каждого компонента которым владеет Component.

procedure ForEachChild (WinControl    :TWinControl;
                      Proc           :tForEachProc;
                      RecursiveOrder :tRecursiveOrder =roParentChildrens;
                      IncludeNonWinControls :Boolean =False
                      );
// Вызывают Proc для каждого дочернего по отношению к WinControl эл-та управления.
// (Визуальное владение, WinControl.Controls, Parent которых = WinControl)


// Главный "кайф" этих процедур в том, что Proc может быть ЛОКАЛЬНОЙ процедурой.
// Причем, что-бы компилятор не ругался, надо поставить @ перед именем процедуры
// (см.примеры). Однако, ответственность за соответствие числа и типа параметров
// лежит на Вас.
//
// Например получение списка всех компонентов формы:
//
//    procedure TForm1.FormCreate(Sender: TObject);
//    var i :Integer;
//      procedure p(Component :TComponent);
//      begin
//        ListBox1.Items.Add(Format('%4d: %s :%s',[i,Component.Name,Component.ClassName]))
//        Inc(i);
//      end;
//    begin
//      ListBox1.Items.Add('Список компонентов принадлежащих форме')
//      i := 0;
//      ForEachOwned(Self,@p);
//    end;
//
// Или еще - открытие всех наборов данных расположенных на форме, и всех
// расположенных на ней фреймах и "подформах" :
//
//    procedure TForm1.FormShow(Sender: TObject);
//      procedure OpenDataSet(Component :tComponent);
//      begin
//        if  Component is tDataSet  then  TDataSet(Component).Open;
//      end;
//    begin
//      ForEachOwned(Self,@OpenDataSet);
//    end;
//
////////////////////////////////////////////////////////////////////////////////

Реализация "пристегнута"

А вот пример полезного использования:

Код

procedure En (Container :TWinControl; Enable :Boolean);
// Устанавливает значение свойства Enabled у Container, а также
// всем компонентам-редакторам лежащим на Container
// будет еще установлен и цвет, clWindow при Enable True и clBtnFace
// при Enable False.

const ca :array [boolean] of tColor = (clBtnFace, clWindow);

 procedure SetColor (C :TObject);
 begin
   if   (C is TCustomEdit)
     //or (C is TCustomCheckBox)
     //or (C is TCustomListBox)
     then with tHackControl(C) do begin
     Color := ca[Enabled and Enable];
   end;
 end;

begin
 Container.Enabled := Enable;
 ForEachChild(Container,@SetColor);
end;

И еще:
Код

procedure SetReadOnlyAndColorForAllWinControls(const WinControl :tWinControl; const ReadOnlyValue :Boolean; const SetColor :Boolean =True);
// Выполняет SetReadOnlyAndColor(...,ReadOnlyValue) для WinControl и всех его
// дочерних компонентов
 procedure p (o :tObject);
 begin
   if  o is tWinControl  then   SetReadOnlyAndColor(TWinControl(o),ReadOnlyValue,SetColor);
 end;
begin
 ForEachChild(WinControl,@p,roChildrensParent,False);
 SetReadOnlyAndColor(WinControl,ReadOnlyValue,SetColor);
end;

Соответственно требуется SetReadOnlyAndColor:
Код

type tHackControl = class(tControl);
procedure  SetReadOnlyAndColor(WinCtrl :tWinControl; const ReadOnlyValue :Boolean; const SetColor :Boolean =True);
// Если компонент WinCtrl имеет свойство ReadOnly то его значение
// устанавливается в ReadOnlyValue.
// Кроме того, если WinCtrl является потомком от TCustomEdit или TCustomGrid,
// то его цвет изменяется в зависимости от значения ReadOnlyValue:
//   False - устанавливается цвет clWindow;
//   True  - устанавливается цвет на 1/8 темнее clWindow;
begin
 SetProperty(WinCtrl,'ReadOnly',ReadOnlyValue);
 if  not SetColor  then  Exit;
 if  (WinCtrl is TCustomEdit ) or (WinCtrl is TCustomGrid) then begin
   if  ReadOnlyValue  then
     tHackControl(WinCtrl).Color := MulDivIntensity(clWindow,7,8)
   else
     tHackControl(WinCtrl).Color := clWindow;
   end
 else begin
//    tHackControl(WinCtrl).Color := clBtnFace;
 end;
end;



Это сообщение отредактировал(а) Петрович - 21.1.2005, 11:47

Присоединённый файл ( Кол-во скачиваний: 78 )
Присоединённый файл  Iterators.inc


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Петрович
Дата 21.1.2005, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Ну, пожалуй еще один модуль, и достаточно на сегодня smile
Модуль awNetwork пристегнут, а реализует он следующие функции:
Код

procedure NetGetListComputers (aList :tStrings);
procedure GetComputers        (aList :tStrings);  deprecated;
// Заполняют aList списком компьютеров обнаруженных в сети
// Ex: EWNetError - см. NetEnum;

procedure NetGetListDisks     (aList :tStrings);
// Заполняет aList списком дисковых ресурсов обнаруженных в сети
// Ex: EWNetError - см. NetEnum;

procedure NetGetListPrinters  (aList :tStrings);
// Заполняет aList списком принтеров обнаруженных в сети
// Ex: EWNetError - см. NetEnum;


procedure NetEnum (aList :tStrings; aResoureceDisplayType, aResoureceType :Cardinal);
// Заполняет aList списком ресурсов обнаруженных в сети, соответствующих
// aResoureceDisplayType и aResoureceType
// Ex: EWNetError - Все ошибки накапливаются в списке и по завершению
//                  сканирования выдается в одном Ex.
//                  При этом, в результирующий список попадают все ресурсы не
//                  вызвавшие ошибок. Это позволяет получить максимально полный
//                  список ресурсов, даже при наличии ошибок, которые можно
//                  просто игнорировать.

procedure ForEachNetResource (Proc: Pointer);
// Итератор вызывающий ЛОКАЛЬНУЮ процедуру Proc для каждого ресурса найденного в
// сети. Процедура Proc должна быть ОБЯЗАТЕЛЬНО ЛОКАЛЬНОЙ процедурой вида:
//    procedure (const NetRes :NetResource); register;
// В качестве примера, можно посмотреть на реализацию функции NetEnum.
// Ex: EWNetError - Все ошибки накапливаются в списке и по завершению
//                  сканирования выдается в одном Ex.
//                  При этом, Proc будет вызвана для всех ресурсов не вызвавших
//                  ошибок. Это позволяет обработать максимально полный
//                  список ресурсов, даже при наличии ошибок, которые можно
//                  просто игнорировать.

///////////////////////////////////////////////// пока доступны только под WinNT

procedure NetGetListServers  (aList :tStrings);
// Заполняют aList списком серверов обнаруженных в сети.
// Только под WinNT.
// Ex: EWNetError

procedure NetGetListSQLServers  (aList :tStrings);
// Заполняют aList списком SQL-серверов (MS-SQL) обнаруженных в сети.
// Только под WinNT.
// Ex: EWNetError

procedure NetEnumServers(aList :tStrings; ServersType :Cardinal =SV_TYPE_ALL);
// Заполняет aList списком серверов обнаруженных в сети, соответствующего типа.
// Только под WinNT.
// Ex: EWNetError

procedure NetEnumShare (aList :tStrings; ServerName :String ='');
// Заполняет aList списком разделяемых ресурсов предоставляемых сервером
// ServerName. По умолчанию своих.
// Только под WinNT.
// Ex: EWNetError

function ServerInfoStr (ServerName :String) :String;
// Возвращает строку с информацией о сервере ServerName.
// Строки имеет вид:
//   под NT+ - <ServerPlatform> <Version> <ServerType>
//   под 9x  -                  <Version> <ServerType>
// В принципе, это работающий, но рабочий вариант :).
// Ex: EOSError


Присоединённый файл ( Кол-во скачиваний: 179 )
Присоединённый файл  awNetwork.zip


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Петрович
Дата 23.1.2005, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



А вот еще модуль. Его я обычно использую для измерения времени исполнения процедур и даже отдельны фрагментов кода. Разрешающая способность составляет 1 такт процессора. Точность измерения конечно ниже, поскольку зависит от работы кэша процессора. Но она все равно значительно выше нежели все остальные известные мне способы использующие те или иные аппаратные таймеры.


Присоединённый файл ( Кол-во скачиваний: 241 )
Присоединённый файл  awStopWatch.zip


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Петрович
Дата 30.1.2005, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Вот, тут DRKB v2.3 натолкнул на мысль опубликовать еще один из модулей. К сожалению, автора исходного модуля мне установить не удалсь. Жаль, идеи заложенные в его модуле были очень хороши. Я лишь чуть усовершенствовал их.
Интерфейс:
Код

unit SafeUnit;

// Является ремейком модуля "SafeUnit" неизвестного мне автора.

interface

uses Classes;

/////////////////////////////////////////////////////////////////////////// IsAs
(*
Позволяет упростить вот такие фрагметы кода:

 if aSomeObject is TMyObject then begin
   aMyObject := aSomeObject as TMyObject;
   // некоторые действия с aMyObject
 end;

При использовании функции IsAs это будет выглядить так:

 if IsAs (aMyObject, aSomeObject, TMyObject) then begin
   ... // некоторые действия с aMyObject
 end;

*)

function IsAs (out   aReference {: Pointer};
              const aObject     : TObject;
              const aClass      : TClass) : Boolean;

////////////////////////////////////////////////////////////////// ExceptionSafe
(* - "Накопитель" исключений
Позволяет делать например следующее

   with ExceptionSafe do
     try
       // Некоторые действия которые могут возбудить исключение
       for aIndex := 1 to 10 do
         try
           ... // Некоторые действия которые могут возбудить исключение
         except
           SaveException;  // <- запоминание текста возникшего исключения в списке ExceptionSafe
         end;
       ... // Некоторые действия которые могут возбудить исключение
       for aIndex := 10 to 20 do
         try
           ... // Некоторые действия которые могут возбудить исключение
         except
           SaveException;  // <- запоминание текста возникшего исключения в списке ExceptionSafe
         end;
       ... // Некоторые действия которые могут возбудить исключение
     except
       SaveException;  // <- запоминание текста возникшего исключения в списке ExceptionSafe
     end;
   end;// <===

 Тогда, в момент выхода из With (<===), если был сохранен текст хотя бы
 одного исключения, будет возбуждено Exception, с текстом всех сохраненных
 в этом блоке исключений.
 Формат текста:
   Ex1.ClassName+': '+Ex1.Message  {+^M^J^I+ExN.ClassName+' '+ExN.Message}
*)

type
 IExceptionSafe = interface
   procedure SaveException;
 end;

function ExceptionSafe :IExceptionSafe;

///////////////////////////////////////////////////////////////////// ObjectSafe
(* - Безопасный "контейнер" объектов и компонентов

Пример использования:

 procedure TestTheSafe;
 var
   aMyObject    :TMyObject;
   aMyComponent :TMyComponent;
 begin
   with ObjectSafe do begin

     // создание и регистрация объекта:
     New (aMyObject, TMyObject.Create);
     // или
     aMyObject := TMyObject.Create; Guard(aMyObject);

     // создание и регистрация компонента
     aMyComponent := TMyComponent.Create (Safe);

     ... // Некоторые действия которые могут возбудить исключение

     // уничтожение экземпляра aMyObject
     Dispose(aMyObject);

     ... // Некоторые действия которые могут возбудить исключение

   end; // <===
 end;

 Тогда, в момент выхода из With (<===), все объекты и компоненты
 зарегестрированные в ObjectSafe, будут автоматически уничтожены (Free).
 Причем, это произойжет даже если With будет покинут в результате
 возникновения исключительной ситуации.

 При уничтожении, сначала в произвольном порядке будут уничтожены
 зарегестрированные объекты, а затем, будут уничтожены
 зарегестрированные компоненты, так же в произвольном порядке.
*)

type
 IObjectSafe = interface
   function  Safe : TComponent;

   function  New     (out   aReference {: Pointer};
                      const aObject     : TObject) : IObjectSafe;

   procedure Guard   (const aObject     : TObject);

   procedure Dispose (var   aReference {: Pointer});
 end;

function ObjectSafe                                 : IObjectSafe; overload;
function ObjectSafe (out aObjectSafe : IObjectSafe) : IObjectSafe; overload;


////////////////////////////////////////////////////////////////////////////////


implementation /////////////////////////////////////////////////////////////////

Если интересно, то бери пристегнутый файл smile.

Присоединённый файл ( Кол-во скачиваний: 109 )
Присоединённый файл  SafeUnit.pas


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Петрович
Дата 8.2.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Для пользователей библиотеки EhLib.
Мною, а так-же Alex'ом были сделаны несколько доработок некоторых модулей этой библиотеки.
Мои доработки следующие:
  • (DBGridEh.pas) Изменена реакция на Ctrl+Up, Ctrl+Down, Ctrl+Shift+Up и Ctrl+Shift+Down.
    Ранее, они были эквивалентны соответственно сочетаниям Ctrl+PgUp, Ctrl+PgDown, Ctrl+Shift+PgUp и Ctrl+Shift+PgDown. Теперь, они действуют почти как в IDE Delphi - прокрутка окна просмотра, по возможности без изменения текущей позиции в наборе данных:
    Ctrl+Up - перемещение окна просмотра вверх (прокрутка вниз);
    Ctrl+Down - перемещение окна просмотра вниз (прокрутка вверх);
    Ctrl+Shift+Up - не действует;
    Ctrl+Shift+Down - не действует.
  • (DBGridEh.pas) Исправлена ошибка. По крайней мере в v3.2 наблюдалось забавное поведение фильтра. А именно:
    Если задать (с клавиатуры) выражение фильтрования в каком-то поле, например во втором, и нажать Enter, то все прекрастно отфильтруется. Однако, если после этого сделать Grid.ClearFilter а затем Grid.ApplyFilter то, в отличие от ожиданий, ничего не произойдет. Т.е. не смотря на Grid.ClearFilter, во втором поле останется строка с условием фильтрования, и Dataset останется отфильтрованным!
    Поисходило это потому, что при Grid.ApplyFilter из редактора фильтра "извлекалось" текущее содержимое, и "запихивалось" обратно в STFilter.ExpressionStr соответствующей колонки.
    Отсюда, если перед Grid.ApplyFilter "перейти" в другую колонку, все будет нормально smile.
    В v3.4 такого дефекта вроде-бы не наблюдается, однако, "лечилка" не мешает, поэтому оставлена.
  • (DBGridEh.pas) Изменено поведение при изменении фильтра и порядка сортировки.
    В исходном варианте, при испоьзовании датасетов требующих переоткрытия для обновления данных после изменения текста запроса, были на мой взгляд два неприятных момента которые я устранил:

    a. После переоткрытия датасета, теряется положение текущей записи - текущей
    становится первая запись. Это не очень удобно, особенно при изменения
    порядка сортировки. Да и при фильтровании, если текущая (до применения
    фильтра) запись присутствует в отфильтрованном наборе, хочется что-бы
    она же и осталось текущей.
    Для решения проблемы, перед закрытием датасета сохраняется список имен
    и значений полей текущей записи, и ее положение в гриде. Соответственно
    после открытия делается попытка спозиционировать датасет на эту запись
    (locate), и если попытка удачна, делается попытка восстановить ее
    положение в гриде (что-бы она осталась на той-же строке). Если запись не
    будет найдена, то как и ранее, грид будет спозиционирован на первую
    запись.

    b. Если колонки грида созданы динамически, а не в дизайнере (такое иногда
    бывает smile, то после переоткрытия теряется информация о маркерах
    сортировки, значениях фильтров, ширин колонок, и пр.. В общем всего что
    хранится в списке колонок, поскольку при закрытии датасета он очищается,
    а после открытия, создается заново со значениями по умолчанию.
    Чтобы предотвратить подобный ход событий, перед закрытием датасета,
    всем колонкам ставится признак IsStored (якобы они созданы в дизайнере).
    Естественно, реальное значение свойства IsStored всех колонок сохраняется
    и восстанавливается после открытия датасета.

    В моей реализации устранения этих моментов есть подводный камень:

    Может возникнуть ошибка, если после переоткрытия датасета изменится
    состав возвращаемых им полей. Например если датасет используется
    в рамках ReadCommited транзакции, и к моменту его переоткрытия кто-то,
    изменил на SQL-сервере метаданные объекта входящего в запрос. Хотя по моему,
    такая ситуация вряд-ли может встретиться в реальной жизни. Да и в случае
    "статически" (в дизайнере) созданных полей возникнет та-же бяка (хотя,
    пожалуй еще хуже будет).

    Конечно, сохранение позиции, надо-бы сделать включаемым/отключаемым опцией
    в OptionsEh. Но для этого, требуется коррекция еще и других модулей EhLib.
    Поэтому, это лучше делать автору.

    А вот фича "b", должна быть обязательно устранена, поскольку ее наличие
    делает невозможным нормальное использование сортировки и фильтрования
    с датасетами требующими переоткрытия.
  • (DbUtilsEh.pas) Исправлена ошибка/недочет.

    В исходном варианте, в выражении фильтрования, нельзя было использовать константу 'NOW' допустимую в SQL.
  • (EhLibADO.pas) Расширены возможности.

    В ADODataSetDriverName добавлена поддержка для MS SQL-сервера (по имени OLEDB провайдера).
  • (EhLibIBX.pas) Исправлена ошибка.

    Некоторые версии сервера Interbase не допускает использования номеров полей
    в выражении ORDER BY, поэтому в конструктор объектов этого модуля добавлено:
Измененные модули для версии 3.5 приложены к посту. Для других версий можно сделать аналогично. Для этого, все мои изменения отмечены условной трансляцией по символу NoChangesBySAP

Это сообщение отредактировал(а) Петрович - 8.2.2005, 11:18

Присоединённый файл ( Кол-во скачиваний: 164 )
Присоединённый файл  EhLib_v3_5_units_modified_by_Petrovich.zip


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Петрович
Дата 8.2.2005, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Для пользователей библиотеки EhLib.
Мною, а так-же Alex'ом были сделаны несколько доработок некоторых модулей этой библиотеки.

Доработки от Alex:
  • (DBCtrlsEh.pas и ToolCtrlsEh.pas) для контролов которые могут содержать доп.кнопки (наследники TCustomDBEditEh), добавлена возможность индивидуального управления активностью этих кнопок.
  • (DBCtrlsEh.pas) исправлена ошибка (неточность) при работе с датами без указания года
Измененные модули для версии 3.5 приложены к посту. Для других версий можно сделать аналогично. Для этого, все изменения отмечены коментарием Alx

Это сообщение отредактировал(а) Петрович - 18.2.2005, 00:27

Присоединённый файл ( Кол-во скачиваний: 99 )
Присоединённый файл  EhLib_v3_5_units_modified_by_Alex.zip


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
RA
Дата 16.2.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Пример передачи файлов при помощи TClientSocke и TServerSocket

Очень многих интересует данный вопрос поэтому выкладываю сырячек.

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

Ну и соответвенно сделать примеры с использованием ICS и Indy.


Присоединённый файл ( Кол-во скачиваний: 546 )
Присоединённый файл  CustomWinSocket_0.1.rar
PM   Вверх
SoWa
Дата 17.2.2005, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Посмотрев примеры в DRKB для перевода числа из одной системы счисления в другую, понял, что они предназначены не для глупого списывания, поэтому написал собственную функцию! код немного не оптимизированный, но все равно работает!
ПРЕДУПРЕЖДЕНИЕ: СИСТЕМЫ ПЕРЕВОДА ОТ 2 ДО 36!!! НЕ БОЛЬШЕ!
Код

function FromToAnySys(fromSys,ToSys: integer; chislo: string): string;
var
i,k,mo: integer;
d: integer;
buk: integer;
step: integer;
s,sl: string;
s1: integer;
m: string;

function revert(n: string): string;
var i: integer;
q: string;
begin
for i:=length(n) downto 1 do
begin
 q:=q+n[i];
end;
revert:=q;
end;

begin
m:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
s:='';
d:=0;
for i:=1 to length(chislo) do
begin
 for k:=1 to 37 do
  begin
   if chislo[i]=m[k] then buk:=k-1;
  end;
 step:=strtoint(floattostr(power(FromSys,(length(chislo)-i))));
 d:=d+(buk*step);
end;

while d<>0 do
begin
 mo:=d mod ToSys;
 s:=s+m[mo+1];
 d:=d div ToSys;
end;

result:=revert(s);
end;



--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Петрович
Дата 18.2.2005, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Вот реализация доработок EhLib от меня и Alex для версии 3.06. Подробнее см. здесь и здесь

Присоединённый файл ( Кол-во скачиваний: 153 )
Присоединённый файл  EhLib_v3_6_units_modified_by_Petrovich_Alex.zip


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
p0s0l
Дата 5.3.2005, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Этот пример показывает, как всего парой десятков строк можно использовать WMI (Windows Management Instrumentation) для просмотра информации о системе, железе, программах и многом другом...

Для компиляции нужно иметь библиотеки Jedi WinAPI...
Скачать их можно тут: http://members.chello.nl/m.vanbrakel2/ (архив около 2 метров)

При запуске программы будет показано три окошка:
Левое верхнее - список классов. Например, Win32_BIOS - инфа о биосе, Win32_Processor - о процессоре и т.д.
Правое верхнее окно - объявление выбранного класса (свойства и методы)
Нижнее - экземпляры выбранного класса...

WMI.ZIP (5 kb)

Присоединённый файл ( Кол-во скачиваний: 175 )
Присоединённый файл  WMI.ZIP


--------------------
С уважением, г-н Посол.
PM   Вверх
Girder
Дата 6.3.2005, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Компонент для работы с драйверами программы FileMon (Sysinternals - www.sysinternals.com).
***В компоненте реализованна полная потдержка управляющих команд в плоть до версии драйвера v436.
***Особые благодарности, за тест и конструктивные предложения: p0s0l

PS: Данный компонент выкладывается для ознакомительных целей. Использование его в своих программах допускается smile ... но на свой страх и риск! Так как Sysinternals запрещает использование их драйверов отдельно от FileMon smile

В присоединенке: Компонент и пример его использования(А также драйверы: новые и старые).

PS2: К сожалению... так и не смог найти подходящию иконку для компонента smile

Присоединённый файл ( Кол-во скачиваний: 168 )
Присоединённый файл  FileMon.zip


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Akella
  Дата 18.3.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Сделал небольшой архив с примерами

Имя Описание
папки

05_1 Пример использования компонентов TTreeView и TTreeList
для просмотра информации из системного реестра Windows
05_2 Простой пример разработки собственного компонента
06_1 Ресурсы манифеста Windows XP
07_1 Пример использования в приложении списка объектов на основе
класса TList
07_2 Пример использования в приложении списка строк на основе
класса TStringList
10_1 Пример приложения, использующего компоненты Delphi
для отображения графики
10_2 Приложение для просмотра растровых приложений JPG, JPEG, BMP
11_1 Пример простейшего приложения баз данных
12_1 Пример использования параметров компонентов запросов SQL
и взаимодействия таких компонентов на основе передачи значений
параметров
14_1 Приложение баз данных, использующее отношение "один-ко-многим"
между таблицами базы данных
14_2 Приложение баз данных, демонстрирующее варианты поиска записей
в таблице базы данных
14_3 Пример использования закладок (класс TBookmark) в наборах
данных Delphi
15_1 Приложение баз данных, использующее компоненты синхронного
просмотра
16_1 Приложение баз данных, напрямую использующее API BDE
для полного удаления записей из таблиц базы данных
16_2 Приложение баз данных, напрямую использующее API BDE
для представления данных
17_1 Приложение баз данных, демонстрирующее возможности технологии
dbExpress
19_1 Приложение баз данных, демонстрирующее возможности
технологии ADO
21_1 Пример простого распределенного приложения баз данных
25_1 Пример использования компонента проекта отчета Rave Reports
и разработки простых отчетов в визуальной среде Rave Reports
26_1 Пример использования настраиваемого соединения на основе
компонента TRvCustomConnection
26_2 Пример отчетов Rave Reports для приложений баз данных
27_1 Пример реализации Drag-and-Drop
27_2 Пример реализации Drag-and-Dock
27_3 Пример реализации управления мышью
28_1 Пример создания динамической библиотеки
29_1 Приложение, использующее отдельный поток к памяти для расчета
числа
30_1 Приложение, использующее компоненты многомерного представления
данных
31_1 Пример приложения, использующего Shell API

пару папок удалил из архива, т.к. он получается больше 250 кБ.

Присоединённый файл ( Кол-во скачиваний: 483 )
Присоединённый файл  Example.zip
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2236 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.