Модераторы: 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   Вверх
Alexeyt
Дата 1.3.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Выделил из своего компонента код, содержащий TScrollBox + TImage + обвязку.
Получился компонент ATImageBox.

Можно загружать рисунок и задавать ему разный масштаб, подгонять размеры, перетаскивать мышью и т.д. Свойства: ImageFitToWindow, ImageFitOnlyBig, ImageCenter, ImageScale и т.д.

user posted image

Обсуждение (на этом форуме) здесь: http://forum.vingrad.ru/topic-139061.html


Присоединённый файл ( Кол-во скачиваний: 84 )
Присоединённый файл  ATImageBox.zip 392,75 Kb
PM WWW   Вверх
lukas
Дата 8.5.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Функция возвращения N-ого параметра из строкового выражения типа <название>(параметр1 ... параметрN)

Где N - номер параметра, Atype - символ разделитель параметров. 

Если разделительный символ содержится в параметре, то параметр нужно заключить в двойные кавычки " ".

Код

function GetParam(S:string; n:byte; Atype:char):string;
   var
   ind,i:integer; ts:string; stroka:boolean;
begin
 if pos('(',s)=0 then exit;
 if pos(')',s)=0 then exit;

 if s='' then begin result:=''; exit; end;
 delete(s,1,pos('(',s)); delete(s,length(s),1);
 if s='' then begin result:=''; exit; end;
 stroka:=false; ind:=1; i:=1;
  repeat
      if (stroka=false)and((s[i]=Atype)or(s[i]='')) then begin
       result:=ts;
       ts:='';
       ind:=ind+1;
       i:=i+1;
      end;
  if s[i]='"' then
  stroka:=not(stroka);
     ts:=ts+s[i]; i:=i+1;
  until ind=n+1;
  if result[1]='"' then delete(result,1,1);
  if result[length(result)]='"' then delete(result,length(result),1);
  result:=trim(result);
end;


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

Код

...
ShowMessage(GetParam('line(0,0,2,4)',3,','));
...


Еще одна функция, возвращает кол-во параметров:
Код


function GetParamCount(S:string; Atype:char):byte;
   var
   ind,i:integer; stroka:boolean;
begin
 result:=0;
 if pos('(',s)=0 then exit;
 if pos(')',s)=0 then exit;

 if s='' then begin result:=0; exit; end;
 delete(s,1,pos('(',s)); delete(s,length(s),1);
 if s='' then begin result:=0; exit; end;
 stroka:=false; ind:=1; i:=1;

  for i:=1 to length(s) do begin
      if (stroka=false)and((s[i]=Atype)or(s[i]='')) then begin
       ind:=ind+1;
      end;
  if s[i]='"' then
  stroka:=not(stroka);
 end;
  result:=ind;
end;


P.S. в коде интерпретатора можно сильно сократить всю свою писанину. (У меня было так).

Это сообщение отредактировал(а) lukas - 8.5.2007, 22:48


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
AlexxxM
Дата 23.5.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На работе возникла проблема при открытии заказа рассылать письма по отделам (Список рассылки + пользователь кто внес запись). Список рассылки довольно статичен, а вот пользователей человек 40 плюс ко всему они довольно часто меняются. Поэтому возникла идея брать e-mail пользователя из Active Directory (благо e-mail всегда заполняется системщиками).

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

Забыл сказать известны домены и логин пользователя ( не известно какой organisation union (группа в AD) является родительским для пользователя и т. п., ну в общем основной проблемой было получить ADsPath пользователя) 

Код

uses ActiveDs_TLB, adshlp;

....

var
  str1: string;
  search: IDirectorySearch;
  p : array[0..0] of PWideChar;
  opt : array[0..0] of ads_searchpref_info;  //структура для поиска в AD
                                             //(все поля в MSDN)
  hr : HRESULT;
  dwErr : DWord;
  szErr : array[0..255] of WideCHar;
  szName : array[0..255] of WideChar;
  ptrResult : THandle;
  col : ads_search_column;
  usr : IAdsUser;
begin
//Используем Active Directory

    try
      AdsGetObject('LDAP://DC=sss,DC=ru', IDirectorySearch, search); //создаем объект поиска
    except on E : Exception do
      ShowMessage(E.Message+' Соединение С Активной Директорией нет!');
    end;

    try
      p[0] := StringToOleStr('ADsPath'); //что ищем (путь к юзеру) 'LDAP://DC=sss,DC=ru...'
      opt[0].dwSearchPref := ADS_SEARCHPREF_SEARCH_SCOPE; //область поиска
      opt[0].vValue.dwType := ADSTYPE_INTEGER; //для ADS_SEARCHPREF_SEARCH_SCOPE должно быть ADSTYPE_INTEGER
      opt[0].vValue.Integer := ADS_SCOPE_SUBTREE;// поиск по всему дереву
      hr := search.SetSearchPreference(@opt[0],1);  //устанавливаем параметры
      if (hr <> 0) then
      begin
        hr := ADsGetLastError(dwErr, @szErr[0], 254, @szName[0], 254);
        ShowMessage(WideCharToString(szErr));
        Exit;
      end;
      hr := search.ExecuteSearch('(&(objectCategory=user)(samAccountName='+UserName+'))',@p[0], 1, ptrResult);
            //запускаем поиск с условием (Category = User) и samAccountName = UserName просто Login без домена
            //hr := search.GetNextRow(ptrResult);
      while (hr <> S_ADS_NOMORE_ROWS) do
      begin
        hr := search.GetColumn(ptrResult, p[0],col);
        if Succeeded(hr) then
        begin
          if col.pADsValues <> nil
          then str1 := col.pAdsvalues^.CaseIgnoreString; //получаем результаты поиска
          search.FreeColumn(col);
        end;
        Hr := search.GetNextRow(ptrResult);
      end;
      except on E : Exception do
        ShowMessage(E.Message+' Работа с Active Directory не завершенa!');
      end;

      try
        ADsGetObject(str1, IADsUser, usr);  //по найденому ADsPath создаем интерфейс пользователя
      except on E : Exception do
        ShowMessage(E.Message+' Пользователь не найден!');
      end;

      IdMessage1.Recipients.Add.Text:= usr.EmailAddress;
      //Конец использования Active Directory
end;




+ файл с примерами (не помню откуда скачал). В директории common 2 uses'а которые использовались в коде


Это сообщение отредактировал(а) AlexxxM - 23.5.2007, 18:52

Присоединённый файл ( Кол-во скачиваний: 79 )
Присоединённый файл  AdsCode.zip 101,72 Kb
PM MAIL   Вверх
Akella
Дата 13.7.2007, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Rodman нашел примеры работы TreeView с XML
Код

procedure Tree2XML(tree: TTreeView);
var
  tn : TTreeNode;
  XMLDoc : TXMLDocument;
  iNode : IXMLNode;

  procedure ProcessTreeItem(
        tn    : TTreeNode; 
        iNode : IXMLNode);
  var
    cNode : IXMLNode;
  begin
    if (tn = nil) then Exit;
    cNode := iNode.AddChild('item');
    cNode.Attributes['text'] := tn.Text;
    cNode.Attributes['imageIndex'] := tn.ImageIndex;
    cNode.Attributes['stateIndex'] := tn.StateIndex;

    //child nodes
    tn := tn.getFirstChild;
    while tn <> nil do
    begin
      ProcessTreeItem(tn, cNode);
      tn := tn.getNextSibling;
    end;
  end; (*ProcessTreeItem*)
begin
  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.Active := True;
  iNode := XMLDoc.AddChild('tree2xml');
  iNode.Attributes['app'] := ParamStr(0);

  tn := tree.TopItem;
  while tn <> nil do
  begin
    ProcessTreeItem (tn, iNode);

    tn := tn.getNextSibling;
  end;

  XMLDoc.SaveToFile(ChangeFileExt(ParamStr(0),'.XML'));

  XMLDoc := nil;
end; (* Tree2XML *)


Код

procedure XML2Tree(
          tree   : TTreeView; 
          XMLDoc : TXMLDocument);
var
  iNode : IXMLNode;

  procedure ProcessNode(
        Node : IXMLNode; 
        tn   : TTreeNode);
  var
    cNode : IXMLNode;
  begin
    if Node = nil then Exit;
    with Node do
    begin
      tn := tree.Items.AddChild(tn, Attributes['text']);
      tn.ImageIndex := Integer(Attributes['imageIndex']);
      tn.StateIndex := Integer(Attributes['stateIndex']);
    end;


    cNode := Node.ChildNodes.First;
    while cNode <> nil do
    begin
      ProcessNode(cNode, tn);
      cNode := cNode.NextSibling;
    end;
  end; (*ProcessNode*)
begin
  tree.Items.Clear;
  XMLDoc.FileName := ChangeFileExt(ParamStr(0),'.XML');
  XMLDoc.Active := True;

  iNode := XMLDoc.DocumentElement.ChildNodes.First;

  while iNode <> nil do
  begin
    ProcessNode(iNode,nil);
    iNode := iNode.NextSibling;
  end;

  XMLDoc.Active := False;
end;

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


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



XML формируется по всем открытым пунктам! Так чт разворачивайте, если надо!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
ne0n
Дата 14.8.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

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



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

Присоединённый файл ( Кол-во скачиваний: 95 )
Присоединённый файл  my_article.rar 106,80 Kb
PM MAIL ICQ   Вверх
RA
Дата 16.8.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Вот случайно где-то нашёл такой хороший компонент с примером использования 

Reader for ОS/2, NЕ, PE32, PE32+ and VxD executable file types.


Цитата

enumerated structures that are evaluated:
    * DOS, Filе, Optional and CLR headers
    * CLR Mеtadata streams
    * Sections
    * Directories
    * Imports
    * Exports
    * Resources
    * .NET Metadata
    * Load Config
    * Debug
    * Thrеad Local Storage
    * Exceptions
    * Units smile 
    * Forms
    * Packages
    * Classes
    * Flags
    * Version Info


Добавил
+ FileMode = 0

Это сообщение отредактировал(а) RA - 19.8.2007, 23:04

Присоединённый файл ( Кол-во скачиваний: 100 )
Присоединённый файл  Demo.7z 26,92 Kb
PM   Вверх
ne0n
Дата 17.8.2007, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

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



В последнее время участился интерес к упаковщикам и протекторам...вот собрал колекцию  исходников,собранную по всему нету, на данную тему smile там болешь 15 исходнтков пакерров(крипторов), ну и соответствующие искодники, которые пригодяться при написании своего собственного пакера\криптора\протектора(даже включил исходники некоторых автоматических распаковщиков) Думаю комунибудь то да прикодиться smile 

http://rapidshare.com/files/49501095/Packe...Sourse.rar.html


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

Это сообщение отредактировал(а) ne0n - 17.8.2007, 15:19
PM MAIL ICQ   Вверх
EvilsInterrupt
Дата 19.8.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



RA, Держи файл для проверки на котором твой компонент не верно ф-ционирует ))) проверка шла согласно данным от PE_Tools by Neox

Присоединённый файл ( Кол-во скачиваний: 37 )
Присоединённый файл  file.7z 0,48 Kb
PM MAIL WWW ICQ Jabber   Вверх
Rrader
  Дата 15.9.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

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



Open Directory Dialog 1.2 by Rrader, Alix

Разработан был давно, но не выкладывался smile 

Позволяет изменять стандартный диалог SHBrowseForFolder



Присоединённый файл ( Кол-во скачиваний: 72 )
Присоединённый файл  ODD_1.2.zip 13,46 Kb


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Alix
Дата 24.9.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

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



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

CDDrives.pas - возвращает буквы всех установленных CD-ROM'ов
ClipBoard.pas - модуль для работы с буфером обмена, всего пара функций - GetText и SetText. Перед началом работы надо проинициализировать. Использует только модуль windows, так что не увеличивает размер программы.
IniFilesLight.pas - класс TIniFilesLite для работы с ini-файлами. Умеет почти то же, что и TIniFiles (read/write string/integer/bool + updatefile (aka flush)). Использует только windows. Ну еще SysUtils, но если надо, можно легко избавиться.
TrayIcon.pas - простенький класс создающий иконку в трее (TNotifyIconData_50), поддерживает balloon tooltips и анимацию (не помню точно как, вроде by showNextFrame method). Обработка сообщений осуществляется создавшим иконку окном, т.к. она не содержит своего обработчика. Использует windows, messages, shellAPI, graphics {for TBitmap only}, sysUtils {for strPCopy only}.
PopupMenu.pas - Класс для создания popupmenu, поддерживает только appendMenuItem, popup, cursorPopUp. Можно задавать шрифт элементов, понимает разделители. НО не имеет своего кода отрисовки. Использует windows, messages, sysutils.
battery.dpr - программа, ради которой и писались два последних модуля. Индикатор заряда батарей в качестве замены стандартному виндовскому. Написан на winapi, заодно есть и пример работы с GDI при отрисовке элементов popup menu (в стиле типа MSO XP). Если хотите - доделывайте, но и сейчас неплохо работает ). Bitmaps.res прилагается. Использовано: windows, messages, shellAPI, graphics, sysUtils, TrayIcon, 'PopupMenu.pas'. Праверять, конечно, надо на ноуте )

Есть вопросы? You are welcome!

PS: сейчас почитал топик, привет, Rrader! У тебя точно такой же код для чтения ini файлов, прям один в один smile 

Это сообщение отредактировал(а) Alix - 24.9.2007, 21:39

Присоединённый файл ( Кол-во скачиваний: 74 )
Присоединённый файл  lix_units.rar 8,37 Kb


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
lukas
Дата 13.11.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Метод AddObjFrom добавляет компоненты (названия которых находятся в LIST с формы FRM) в буфер 
Метод LoadObjTo выгружает объекты в буфере на форму FRM со смещение NetSize

P.S. Все классы копируемых объектов должны быть зарегистрированы, делаем это так: RegisterClass(TButton) и т.п.


Код

unit MSBCopyer;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TypInfo;

type
  TObjCopyer = class

public
    OBJList:TList; // указатели на MemoryStream - объектов
    OBJClass:TStrings; // название классов
    OBJCaption:TStrings; // заголовки объектов
    constructor Create;
    destructor Destroy;
    procedure AddObjFrom(FRM:TForm; LIST:TStrings);
    procedure LoadObjTo(FRM:TForm; NetSize:Integer = 5);
  end;

implementation


constructor TObjCopyer.Create;
begin
OBJList:=TList.Create;
OBJClass:=TStringList.Create;
OBJCaption:=TStringList.Create;
end;

destructor TObjCopyer.Destroy;
begin
OBJList.Free; OBJClass.Free;  OBJCaption.Free;
end;

procedure TObjCopyer.AddObjFrom(FRM:TForm; LIST:TStrings);
   Var
   MEM:TMemoryStream;
   i:integer;
   s:string;
   TMP:TComponent;
begin
OBJList.Clear; OBJClass.Clear; OBJCaption.Clear;
  for i:=0 to LIST.Count-1 do
   begin
    TMP:=FRM.FindComponent(LIST[I]);
    if TMP=nil then continue;
     MEM:=TMemoryStream.Create;
     TMP.Name:='';
     MEM.WriteComponent(TMP);
     MEM.Position:=0;
     TMP.Name:=LIST[I];
     OBJList.Add(MEM);
     OBJClass.Add(TMP.ClassName);
     if GetPropInfo(TMP,'Caption')<>nil then
     OBJCaption.Add(GetPropValue(TMP,'Caption'))
     else if GetPropInfo(TMP,'Text')<>nil then
     OBJCaption.Add(GetPropValue(TMP,'Text')) else
     OBJCaption.Add('');
   end;
end;

procedure TObjCopyer.LoadObjTo(FRM:TForm; NetSize:Integer = 5);
  Var
  I:Integer;
  MEM:TMemoryStream;
  ComponentClass:TComponentClass;
  Component:TComponent;
  TMP:TComponent;
begin
  for i:=0 to OBJList.Count-1 do
   begin
     ComponentClass:=TComponentClass(GetClass(OBJClass[i]));
     Component:=ComponentClass.Create(FRM);
     IF Component is TControl then
     begin
      TControl(Component).Parent:=FRM;
      TControl(Component).SetTextBuf(PChar(OBJCaption[i]));
     end;
     MEM:=TMemoryStream(OBJList[i]);
     MEM.ReadComponent(Component);
       IF Component is TControl then
       begin
        TControl(Component).Left:=TControl(Component).Left+NetSize;
        TControl(Component).Top:=TControl(Component).Top+NetSize;
       end;
   end;
end;

end.


Это сообщение отредактировал(а) lukas - 13.11.2007, 19:22


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
san46
Дата 29.12.2007, 11:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Компонент для Delphi. Вывод линейных графиков.

Возможности:
- Кривых на графике может быть более одной (кривые выводятся только в run-time заполнением массивов значений точек).
- Автомасштабирование. При добавлении точек в кривую и выходе их значений за установленные максимум или минимум по обеим осям происходит пересчет максимальных и/или минимальных значений.
- Ручное масштабирование графика мышкой или с клавиатуры (после формирования всех кривых).
- Панорамирование графика при масштабе > 100% - сдвиг по всем четырем направлениям также мышкой или с клавиатуры.
- "Датализация" точек - два режима отображения кривых.
- Отображение значений точек в виде хинта при нахождении курсора мыши около точки.
- Наличие "навигатора" - отдельное полупрозрачное окно (площадь 1/16 от площади компонента), отображающее весь график и которое можно таскать мышкой по экрану.
- Можно изменять: цвет компонента, цвет кривых, цвет осей, видимость сетки графика.

Компонент ведет себя весьма прилично - при перерисовке (а это может происходить очень часто, например, при панорамировании, добавлении точек) график не дергается.

Пригодится для тех (ИМХО), кто не хочет связываться с TChart с его непомерно обширными настройками, кому достаточно отображать линейные графики (кривые).

Страница компонента. Там можно посмотреть скриншоты, детальное описание и скачать исходники компонента с примером.

PM MAIL   Вверх
EvilsInterrupt
Дата 2.3.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



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

Цель класса: Ожидать добавления в папку с плагинами добавления новых плагинов и при наступлении этого  события дернуть CALLBACK ф-цию или в простонародье "ивент" ;)

Присоединённый файл ( Кол-во скачиваний: 74 )
Присоединённый файл  u_TPluginChangeNotification.pas 4,72 Kb
PM MAIL WWW ICQ Jabber   Вверх
Doga
Дата 6.3.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 20.12.2007
Где: Россия, Обнинск

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



Всем привет.

user posted image

TRGrid это чистый VCL-компонент, является наследником базового класса TCustomControl. При разработке использовались исходные коды классов TCustomGrid и TRxDrawGrid (RxLib). По своей сути TRGrid можно назвать виртуальным, он ничего не знает о данных, которыми он управляет. Всю необходимую информацию для их отображения он получает от приложения с помощью событий. В отличие от компонентов аналогичного типа TRGrid имеет следующие особенности:
    
    1. Умеет создавать объединения  ячеек в виде прямоугольника  как в области фиксированных, так и в области не фиксированных ячеек. Единственное ограничение: объединённая ячейка должна распологаться только в одной из областей и не может распологаться сразу в двух областях (фиксированных и не фиксированных ячеек).    

    2. Имеет возможность скрывать и показывать колонки и строки в любом порядке, без переинициализации данных.
    
    3. Имеет три режима маркировки данных: по колонкам, по строкам и по ячейкам. Маркировка может производиться в любом порядке и не сбрасывается при перемещении курсора с ячейки на ячейку. Одновременно можно использовать только один из трёх режимов маркировки.

    4. Для каждого из состояний ячейки (активная ячейка, ячейка текущей строки/колонки, маркированная ячейка, фиксированная, ...) предусмотрены настраиваемые наборы шрифтов и цветов фона. Так же имеется возможность чередующейся окраски фона строк и (или) колонок.

    5. Умеет отображать картинки как прозрачные, так и не прозрачные в любой из ячеек с требуемой привязкой относительно границ ячейки.

    6. Умеет отображать текст и в многострочном и в обычном режиме (в одну строку) с автоматической заменой не вмещающегося в границы ячейки текста на многоточие ("..."). При этом так же имеется возможность его позиционирования относительно границ ячейки.

    7. Фиксированные ячейки могут исполнять роль кнопок. Для этого предусмотрена анимация нажатия и имеются соответствующие события.

    8. Поддерживается сортировка строк с помощью внешних функций сравнения. При этом возможна сортировка и всех строк и только не фиксированной области строк.

    9. Для хранения разнообразных внешних данных каждая строка, колонка и ячейка предоставляет возможность использования указателей типа void * (pointer). Для своевременной инициализации и очистки данных так же предусмотрены соответствующие события.

    10. Имеется полный набор событий для ручной прорисовки ячеек.

Компонент бесплатный.

Примеры работ с использованием компонента TRGrid:

user posted image

user posted image

user posted image


P.S Компонент TRGrid обновлён до версии 1.20. Текущая сборка содержит исходники компонента и примера.
А также, полный хелп на русском языке в формате HLP и CHM.




Это сообщение отредактировал(а) Doga - 15.5.2015, 10:53

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

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

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

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

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


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

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


 




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


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

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