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

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

  Все выпуски  

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


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

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


Не пятница :) ,
но 13 -е :(( .


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


Доброго Вам времени суток уважаемый читатель.

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



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


Вопрос 586: 

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


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

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


Ответить.

Ответ 1:


Вопрос 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:


Вопрос 588: 

От: Serge V. Frolov

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


Ответить.

Ответ 1:


Вопрос 589: 

От: Bogdan Duchnitch

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


Ответить.

Ответ 1:


Вопрос 590: 

От: МР

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


Ответить.

Ответ 1:


Вопрос 591: 

От: michail_a

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


Ответить.

Ответ 1:


Вопрос 592: 

От: Dmitry Patrakov

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


Ответить.

Ответ 1:


Вопрос 593: 

От: Comp_otdel

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


Ответить.

Ответ 1:


Вопрос 594: 

От: Макс-911

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


Ответить.

Ответ 1:


Вопрос 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:


Вопрос 597: 

От: oleg

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


Ответить.

Ответ 1:


Вопрос 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:


Вопрос 599: 

От: Dabadabiabo

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

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


Ответить.

Ответ 1:


Вопрос 600: 

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

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


Ответить.

Ответ 1:


Вопрос 601: 

От: Sergey Levchakov


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


Ответить.

Ответ 1:


Вопрос 602: 

От: strannik

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


Ответить.

Ответ 1:


Вопрос 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:


Вопрос 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:


Вопрос 606: 

От: Vampir

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


Ответить.

Ответ 1:


Вопрос 607: 

От: Alexandr Chernjavski

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


Ответить.

Ответ 1:


Вопрос 608: 

От: Horreap

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



Ответить.

Ответ 1:





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


Вопрос 575: 

От: Виктор Афанасьев

Создаю подобие справочной системы. Использую InterBase как СУБД и
TWebBrowser как основной компонент представления информации. Чтобы не
мучиться со вставкой в HTML графики и других объектов планирую
использовать
MIME формат и хранить полностью весь документ в базе данных. Но есть
проблема: при загрузке документа из потока (TMemoryStream) в WB
отображается
его исходный HTML код а не вид документа как он должен быть. Приходится
предварительно сохранять документ во временный файл на диске а только
потом
загружать в WB. Но это далеко не лучший выход. В чем проблема понять не
могу
Если есть варианты был бы очень благодарен.



Ответить.

Ответ 1:
Response.ContentType := 'text/html';

Вопрос 576: 

От: kovchan

Не подскажите, как вытащить информацию из имеющегося метафайла (*.wmf)?
Допустим, это рисунок прямоугольника. Как узнать координаты его узлов?
Вопрос, наверное, не совсем по Дельфи, но тем не менее.



Ответить.

Ответ 1:
Посмотрите WinAPI EnumMetaFile


Вопрос 577: 

От: LYNX

Как использовать функцию сохранения и открытия в один файл, т.е. как в
записной книжке несколько записей в одном файле?


Ответить.

Ответ 1:
Делаешь файл записей и пишешь и читаешь любую:

type TR=Record
Name:string[100];
Age:Byte;
Income:Real;
end;
var f:file of TR;
r:TR;

begin
//assign file
assignFile(f, 'MyFileName');
//open file
if FileExists('MyFileName') then
reset(f)
else
rewrite(f);
//чтение 10й записи
seek(f,10);
read(f,r);
//запись 20й записи
seek(f, 20);
write(f,r);
closefile(f);
end;


Вопрос 578: 

От: Andrew

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


Ответить.

Ответ 1:
if not ExitWindowsEx(EWX_Force or EWX_PowerOff or EWX_ShutDown, 0) then
MessageBox(0, 'An application refused to terminate', 'Win32', MB_OK);
end;
Ответ 2:
А по моему надо в NT еще и права получить соответствующие.
Ответ 3:
Вот процедурка, может поможет )))))))

procedure RebootSystem;
var
handle_: THandle;
n: DWORD;
luid: TLargeInteger;
priv: TOKEN_PRIVILEGES;
ver: TOSVERSIONINFO;
begin
ver.dwOSVersionInfoSize := Sizeof(ver);
GetVersionEx(ver);
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, handle_) then
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then begin
priv.PrivilegeCount := 1;
priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
priv.Privileges[0].Luid := luid;
AdjustTokenPrivileges(handle_, false, priv, 0, nil, n);
end else ShowMessage('Ошибка '+ IntToStr(GetLastError))
else ShowMessage('Ошибка '+ IntToStr(GetLastError));
end else ShowMessage('Ошибка '+ IntToStr(GetLastError));
// if not ExitWindowsEx(EWX_SHUTDOWN,1)
if not ExitWindowsEx(EWX_POWEROFF,1)
then ShowMessage('Ошибка '+ IntToStr(GetLastError));
end;


Вопрос 579: 

От: NEN

Уважаемые кодеры, помогите в решении задачи: как прочесть кусок памяти
за пределами своей проги в NT (именно) виндах. Любые попытки
заканчиваются Нарушением доступа. ReadProcessMemory - НЕРАБОТАЕТ воще
(в НТ).


Ответить.

Ответ 1:


Вопрос 580: 

От: luba

Как заставить DBGrid сортировать данные по щелчку на заголовке столбца?


Ответить.

Ответ 1:
Надо обрабатывать событие OnTitleClick,
а там проставлять IndexFieldNames = Column.FieldName,
Column туда передается...
Ответ 2:
Grid-у нужно дбавить событие OnTitleClick:

procedure TfmParent.GridTitleClick(Column: TColumn);
var
id: Variant;
begin
{в id записываю значение текущей строчки}
id:=TADODataSet(Column.Field.DataSet).Fields[0].Value;

if TADODataSet(Column.Field.DataSet).Sort<>(Column.FieldName +' ASC') then
TADODataSet(Column.Field.DataSet).Sort := Column.FieldName +' ASC'
else TADODataSet(Column.Field.DataSet).Sort := Column.FieldName +' DESC';
{восстанавливаю "текущую" строку}
TADODataSet(Column.Field.DataSet).Locate(TADODataSet(Column.Field.DataSet).Fields[0].FieldName,id,[]);
end;
Ответ 3:
Используй пакет Info Power 2000, там есть такой DBGrid, намного мощней
стандартного.
Ответ 4:
Для сортировки строк в Grid-е динамически создается индекс (можно завести и статические). Однако все это годится, если НД - TClientDataSet.

Возможно использование индексов и для TTable.

procedure TForm.Grid1TitleClick(Column: TColumn);
begin
with dm.ClientDataSet1 do begin
Filtered := false;
IndexName := '';
IndexDefs.Clear;
IndexDefs.Add('i'+Column.FieldName,Column.FieldName,[]);
IndexName := 'i'+Column.FieldName;
Filtered := true;
end;
end;


Вопрос 581: 

От: Sir Antony


Нужно позвонить модемом на номер, убедиться, что трубку сняли,
проиграть звуковой файл в телефонную линию (система оповещения), потом
положить трубку, и позвонить по другому номеру... until end :)

Дык вот не подскажите ли как мне проиграть файл через модем в
телефонную сеть. Есть ли у кого исходники отдельных частей или полной
задачи - очень прошу, выручите пожалуйста. Буду рад любой информации.
За доку и линки тоже заранее спасибо.

Оборудование Voice WinModem. Если это упирается в какие-либо параметры
системы мне тоже нужно знать.


Ответить.

Ответ 1:


Вопрос 582: 

От: -= MTsv =-


У меня вопрос:
Как по нажатию кнопки "ВЛЕЗТЬ" в контекстное меню всех файлов
(только файлов, каталоги не нужны) ???
Т.е. на любом файле жмешь правую кнопку и там в меню
"Запустить MyProg.exe"


Ответить.

Ответ 1:


Вопрос 583: 

От: Andy

Уважаемые программисты, не подскажете в чем ошибка?
Вот пример кода
DataModule2.Table1.Filter:=
'Bithday>'+DateToStr(DateTimePicker1.date)+'AND Bithday<'
+DateToStr(DateTimePicker2.date);
DataModule2.Table1.Filtered:=true;
Пишет ошибку "Invalid filter expression character '.'"


Ответить.

Ответ 1:
'DataModule2.Table1.Filter:=

'Bithday>"'+DateToStr(DateTimePicker1.date)+'" and Bithday<"'
^
+DateToStr(DateTimePicker2.date)+'"';

DataModule2.Table1.Filtered:=true;

Перед and поставь пробел. И даты заключи в кавычки
А то получится примерно такое
Filter := 'Bithday>10.10.1980AND Bithday<20.11.1985'
а надо
Filter := 'Bithday>"10.10.1980" and Bithday<"20.11.1985"'
и е еще - правильнее Birthday :)
Ответ 2:
Возможно, что DateToStr предоставляет строку в виде 01.01.2001, а
фильтру это не нравится, попробуй так

DataModule2.Table1.Filter:='Bithday>'+FormatDateTime('dd/mm/yyyy', DateTimePicker1.date)
+'AND Bithday<'+FormatDateTime('dd/mm/yyyy', DateTimePicker1.date);

или если не поможет, то так:

DataModule2.Table1.Filter:='Bithday> "'+FormatDateTime('dd/mm/yyyy', DateTimePicker1.date)
+'" and Bithday< "'+FormatDateTime('dd/mm/yyyy',
DateTimePicker1.date)+'"';


Вопрос 584: 

От: Gavrilenko


Посоветуйте, как программно определить наличие индексов в DBF таблицах



Ответить.

Ответ 1:
1. Можно проверить наличие индексного файла ,если он строился, там же где и
dbf-файл
лежит
Если например кол-во имя.* в каталоге больше 1 (например) ,то есть ключ,
или индекс или
еще что-то :}}}}

2. Если открыть DBF-файл как бинарник,то определенный код в определенном
месте
говорит о том,что присутствует ключ или индекс

3. Предположу ( сам работаю на VFP, с DELPHI начал разбираться
недавно),что когда
работаешь с ADO или BDE информацию об индексе можно получить
автоматом
Ответ 2:
if Table1.IndexDefs.Count > 0 then {Индексы есть .. }
Вообще, рекомендую посмотреть свойства Table1.IndexDefs. ...
Ответ 3:
var tl:TStringList;

begin

 with tl.Create do begin

 Table1.GetIndexNames(tl);

//в tl √ список индексов (должно по идее работать для всех платформ а не только для DBF)

Free;

end;

end;
Ответ 4:
Судя по типу таблиц, DBF, вы имеете ввиду таблицы (Visual) FoxPro.
Если это так то есть вариант (видимо не самый лучший и красивый)
попытаться определить наличие индексного файла, поскольку сами индексы в таблицах
не содержаться.
.CDX - структурный индексный файл, имеет то же имя, что и таблица и содержит
"все" определенные для таблицы индексы; должен открываться автоматически
с открытием таблицы.
.IDX - файл одиночного индекса таблицы, имеет тоже имя, что и таблица, если явно не задано другое.


Вопрос 585: 

От: Зайцев Александр

Есть база данных в Btrieve.
Существуют ли компоненты для прямой работы с Btrieve в Delphi?
И если их нет , то где найти драйвера для BDE или ODBC?
Версия Btrieve 6.15


Ответить.

Ответ 1:



****************************





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

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

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

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

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



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

В избранное