Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 178
от 13.07.2005, 15:20

Администратор:Калашников О.А.
В номере:Вопросов: 9, Ответов: 24
В рассылке:Подписчиков: 218, Экспертов: 33


Вопрос № 23140: Здраствуите, у меня такие вопросы: 1.как сделать чтобы SetCursorPos(x,y); скрывал курсор не только на форме но и на десктопе и 2. Как зделать чтобу програма не отображалась на таскбаре? Заранее спасибо. ...
Вопрос № 23163: День добрый. Как в качестве обработчика события использовать обычную процедуру, а не метод объекта? Спасибо. ...
Вопрос № 23165: Люди добрые! Подскажите, плиз, кто знает, структуру MP3-файла....
Вопрос № 23170: Приветствую Всех! Помогите пожалуйста: есть popup-меню, в нем подразумевается куча пунктов, но отображаются только 10 (создаются программно). Вопрос: как сделать скроллинг для просмотра невидимых пунктов? (Возможно надо добавить еще по одному ите...
Вопрос № 23182: господа хорошие, подскажите: есть interbase-база, в которой 23 таблицы, langdriver = PdoxANSI Cyrillic не могу создать таблицу - все время выбрасывает сообщение "Invalid modify request.unsuccessful metadata update STORE RDB$RELATIONS...
Вопрос № 23194: Здравствуйте, уважаемые эксперты. У меня при разработке проги возникла проблема. Подскажите, как из моей программы можно проверить, запущен ли какой-нибудь процесс в винде или нет (например, ворд). У меня Делфи 7. Заранее спасибо....
Вопрос № 23195: Здраствуйте уважаемые эксперты. у меня такой вопрос как с помощю delphi узнать IP адрес компа и записать его в поле memo1 или edit1. Заранее спасибо з.ы. Я пробовал так как ето показано в приложении но у меня ничево не вышло......
Вопрос № 23223: Помогите, плиз, начинающему программеру !!! У меня два вопроса. 1) - мне известна структура заголовка MP3-файла, но у меня не получается вытащить из него значения всех его параметров, а также правильно организовать его поиск в MP3-файле (приходит...
Вопрос № 23225: Здравствуйте господа эксперты. Помогите пожалуйста разобраться, работая над программой столкнулся с ситуацией, а ситуация такая: на форме находится ADOQuery делает запрос который состоит из одной строки как присвоить переменным данные из запроса...

Вопрос № 23.140
Здраствуите, у меня такие вопросы: 1.как сделать чтобы SetCursorPos(x,y); скрывал курсор не только на форме но и на десктопе и 2. Как зделать чтобу програма не отображалась на таскбаре?
Заранее спасибо.
Отправлен: 06.07.2005, 21:48
Вопрос задал: Станислав (статус: Посетитель)
Всего ответов отправлено: 5

Отвечает: Werewolf
Здравствуйте, Staskin!
Что касается первого:
Можно установить хук на движение мыши при этом менять положение курсора и скрывать курсор:
//файл проекта программы
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

//главный модуль программы
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
function SetHook: Boolean; external 'hmouse.dll';
function UnHookHook: Boolean; external 'hmouse.dll';
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
SetHook;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
UnHookHook;
end;

end.

//файл библиотеки dll
library hmouse;
uses
SysUtils,
Classes,
Unit2 in 'Unit2.pas';

{$R *.res}
exports

SetHook,
UnHookHook,
HookProc;

begin
HookedAlready := False;
end.

//модуль библиотеки dll
unit Unit2;
interface
uses Wintypes, Winprocs, Messages;

function SetHook: Boolean;
function UnHookHook: Boolean;
function HookProc(Code: integer; wParam: Word;
lParam: Longint): Longint; stdcall;

var
HookedAlready: Boolean;

implementation

uses ConvUtils, SysUtils, Windows;

var
ourHook: HHook;

function SetHook: Boolean;
begin
if HookedAlready then
exit;
ourHook := SetWindowsHookEx(WH_MOUSE, @HookProc, HInstance, 0);
HookedAlready := True;
end;

function UnHookHook: Boolean;
begin
UnHookWindowsHookEx(ourHook);
ShowCursor(true);
HookedAlready := False;
end;

function HookProc(Code: integer; wParam: Word;
lParam: Longint): Longint; stdcall;
begin
if (wParam = WM_MOUSEMOVE) then
begin
SetCursorPos(65535, 65535);//сдвигаем курсов в правый нижний угол
ShowCursor(false);//прячем его
result := 0;
exit;
end;
result := CallNextHookEx(ourHook, Code, wParam, lParam);
end;

end.

По второму:
procedure TForm1.FormActivate(Sender: TObject);
begin
ShowWindow(Application.Handle,SW_HIDE)
end;
Ответ отправил: Werewolf (статус: 2-ой класс)
Отправлен: 07.07.2005, 01:48

Отвечает: Malish
Здравствуйте, Staskin!
2
procedure TForm1.Button1Click(Sender: TObject);
var
HTaskBar : THandle;
begin
HTaskBar := FindWindow('SHELL_TRAYWND', nil);
ShowWindow(HTaskBar, SW_HIDE);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
HTaskBar : THandle;
begin
HTaskBar := FindWindow('SHELL_TRAYWND', nil);
ShowWindow(HTaskBar, SW_SHOWNORMAL);
end;
Ответ отправил: Malish (статус: Студент)
Отправлен: 07.07.2005, 02:33

Отвечает: Gin

Здравствуйте, Staskin!

1. Смотрите справку по курсору. Вот Вам карты в руки:

function ShowCursor(bShow: BOOL): Integer; stdcall;
While (ShowCursor(false) > 0) do;
While (ShowCursor(true) > 0) do;

2. Скрытие панели задач.

private
{ Private declarations }
StartBtnWnd: hWnd;
--------
procedure TForm1.FormCreate(Sender: TObject);
begin
{ Поиск окна панели задач. Результат поиска сохраняется
в переменной StartBtnWnd. }
StartBtnWnd:=FindWindow('Shell_TrayWnd', nil);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(StartBtnWnd, SW_HIDE);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowWindow(StartBtnWnd, SW_SHOW);
end;

С Уважением, Gin.
Ответ отправил: Gin (статус: Студент)
Отправлен: 07.07.2005, 14:19

Отвечает: streetcat
Здравствуйте, Staskin!
1. Указатель не скрывается функцией SetCursorPos для этого есть ShowCursor(False), но она прячет курсор только на форме.
2. Я когда-то юзал RegisterServiceProcess; (только его нужно самостоятельно описать, так как в приложении и потом вызвать, например в обработчике OnCreate формы). А еще можно скрыть с помощью какого-нить компонента, работающего с трэем, типа TrayIcon.

Приложение:

---------
WinERROR: Keyboard not detected. Press Enter to continue

Ответ отправил: streetcat (статус: 7-ой класс)
Отправлен: 07.07.2005, 18:28

Отвечает: Denisss
Здравствуйте, Staskin!
1. Насколько мне известно, SetCursorPos(x,y); не скрывает курсора, она устанавливает курсор в позицию x, y.

2. Чтобы спрятать форму из таскбара (это панель с кнопкой пуск, обычно располагается снизу экрана), надо сделать так, как показано в приложении

Приложение:

Ответ отправил: Denisss (статус: 9-ый класс)
Отправлен: 07.07.2005, 18:39


Вопрос № 23.163
День добрый. Как в качестве обработчика события использовать обычную процедуру, а не метод объекта?

Спасибо.
Отправлен: 07.07.2005, 11:30
Вопрос задал: Полетаев Виталий Викторович (статус: Посетитель)
Всего ответов отправлено: 4

Отвечает: John Freeman
Здравствуйте, Полетаев Виталий Викторович!
Как обычно - Button1.Onclick:=someproc;
Но параметры должны быть такими же, иначе полетит программа.
---------
You're trying to take me They trying to make me This is the only Gives me the only thing Tired of lying, I'm tired of lying The only thing I inderstand is what I feel...
Ответ отправил: John Freeman (статус: Профессор)
Отправлен: 07.07.2005, 11:45
Оценка за ответ: 2
Комментарий оценки:
Ваш вариант работает, только если someproc является "МЕТОДОМ" с соответствующими параметрами, как у Button1.Onclick.
Я же спрашивал про использование обычной процедуды не являющейся методом.

Отвечает: Voituk Alexander
Здравствуйте, Полетаев Виталий Викторович!
Я думаю никак. Дело в том, что наступление события инициирует сам объект. И формат события четко определен. Просто ты можешь в обработчике события вызывать свою процедуру.
Ответ отправил: Voituk Alexander (статус: 9-ый класс)
Отправлен: 07.07.2005, 11:55
Оценка за ответ: 1
Комментарий оценки:
Вот так работает :)))

procedure MyOnClickButton(Self : TButton; Sender: TObject);
begin
ShowMessageFmt ('Нажата кнопка %s', [Sender.Caption]);
end;

procedure AssignButtonClick (const youButton : TButton);
var
Method : TMethod;
begin
Method.Code := @ MyOnClickButton;
Method.Data := youButton;
youButton.OnClick := TNotifyEvent (Method);
end

Отвечает: Васильев Дмитрий
Здравствуйте, Полетаев Виталий Викторович!
Попробуйте TypInfo.SetMethodProp();
Ответ отправил: Васильев Дмитрий (статус: 1-ый класс)
Отправлен: 07.07.2005, 12:07

Отвечает: Delphin
Здравствуйте, Полетаев Виталий Викторович!
Так же как и было только.... Короче смотри приложение.

Приложение:

---------
Обращаться в ICQ: 77778851 или E-Mail: delphinster@gmail.com

Ответ отправил: Delphin (статус: 7-ой класс)
Отправлен: 07.07.2005, 17:20
Оценка за ответ: 2
Комментарий оценки:
Предложенный Вами метод не работает.
А вот так работает:

procedure MyOnClickButton(Self : TButton; Sender: TObject);
begin
ShowMessageFmt ('Нажата кнопка %s', [Sender.Caption]);
end;

procedure AssignButtonClick (const youButton : TButton);
var
Method : TMethod;
begin
Method.Code := @ MyOnClickButton;
Method.Data := youButton;
youButton.OnClick := TNotifyEvent (Method);
end


Вопрос № 23.165
Люди добрые! Подскажите, плиз, кто знает, структуру MP3-файла.
Отправлен: 07.07.2005, 11:38
Вопрос задал: Skynet79 (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Ерёмин Андрей
Здравствуйте, Skynet79!
Вот, что известно мне. ID3(v1)-теги MP3-файла хранятся в его последних 128-ми байтах. Если прописаны ID3(v2)-теги, то они записаны в самом начале файла (вероятнее всего, в первых 128-ми байтах). Однако, некоторые из этих тегов записаны не так, как мы их привыкли читать. Например, тег "жанр" прописан числом. Для каждого числа установлено определённое название жанра. Всю основную часть, естественно, занимают звуковые данные. Итак, файл имеет такую структуру:
------file.mp3------
ID3v2-TAGS
****************
****************
****************
****************
****************
****************
****************
****************
ID3v1-TAGS
--------------------
Возможно, ID3v2-теги занимают не 128, а 256 байт, т.к. они более обширны.
Можно взять какой-либо HEX-редактор и открыть небольшой mp3-файл (килобайт на 100-200). Тогда сразу всё станет понятно. Удачи!
---------
Если б не было бы глюка, жизнь была б такая скyка...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 07.07.2005, 12:17

Отвечает: Васильев Дмитрий
Здравствуйте, Skynet79!
_http://www.swissdelphicenter.ch/torry/showcode.php?id=121
Ответ отправил: Васильев Дмитрий (статус: 1-ый класс)
Отправлен: 07.07.2005, 12:29

Отвечает: Jadd
Здравствуйте, Skynet79!
Хороший вопрос. Иди на www.codenet.ru. Там точно есть описание фреймов и прочей инфы по мр3
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 07.07.2005, 17:40


Вопрос № 23.170
Приветствую Всех!
Помогите пожалуйста: есть popup-меню, в нем подразумевается куча пунктов, но отображаются только 10 (создаются программно). Вопрос: как сделать скроллинг для просмотра невидимых пунктов? (Возможно надо добавить еще по одному итему сверху и снизу и что-нить нарисовать, но рисунок получается не по ценру, а сбоку) :-((
Отправлен: 07.07.2005, 13:41
Вопрос задал: Zubex (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Bochvarov NikB
Здравствуйте, Zubex!
А почему не сделаш ето йерархично (sybmenu), или двухмерно (смотри tMenuItem.Break)
А скролинг попъп мену делайт (думаю) ОС :)
Ответ отправил: Bochvarov NikB (статус: 4-ый класс)
Отправлен: 07.07.2005, 13:47
Оценка за ответ: 3
Комментарий оценки:
йерархично не подходит, а если все пункты вогнать, попап на весь экран будет, а надо 10 пунктов

Отвечает: Werewolf
Здравствуйте, Zubex!
вот решение, правда мигает
Таймер, popup, imagelist, actionlist кинуть на форму
acttop - верхний экшн
actbot - нижний экшн

Приложение:

Ответ отправил: Werewolf (статус: 2-ой класс)
Отправлен: 11.07.2005, 23:09
Оценка за ответ: 4
Комментарий оценки:
Спасибо! Кое что похожее...


Вопрос № 23.182
господа хорошие, подскажите:
есть interbase-база, в которой 23 таблицы, langdriver = PdoxANSI Cyrillic
не могу создать таблицу - все время выбрасывает сообщение "Invalid modify request.unsuccessful metadata update
STORE RDB$RELATIONS failed
arithmetic exception, numeric overflow, or string truncation
" кода ошибок - BDE Error 9996,13059(server error -607)
объясните, пожалуйста, что это значит и что с этой проблемой можно сделать.
Заранее благодарен
Отправлен: 07.07.2005, 19:18
Вопрос задал: Prosto_Blackhowk (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: Denisss
Здравствуйте, Prosto_Blackhowk!
А как Вы, собственно, создаете таблицу. Судя по всему, Вы подаете неверный запрос. Если дословно, то BDE (или кто там) Вам пишет, что Вы выполняете неверный запрос на изменение в базе. И говорит, что Вы посылаете неверный тип данных в запросе.
Ответ отправил: Denisss (статус: 9-ый класс)
Отправлен: 07.07.2005, 21:47
Оценка за ответ: 3


Вопрос № 23.194
Здравствуйте, уважаемые эксперты. У меня при разработке проги возникла проблема. Подскажите, как из моей программы можно проверить, запущен ли какой-нибудь процесс в винде или нет (например, ворд). У меня Делфи 7. Заранее спасибо.
Отправлен: 07.07.2005, 22:56
Вопрос задал: Sanya (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Ерёмин Андрей
Здравствуйте, Sanya_kv!
Код, который в приложении, выводит в ListBox1 список всех запущенных процессов. Чтобы определить, запущен ли какой-либо процесс, нужно знать имя его exe-приложения. Например, у Word это WINWORD.EXE. Проверяем так:
Var IsRunning: Boolean; I: Integer;
Begin
IsRunning:=False;
For I:=0 To ListBox1.Items.Count - 1 Do
If ListBox1.Items[I] = 'WINWORD.EXE' Then IsRunning:=True;

Если процесс запущен, IsRunning станет равным True. Однако не все процессы можно таким образом "увидеть". Некоторые программы специально не отображаются в списке процессов. Удачи!

Приложение:

---------
Если б не было бы глюка, жизнь была б такая скyка...

Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 08.07.2005, 09:18
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ. Нужная мне программа всегда отображает себя в списке процессов.

Отвечает: Gin

Здравствуйте, Sanya_kv!

unit Unit1;

interface

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

type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Wnd: hWnd;
buff: array[0..127] of Char;
begin
ListBox1.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd <> 0 do begin {Не показываем:}
if (Wnd <> Application.Handle) and {-Собственное окно}
IsWindowVisible(Wnd) and {-Невидимые окна}
(GetWindow(Wnd, gw_Owner) = 0) and {-Дочернии окна}
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0) {-Окна без заголовков}
then begin
GetWindowText(Wnd, buff, sizeof(buff));
ListBox1.Items.Add(StrPas(buff));
end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
ListBox1.ItemIndex := 0;
end;
end.

С Уважением, Gin.
Ответ отправил: Gin (статус: Студент)
Отправлен: 08.07.2005, 15:30
Оценка за ответ: 5
Комментарий оценки:
Спасибо.

Отвечает: streetcat
Здравствуйте, Sanya_kv!
Можно попробовать найти окно этого процесса. Ну тогда нужно знать класс этого окна, например 'TWordForm' или че-нить типа этого; и непременно заголовок окна!
для этого есть функция WinAPI:
FindWindow(ClassName, Title: PChar);

---------
WinERROR: Keyboard not detected. Press Enter to continue
Ответ отправил: streetcat (статус: 7-ой класс)
Отправлен: 08.07.2005, 21:17
Оценка за ответ: 5
Комментарий оценки:
Спасибо.


Вопрос № 23.195
Здраствуйте уважаемые эксперты. у меня такой вопрос как с помощю delphi узнать IP адрес компа и записать его в поле memo1 или edit1. Заранее спасибо
з.ы. Я пробовал так как ето показано в приложении но у меня ничево не вышло...

Приложение:

Отправлен: 07.07.2005, 23:09
Вопрос задал: Станислав (статус: Посетитель)
Всего ответов отправлено: 4

Отвечает: Delphin
Здравствуйте, Staskin!
Я даю более лучшую функцию которая выводит все IP на компьютере. Выдрал из своего проекта. Смотри приложение. Функция function GetLocalIPS: TStrings; возвращает список IP адресов.
Если поможет то поставь +5 ;-)

Приложение:

---------
Обращаться в ICQ: 77778851 или E-Mail: delphinster@gmail.com

Ответ отправил: Delphin (статус: 7-ой класс)
Отправлен: 08.07.2005, 11:49

Отвечает: xXx
Здравствуйте, Staskin!
Попробуй так, это поможет. Удачи.

Приложение:

Ответ отправил: xXx (статус: 2-ой класс)
Отправлен: 08.07.2005, 18:17

Отвечает: Tsechoev Bagaudin
Здравствуйте, Staskin!
Проще всего через компоненту Indy:
IdIPWatch находится на вкладке Indy Misc
Думаю сам поймешь как получить необходимую инфу
Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 7-ой класс)
Отправлен: 09.07.2005, 17:39

Отвечает: Ballon
Здравствуйте, Staskin!

Приведу полность процедуру Button1.Click надеюсь все понятно.Да и не забудь подключить модуль WinSock.

procedure TForm1.Button1Click(Sender: TObject);
type
TaPInAddr = Array [0..10] of PinAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: Array[0..63]of Char;
I: Integer;
GInitData: TWSAData;
begin
//Инициализация сокетов
WSAStartup($101, GInitData);
//Получаем имя локального компьютера (хоста)
GetHostName(Buffer, SizeOf(Buffer));
//Получаем указатель на хост
phe := GetHostByName(buffer);
if phe = nil then Exit;
//Получаем указатель на массив адресов.
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
//Перечисляем все адреса
while pPtr^[I] <> nil do
begin
//Вывести адрес
Memo1.Lines.Add(inet_ntoa(pptr^[I]^));
Inc(I);
end;
//3акрываем сокет
WSACleanup;
end;
Ответ отправил: Ballon (статус: 3-ий класс)
Отправлен: 11.07.2005, 08:00


Вопрос № 23.223
Помогите, плиз, начинающему программеру !!!
У меня два вопроса. 1) - мне известна структура заголовка MP3-файла, но у меня не получается вытащить из него значения всех его параметров, а также правильно организовать его поиск в MP3-файле (приходится подсматривать в WinAMP'е :( ).
2) - я слышал, что есть очень быстрый рекурсивный алгоритм перебора всех файлов (включая все вложенные каталоги) в заданном каталоге, но у кого не спрашивал - никто не знает.
Жду с нетерпением...
Отправлен: 08.07.2005, 13:39
Вопрос задал: Skynet79 (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: Васильев Дмитрий
Здравствуйте, Skynet79!
В приложении пример из рабочего приложения;

Приложение:

Ответ отправил: Васильев Дмитрий (статус: 1-ый класс)
Отправлен: 08.07.2005, 18:07


Вопрос № 23.225
Здравствуйте господа эксперты.
Помогите пожалуйста разобраться, работая над программой столкнулся с ситуацией, а ситуация такая: на форме находится ADOQuery делает запрос который состоит из одной строки как присвоить переменным данные из запроса думаю из листинга будет ясно что я объясняю :)

Приложение:

Отправлен: 08.07.2005, 13:46
Вопрос задал: Voldmir (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: Tsechoev Bagaudin
Здравствуйте, Voldmir!
Запрос как миниму что-то возвращает, значит ты должен знать имена столбцов или хотя бы их порядок. Вот и подставляй их вместо NewStr := ADOQuery1.Fields[0].Value. Или я чего-то не допонял?
Хотя я Word вызвал бы по другому ...
Удачи!

---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 7-ой класс)
Отправлен: 09.07.2005, 17:27


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное