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

Delphi - проблемы и решения

  Все выпуски  

Проблемы и решения в Delphi #40


Служба Рассылок Subscribe.Ru

Проблемы и решения в Delphi - выпуск 40 от 20.12.2001.


Да будет день, да будет свет,
и не устанем мы молиться.


ВСЕ ВОПРОСЫ СПРОСИТЬ ПРЕДЛОЖИТЬ АРХИВЫ СКОЛЬКО НАС


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

Сегодня в выпуске :
~~~~~~~~~~~~~~~~~~~
1. Очередные вопросы.
2. Отвеченные вопросы.
~~~~~~~~~~~~~~~~~~~



1. Очередные вопросы.
---------------------


Вопрос 609: 

От: Prof

Подскажите пожалуйста, как определить во время выполнения программы,
есть ли у компонента свойство (например Caption):
for a:=0 to ComponentCount-1 do
if(Components[a].НаличиеСвойства('Caption')=true)then
begin
...
end;

(Components[a] as TButton).Caption
~~~~~~~~~~
и как обойти непосредственное указание типа компонента.
Может есть возможность макроподстановки, как в FoxPro:
aaa:=Components[b].ClassType;
(Components[a] as amp&aaa).Caption:='Это Caption';
~~~~~~~


Ответить.

Ответ 1:


Вопрос 610: 

От: Delphin


проблема по Delphi 5.
я создал Remote Data Module со стандартными параметрами, то есть,
Multiple Instance и Apartment.
поместил туда элементарную таблицу и провайдер, зарегистрировал
приложение.
в клиенте в режиме дизайна после подключения SocketConnection
сервер-приложение запускается нормально,
то есть Clientdataset через DataSource полностью отображается в DBGrid.
Но после отключения сервер вырубается с ошибкой
некорректной операции. Кто сталкивался с такой проблемой подскажите плиз
в чем может быть дело.
в C++Builder все нормально



Ответить.

Ответ 1:


Вопрос 611: 

От: Vampir

Я делаю почтовый клиент. Например, снимаю почту. Как привязать
ProgressBar к количеству принятых байтов из общего числа байтов (с
почтового сервера), как это, наверное, делается в OutLooke, а не к
принятым сообщениям из общего числа сообщений, как это сделал я? Кол-во
общего числа байтов я узнаю (NMPOP31.BytesTotal), но как мне фиксировать
количество принятых байтов? Можно пример, но согласен на совет.



Ответить.

Ответ 1:


Вопрос 612: 

От: Прытков В.А.

Использую dbf под Delphi 5. Имеется таблица, на ней стоит
фильтр.
Перед добавлением записи выполняется SQL запрос с агрегатной функцией.
После этого - Insert, устанавливаются значения полей, потом Post.
И вот при Post происходит сбой при обращении к Kernel32.dll.
Первый раз я это вылечил, отказавшись от SQL запроса. Теперь выплыло
на другой таблице, и этот способ не сработал. Возможно, кто-то знает,
в чем дело?


Ответить.

Ответ 1:


Вопрос 613: 

От: Aimetdinov Vladimir

Хотелось бы узнать про описание объектов(классов) в файлах DLL
и последующего их экспорта. А также про подключаемые файлы .inc,
которые, возможно, могут участвовать в этом процессе.
В архиве Вашей рассылки об этом быстро найти не удалось.
Возможно Вы,что-то подскажете, либо сашлетесь на какие-то источники?


Ответить.

Ответ 1:


Вопрос 614: 

От: Gavrilenko

Подскажите, пожалуйста, как поместить Gauge или ProgressBar в
StastusBar.Panels.


Ответить.

Ответ 1:


Вопрос 615: 

От: - = H u n t e r = -

Господа, поможите!!! Как сделать так, чтобы в компонентике MaskEdit-
отоброжались звездочки(*) принажатии на клавишы, и откуда мне брать,
то что я на вводил?


Ответить.

Ответ 1:


Вопрос 616: 

От: Vilgelm Sergey

Значит у меня есть несколько канв на которых я рисую,
а так же я создал объект, который рисует на этих канвах. Так вот, как
мне запомнить в свойстве объекта на какой канве он рисовал в
последний раз, а потом при обращении к этому объекту, например
перерисовать с другими координатами, он автоматически обращался
именно к той канве, где он последний раз рисовал. Объект создан от
TObject. Пока что я выхожу из положения передавая в качестве
параметров в объект всю канву и принимаю назад уже изменённую канву.
А мне нужно прямой доступ к канве.


Ответить.

Ответ 1:


Вопрос 617: 

От: Эдуард Филимонов

Подскажите, как сделать Dragamp&Drop строки из DBGrid на
другой компонент (например в другой DBGrid). Если можно сразу
несколько строк - еще лучше.
Проблема в том, что если в свойстве DragMode поставить Automatic,
то тогда невозможно с помощью мыши получить фокус в сетке
для редактирования записи. А если стоит Manual,
то при событии onMouseDown реагирует все только не сетка.
Внутри сетки появляется фокус ввода. Как быть?


Ответить.

Ответ 1:


2. Отвеченные вопросы.
----------------------


Вопрос 586: 

От: Горщарук Владимир Александрович


Хотелось бы узнать из сВоей проги кто какие файлы в системе открывает.

Какими функциями WinAPI это можна реализовать, какие сообщения Windows
нада перехватывать?


Ответить.

Ответ 1:
Классический пример с исходниками:
FileMonitor на www.sysinternals.com


Вопрос 587: 

От: Andy Osyanin

V═rabote nado ispol'zovat' fotografii kotorye nahodjatsja na udalennom
servere. Hochu ispol'zovat' HTTP komponent. Opyta raboty s nim net
voobshe. Kakim obrazom mozhno skopirovat' fotografiju s servera na
lokal'nyy komp. Rabotaju cherez LAN.


Ответить.

Ответ 1:
Вовсе не обязательно использовать HTTP.
Если конечно, на удаленном компе уже не
стоит Web-сервер. Подойдет простое
копирование файлов. Просто путь
пишется '//имя_удаленного_компа/папка/файл'
Если удаленный комп работает под NT,
надо заводить пользователя для клиента.


Вопрос 588: 

От: Serge V. Frolov

Кто подскажет как в программе на Delphi создать
динамически много компонент не описывая каждую
в программе (т.е. не описывая имя переменной и
ее тип). Какое нибудь использование TList или
динамических массивов ?


Ответить.

Ответ 1:
var a:array[1..10] of TComponent;

begin
for i:=1 to 10 do a[i]:=TComponent.create(nil);
end;

Только ведь не будет работать - тип на момент создания
компонента должен быть определен.
Ответ 2:
Я для этой цели использовал динамический массив, например:

......
var
ButtonsArr: array of TButton;
.......
procedure CreateNewButton;
begin
SetLegth(ButtonsArr, Length(ButtonsArr)+1);
ButtonsArr[Length(ButtonsArr)-1]:=TButton.Create.......
..............
end;

Ответ 3:
Что значит "не описывая тип" ???
А задача решается действительно просто с помощью
любых динамических структур, способных хранить
адреса. Например, с помощью TList:
var MyList:TList; MyObj:TObject; i:integer;
...
MyList:=TList.Create;
MyList.Add(TPanel.Create(nil));
MyList.Add(TButton.Create(nil));
...
for i:=0 to MyList.Count-1 do begin
MyObj:=MyList.Items[i];
if MyObj is TButton then ...
end;


Вопрос 589: 

От: Bogdan Duchnitch

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


Ответить.

Ответ 1:
Выведи на форме картинку с картой. Храни наборы координат для полигонов,
соответствующих регионам карты. На клике проверяй попадание мыши в
прямоугольник, ограничивающий каждый полигон. Если попадает в прямоугольник
создавай из координат полигональный регион и проверяй попадание в него
(функция WinAPI). Для подсветки можно просто залить созданый регион. Если
карта масштабируется и прокручивается, то надо пересчитывать координаты при
проверке.
За день пишеться в легкую, а в сторонних компонентах дольше разбираться и
глюки вычищать.


Вопрос 590: 

От: МР

Из Delphi запускается Dos-задача.Как - ответ есть в │26.
Но как при этом поиметь errorlevel Dos-задачи?


Ответить.

Ответ 1:
ExitCode, DosExitCode, GetErrorLevel - посмотри эти, здесь наверняка то что нужно


Вопрос 591: 

От: michail_a

Здравствуйте! Расскажите пожалуйста при помощи каких программ лучше
установить связь с удалённым компьютером. И где их достать. Каким
образом можно соединиться по FTP двум компьютерам. Заранее благодарю.


Ответить.

Ответ 1:


Вопрос 592: 

От: Dmitry Patrakov

Господа есть у кого ни будь ABC for Delphi 5 с исходниками ...
покупать денег нет :((


Ответить.

Ответ 1:
Проще поискать что-нибудь другое, чем исходники к шароварным
компонентам (рекомендую LMD Tools)


Вопрос 593: 

От: Comp_otdel

!!!Помогите прочитать из com порта (там модем)!!!
Читаю так: FileRead(hComm,buf,1);
Пока символы в порту есть всё хорошо читается.
Когда кончаются - эта функция виснет.
С ReadFile та же история.
Вопрос: как определить что символов там больше нет???


Ответить.

Ответ 1:
MSDN: Communication;
Ответ 2:
Если посмотреть на исходники на саму функцию FileRead то можно
заметить, что в ней вызывается все тот же ReadFile ;) А если
почитать
документацию, то можно увидеть, то функции ReadFile по своей
природе блокирующие. .) Для того, что бы не происходило
"зависания"
необходимо использовать Overlapped стурктуру... .) В мсдн
есть описание этого механизма. Если же не хочется воевать с
API могу
посоветовать библиотеку Async Pro 3.0 Там ест полный набор
компонент для работы с портами и модемом. Не панцея от всех бед, но лучшего
я пока не видел.

Вопрос 594: 

От: Макс-911

Не подскажете как осуществить в БД (Paradox) поиск записей по следующим
подряд символам (строке), причем последовательный? То есть в начале
находим ближайшую по символам запись, потом следующую и т.д. Ну например
как в Regedit.exe, MSWord и т.д.("Найти" и "Найти далее").


Ответить.

Ответ 1:
Можно через SQL:
select * from 'TABLE' where 'FIELD' like "%SUBSTRING%"

Будет выборка всех записей где в поле FIELD
встречается подстрока SUBSTRING
Ответ 2:
А чем не устраивает "решение в лоб":
Получаешь набор, соответствующий фильтру ("Найти"),
потом вручную по нему перемещаешься ("Найти далее").


Вопрос 595: 

От: КГТУ

У меня есть готовый документ MS Word со всеми колонками, надписями (типо
готовый макет). Осталось подставить туда значения записей из БД, ну то
есть сформировать отчет в Word-е. Не подскажете как это сделать (если
можно маленький пример, как управлять высотой, шириной и т.д.
вставляемых туда записей?


Ответить.

Ответ 1:


Вопрос 596: 

От: EsKor


Подскажите как из Delphi 5 работать с БД или таблицами (Visual) FoxPro
(5).
С помощью BDE, используя описанный во многих книгах тип драйвера
STANDART,
ничего не получается. Database Desktop создаваемую таблицу FOXPRO
отказывается
сохранять ругаясь на то, что псевдоним (алиас) не FOXPRO-шный.
При попытке использовать, видимо, драйвер ODBC типа Visual FoxPro
driver, при попытке
связать компонент, в частности Table, с таблицей упорно требует ввода
неизвестного мне пароля.
Господа программисты, помогите кто чем может, а то заставит меня
руководство работать на
Visual FoxPro, бр-р-р :-((.


Ответить.

Ответ 1:
Это странно, что BDE у тебя с ними не работает.
У меня работало.
Псевдоним надо создавать с помощью BDE Administrator.
Там создаёшь Standard, но в свойствах указываешь
Default Driver FOXPRO

И не забудь указать кодовую страницу на вкладке
Configuration - Drivers -> Native -> FOXPRO = dBase RUS cp866

Ответ 2:
Когда BDE запрашивает пароль на доступ к БД (при указании драйвера БД
как ODBC Visual Fox Pro), просто надо кликнуть ничего не вводя, т.е.
оставив пустые UID и Password. Коннект пройдет нормально.


Вопрос 597: 

От: oleg

Требуется программно отправить e-mail (на кнопочку нажимаешь - он и
улетает), причем желательно не привязываться к почтовым клиентам,
установленным на компе, а средствами самого Delphi связаться с
почтовым сервером и по указанному адрессу оправить определенный файл.


Ответить.

Ответ 1:
Посмотри компоненты FPiette на http://www.rtfm.be/fpiette
Там есть и почтовые, и HTTP, и FTP клиенты...
Ответ 2:
Используйте class library Synapse.
Synapse homesite is at http://www.ararat.cz/synapse/
Ответ 3:
так в чем проблема? NMSMTP и NMPOP3 из закладки FastNet....
Ответ 4:
Способов 4:

1. Использовать MAPI
2. Использовать интерфейс к SMTP серверу (стандартный
компонент дельфи TSMTPClient)
3. Использовать стандартный почтовый клиент как COM
сервер - легче всего MS Outlook
4. Писать приложение типа Socket-to-Socket с
реализацией SMTP протокола

Про первый ничего сказать не могу - очень давно это
было, по-моему уже давно никто кроме вижуал-васика
таким не пользуется.
Если у Вас есть SMTP сервер или Вы используете чей-то
SMTP сервер - провайдера или yahoo, например, то
второй вариант самый надежный - легко программировать,
довольно большая скорость и надежность, недостаток
только один - трудно получить точный ответ на вопрос
действительно ли письмо доставлено и достоверную
информацию об ошибках.
По поводу третьего варианта - работает надежно при
небольших количествах писем (не более нескольких тысяч
в час), программирование очень легкое. Требуется
установленный и настроенный outlook - т.е. собственно
наличие SMTP сервера обязательно.
Четвертый вариант - максимальная скорость и
возможности нет необходимости в серверах, клиентах -
только прямой доступ в интернет(с firewall могут быть
проблемы), но...но... очень сложное программирование,
доскональное знание SMTP протокола и структуры Header
письма, тестирование с получением писем на всех
возможных POP3 серверах и т.д. - например AOL не
получает Email если домен исходящего IP отличается от
прописанного домена в Header письма..., а Exchange и
Yahoo имеют немного разный формат прописывания в
заголовке письма аттачментов.
Ответ 5:
В Delphi 5 есть компонент TNMSMTP (закладка FastNet).
Опишу некоторые свойства:
Host - имя компа на котором стоит почтовый сервер или его Ip адрес (в
дальнейшем хост)
Port - порт хоста, через который прослушиваются пришедшие на него
сообщения по SMTP протоколу
CharSet - структура передачи текстовой информации почтового пакета
(м.б. в ASCII кодировке (просто текст), HTML и т.п.)
PostMessage - св-во для представления структуры почтового пакета:
Attachments - сод-т список прикрепленных к пакетуфайлов
FromAddress - мыло отправителя (обязательное св-во)
ToAddress - список мыл получаетелей
и т.д. Можно в справке почитать.
UserId - UID пользователя под которым осуществляется коннект к
хосту.


Вопрос 598: 

От: Wadim


Может кто подскажет, как правильно создавать объекты "на ходу"?
Мне нужно создать несколько объектов, причем чтобы для каждого
следующего
объекта родителем являлся предудыщий.
Пробую так:

procedure TForm1.FormCreate(Sender: TObject);
var
pnl: TPanel;
begin

pnl := TPanel.Create(nil);
pnl.Name := 'Panel1';
pnl.Parent := Form1;

pnl := TPanel.Create(nil);
pnl.Name := 'Panel2';
pnl.Parent := Panel1;

end;

Компилятор ругается на последнюю строчку, говорит, что нет такого
объекта
'Panel1'. Правильно, он не знает, что этот объект уже будет создан. Как
это
решить (или я что-то делаю неверно)?


Ответить.

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

arr: array [1..10] of TPanel;
Ответ 2:
procedure TForm1.FormCreate(Sender: TObject);
var
pnl1,pnl2 : TPanel;
begin

pnl1 := TPanel.Create(nil);
pnl1.Name := 'Panel1';
pnl1.Parent := Form1;

pnl2 := TPanel.Create(nil);
pnl2.Name := 'Panel2';
pnl2.Parent := pnl1;

end;

Ответ 3:
Компилятор всегда прав ! Нет такого объекта.

Переменные типа TPanel надо объявлять в объекте формы !
Ведь Delphi обращается к ним не по имени, а по ссылке,
а ты ссылку сделал ЛОКАЛЬНОЙ переменной.
К тому же нельзя две панели хранить в одной переменной.
Да и надо освобождать в деструкторе эти панели, если создаёшь
их как Create(nil) - без владельца.

Надо так.
1. Объявить Panel1, Panel2 : TPanel в классе TForm1
2.

procedure TForm1.FormCreate(Sender: TObject);
begin
Panel1 := TPanel.Create(nil);
Panel1.Name := 'Panel1';
Panel1.Parent := Form1;
Panel2 := TPanel.Create(nil);
Panel2.Name := 'Panel2';
Panel2.Parent := Panel1;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Panel1.Free ;
Panel2.Free ;
end ;


Вопрос 599: 

От: Dabadabiabo

1.Возможно ли с Виндовозной машины дозвониться по модему на Досовскую
и забрать с нее данные(или на оборот) и если да,
то какими инструментами Delphi можно воспользоваться.

2.При открытии баз данных в BDE требуется ввести пароль,
даже если база не запароленная (FoxPro, Excell).
Что за пароль нужно вводить или как можно убрать этот запрос?


Ответить.

Ответ 1:
2. TDatabase.LoginPrompt := False;


Вопрос 600: 

От: - = H u n t e r = -

Подскажите пожалуйста как в DELPHI в конфигурацию BDE-Administrator
программно в конфиге сделать изменение(в частности добавить новую)


Ответить.

Ответ 1:
Для этого есть объект TSession


Вопрос 601: 

От: Sergey Levchakov


Почему в OLE не удается вставить Acrobat reader ,выдается сообщение: Не
хватает памяти для завершени процесса.


Ответить.

Ответ 1:
Может там действительно не хватает памяти? :)


Вопрос 602: 

От: strannik

Как послать системе Win2000 сообщение о завершении работы?


Ответить.

Ответ 1:
ExitWindowsEx(EWX_REBOOT,0);

Вопрос 603: 

От: Max Burov

Есть InterBase 5.5, на нем открыта база, как из моей программы
добавить, удалить, модифицировать юзеров на сервере.
Желательно пример, а то от документаций и всевозможных книг просто
череп уже пухнет. Если можно то на мыло, так наверное, быстрее
будет.


Ответить.

Ответ 1:


Вопрос 604: 

От: Hitman

Объясните, почему при трассировке этого кода:

....
if(<бул-выражение>) then
begin
ShowMessage('Информация не обнаружена. Завершение программы.');
Application.Terminate;
end;
.....

После выполнения Application.Terminate исполнение программы
продолжается, что влечет за собой логические ошибки. И будет ли
нормальным решением следующее:

if(<бул-выражение>) then
begin
ShowMessage('Информация не обнаружена. Завершение программы.');
Application.Terminate;
while(true) do Application.ProcessMessages;
end;

Или есть более грамотные подходы к аварийному завершению программы?


Ответить.

Ответ 1:
пока не закончится выполнение функции - сообщения от
winдов не принимаются (только если у тебя все работает в однозадачном
режиме, можно использовать трэды, тогда такие проблемы возникать не
будут), поэтому надо использовать конструкцию типа:
if (bool_var) then
begin
Application.Terminate;
Application.ProcessMessages;
end;
Ответ 2:
Наиболее корректно работает - закрытие главной формы,
если это действительно аварийное завершение то -
закройте таблицы, базы данных и открытые файлы,
отключитесь от портов и всех устройств которые вы
используете, а затем напишите :

try
halt;
except
halt;
end;

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


Вопрос 605: 

От: Horreap


У меня два вопроса:

1) нужно перезагрузить машину под W2K или NT.
Пробовал exitwindows c различными параметрами ewx_reboot, ewx_force,
ewx_shutdown итд. Система только делает LogOff.
Слышал, что для перезагрузки под НТ нужно программе получить
дополнительные привелегии, даже нарыл исходник на Си, если кто может
переведите на Дельфи.

void Reboot (void)
{
HANDLE hToken;
TOKEN_PRIVILEGES* NewState;
OSVERSIONINFO OSVersionInfo;

OSVersionInfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
GetVersionEx (amp&OSVersionInfo);
if (OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
OpenProcessToken (GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES,

amp&hToken);
NewState = (TOKEN_PRIVILEGES*) malloc (sizeof
(TOKEN_PRIVILEGES) + sizeof (LUID_AND_ATTRIBUTES));
NewState->PrivilegeCount = 1;
LookupPrivilegeValue (NULL, SE_SHUTDOWN_NAME,
amp&NewState->Privileges[0].Luid);
NewState->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges (hToken, FALSE, NewState, NULL, NULL,
NULL);
free (NewState);
CloseHandle (hToken);

}

ExitWindowsEx (EWX_REBOOT, 0);
}

2) Выполняю следующий код на Дельфи:
var
t:Thandle;
begin
t:=GetWindowDC(GetDesktopWindow);
SetTextColor(t,$000000FF);
TextOut(t, 45, 45,'Test',4);

он выводит текст 'test' на десктопе. Как задать размер шрифта,
которым выводится текст?

----
Ответить.

Ответ 1:
1.
program SD;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils, Dialogs,
Messages, Classes, Graphics, Controls, Forms, StdCtrls, ExtCtrls;

var
hToken:cardinal;

function SetPrivilege(
hToken:cardinal; // token handle
Privilege:pchar; // Privilege to enable/disable
bEnablePrivilege:BOOL // TRUE to enable. FALSE to disable
):boolean;
var
tp: TOKEN_PRIVILEGES ;
TLargeInteger1: TLargeInteger;
qq,tpPrevious: TOKEN_PRIVILEGES ;
ww,cbPrevious:DWORD;
kk:word;
begin
cbPrevious:=sizeof(TOKEN_PRIVILEGES);
Result:=False;
if(Not LookupPrivilegeValue( NIL, Privilege, TLargeInteger1 )) then Exit;
// first pass. get current privilege setting
tp.PrivilegeCount:= 1;
tp.Privileges[0].LUID:= TLargeInteger1;
tp.Privileges[0].Attributes := 0;

AdjustTokenPrivileges(
hToken,
FALSE,
tp,
sizeof(TOKEN_PRIVILEGES),
tpPrevious,
cbPrevious
);

if (GetLastError <> ERROR_SUCCESS) then Exit;

// second pass. set privilege based on previous setting

tpPrevious.PrivilegeCount := 1;
tpPrevious.Privileges[0].LUID := TLargeInteger1;

if(bEnablePrivilege) then
tpPrevious.Privileges[0].Attributes:= tpPrevious.Privileges[0].Attributes or SE_PRIVILEGE_ENABLED
else
begin
tpPrevious.Privileges[0].Attributes := tpPrevious.Privileges[0].Attributes And(SE_PRIVILEGE_ENABLED xor
tpPrevious.Privileges[0].Attributes);
end;
ww:=SizeOf(qq);
AdjustTokenPrivileges(
hToken,
FALSE,
tpPrevious,
16,// cbPrevious,
qq,
ww
);
kk:=GetLastError;
if (kk <> ERROR_SUCCESS) then
begin
ShowMessage(InttoStr(kk));
Exit;
end;
Result:=True;
end;



begin

OpenProcessToken(
GetCurrentProcess,
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
hToken
);

if SetPrivilege(hToken,'SeShutdownPrivilege',True) then
if InitiateSystemShutdown(nil,nil,0,True,True) then
writeln('Shutdown Ok!');

end.


Вопрос 606: 

От: Vampir

Своей программой я хочу обрабатывать, анализировать письма (ну например,
считывать тему, от кого, искать текст в письме и т.д.). Могу ли я все
это делать через OutLookExpress, т.е. анализировать письма, которые уже
в OutLooke, или мне надо писать свою почтовую программу? Помогите
советом, пожалуйста.


Ответить.

Ответ 1:
Можешь работать через MAPI.
В Win32 :
MapiLogon
MapiReadMail
MapiSendMail

Ответ 2:
B outlook Express вы наверное ничего не сделаете -
разве что читать как-то его сохраненные файлы! Выходов
2, и для обоих надо установить в Outlook Express опцию
сохранения писем на сервере.

1) Установить Outlook но не Experess а именно Outlook,
он имеет COM интерфейс практически ко всем функциям и
делай что хочешь

2) Использовать Дельфийский компонент клиента POP3 и
написать свой почтовый специфический(только для
определенных функций клиент).

Оба варианта весьма не сложны, но первый всеж таки
предпочтительней, так как не надо кроптеть над
установками коннекта с POP сервером, и такой способ
намного менее привередлив.

Ответ 3:
Один из вариантов - использовать The BAT. У него есть система
фильтров, которая, в частности, позволяет при получении определенных
писем вызывать внешнюю программу и передавать ей в качестве параметра
файл с текстом письма со всеми заголовками.

Вопрос 607: 

От: Alexandr Chernjavski

Где мне найти по-русски подробную информацию
по
компоненте RichEdit?
В частности, как мне изменить атрибуты в определенном месте текста
(скажем,
конкретные 2-3 слова в тексте) ? Желательно на примере.


Ответить.

Ответ 1:
RichEdit.SelStart:=n;
RichEdit.SelLength:=m;
RichEdit.SelAttributes.Assign(FontDialog.Font);
Ответ 2:
Вот пример фии которую я писал когда-то давно.
Кажется она рабоатает но с глюками. Глюки эти никакого отношения не
имеют к выводу цветного текста и не помешают в понимании принципа.
Я думаю что если немного поразбираться то все станет понятно.
Удачи.RHoST.

procedure Tform1.OutWithParam(st:string;param:string);
var
i:integer;
Size,Color:integer;
begin //процедура выводит на экран заданный текст с заданными свойствами цвета и размера, причем парметры передаются в виде строки "b9" или "r4" или "g "

Size:=8;//задаем параметры по умолчанию
Color:=clBlack;//задаем параметры по умолчанию

if Trim(param)<>'' then //параметр не пустой то тогда вызываем фии экстракта цвета и размера
begin
Color:=GetColor(param);//узнаем цвет
Size:=GetSize(param);//узнаем размер
end;

i:=re1.GetTextLen; //это все добавление в Re1 строки ST
re1.SelStart:=i-2;
re1.SelLength:=2;
re1.ClearSelection;
re1.text:=re1.text+st; //вот наконец мы добавили строку

i:=re1.GetTextLen;//берем новую длину всего текста в Re1
re1.SelStart:=i-length(st); //началом выделения будет первый символ нашей строки st, а минус 2 в конце это потому что там всегда какие-то два символа

re1.SelLength:=length(st);// длина выделения это длина строки
re1.SelAttributes.Size:=Size;
re1.SelAttributes.Color:=Color;
re1.SelLength:=0;
end;


Вопрос 608: 

От: Horreap

У меня на машине стоит Outpost Firewall и когда я пытаюсь убить
процесс
OUTPOST таскмаyэджер пишет "Невозможно завершить операцию. Отказано в
доступе"
Кто нибудь знает как это реализовывается?



Ответить.

Ответ 1:
ругается сервис Outpost Firewall Service. Останови сначала его.





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

Для интересующихся - немного о себе. Работаю на
железнодорожном транспорте ведущим программистом.
Основные мои разработки - это сбор и доставка клиентам
информации о вагонах и поездах: где находится(по России),
куда едет. В связи с этим программировал для e-mail,Socket,БД,ISAPI.

За сим прощаюсь - скорых Вам и качественных программ.

Автор рассылки - Дмитрий.
ICQ - 89533941.

ВСЕ ВОПРОСЫ СПРОСИТЬ ПРЕДЛОЖИТЬ АРХИВЫ СКОЛЬКО НАС



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное