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

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

  Все выпуски  

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


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

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


Сколько веревочке не виться,
а... грачи все равно улетели...


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


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

А у нас пожары страшные и кругом дым - через 100м дома не видно.


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




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


Вопрос 485:

От: Sasha_300

БОЛЬШАЯ ПРОСЬБА помогите разобраться с тем как можно
корректно
удалять  и вставлять записи в связанные таблицы. У меня две
Access-овских таблицы, со связь Master-Detail по одному полю,
подключенных с помощью ADO-технологии. С помощью команды Delete я
отчищаю сначала подчиненную таблицу, потом удаляю запись в основной,
все замечательно удаляется, но при обновлении данных выпадает
сообщение типа: OleException: A given Hrow referred to a hard or soft
deleted row.
и дальше работа моей программы не идет. Подскажите пожайлуста, что
мне с ней сделать. Ну очень нужно, а в книгах не нашел, сам пишу
недавно.


Ответить.

Ответ 1:


Вопрос 486:

От: Копытин Павел

Как на SQL Server создать клиент-серверное приложение со следующим
свойством:
При изменении данных одним клиентом у других изменение сразу
отображается на экране?


Ответить.

Ответ 1:


Вопрос 487:

От: _

Есть программа, которая заполняет готовый бланк. Вывод на печать
осуществляется через TPrinter.Canvas. Есть ли возможность при выводе на
матричный принтер использовать не Windows-шрифты, а встроенные шрифты
принтера. Необходимо очень точное задание места печати.


Ответить.

Ответ 1:


Вопрос 488:

От: Dabadabiabo


Пдскажите, можно ли в StringGrid
установить выравнивание строк в ячейках


Ответить.

Ответ 1:


Вопрос 489:

От: Олег Гончаренко

Моя программа ведет складской учет......
А теперь требуется чтобы она, начала работать с
кассовым аппаратом. Например со склада проданы
материалы и помимо складского учета эти операции
нужно провести через КА... Может кто сталкивался
с применением КА или подскажет где чего почитать
или взять? Буду признателен за подробный пример...


Ответить.

Ответ 1:


Вопрос 490:

От: Алексей Малиновский

Почему-то не стала грузится Delphi 5.0. При загрузке компьютер виснет,
причём причина в загрузке библиотек визуальных компонентов: LMD Tools и
TRITON 2000, т.к. когда их отключаешь при загрузке всё грузится отлично.
Раньше всё было нормально, эти библиотеки грузились и всё было в
порядке. А что сейчас случилось не пойму, потерял весь день для
выяснения причины, но так ничего существенного не нашёл.


Ответить.

Ответ 1:


Вопрос 491:

От: Алексей Малиновский


Подскажите как вставить целую строчку, где данные разделены каким-то
разделителем в готовую таблицу WORD (это мне необходимо для ускорения
посторения отчётов в Word, все отчёты строятся по шаблонам). Говорят
есть какая-то процедура типа TextToTable, но как с ней работать и как её
вызвать я не знаю.

Примечание: я использую компонент TWordApplication. Пробовал так
WordApp.Selection.TypeText(Text);
WordApp.Selection.ConvertToTable(...) но здесь ничего хорошего не
происходит


Ответить.

Ответ 1:


Вопрос 492:

От: ILYA

У меня есть проблема.Поменять картинку во
время работы в Windows,подскажите
как это сделать, желательно с примером.


Ответить.

Ответ 1:


Вопрос 493:

От: Dmitry Podolkhov


У меня есть программа - одна главная форма
и три дочерние (похоже на Photoshop).
Все дочерние StayOnTop. Но любое из них должно иметь возможность
быть нормальным перекрывающимся окном.
Для переключения можно использовать:
1) свойство FormStyle. Но окно при этом пропадет, затем рисуется снова -
некрасиво.
2) функцию SetWindowPos. Все работает красиво. Форма становится какой
надо,
НО
 ПОЧЕМУ-ТО если все дочерние окна StayOnTop и какое-то одно из них
делается
обычным, то таким-же обычным (не StayOnTop) становятся ВСЕ!!! дочерние
окна.
Handle в SetWindowPos пишу конкретного дочернего окна, однако - глюк.


Ответить.

Ответ 1:


Вопрос 494:

От: Hitman

1. Проблема передачи голосовых (звуковых) данных через (скорее в) модем.
2. Как она решается с точки зрения Delphi.
Буду рад ссылкам и документации.


Ответить.

Ответ 1:


Вопрос 495:

От: Ignat Cherepanoff aka goodenemy


создаю безFORMенное приложение (не консольное!), т.е. с одним
DPR-файлом.

выглядит примерно так:

program myprog;

uses
 Windows,
 SysUtils,
 Classes,
 Graphics,
 Forms,
 jpeg;

{$R *.RES}

procedure main;

begin
try
  while not Application.Terminated do
  begin
    Application.ProcessMessages;
    {что-то выполняю}
    sleep(1000);
  end;
finally
end;
end;


begin
 Application.Initialize;
 Application.Run;
 main;
end


так вот, проги не видно, дело она свое делает, но:
1. очень сильно тормозит систему в период SLeep
2. при ShutDown'е система ожидает ее окончания, а затем только
"убивает"
3. при CTRL-ALT-DEL прога видна и при попытке ее прервать
система через некоторое время вываливает сообщение о повисшей задаче с
кнопкой "насильственного убийства".

Вопрос │1 - как заставить программу реагировать на закрытие без
проблем?

Вопрос │2 - как уменьшить нагрузку на процессор в период SLEEP (или
чем заменить этот SLEEP)?

Вопрос │3 - как убрать процесс из списка по CTRL-ALT-DEL?


Ответить.

Ответ 1:


Вопрос 496:

От: ШО МКТУ

Хочу использовать SQL Server 7.0, но возникает множество глюков.
Например:
Поле аналогичное Autoincrement есть, но при добавлении в таблицу новой
записи в ентом поле автономер не генерируется.


Ответить.

Ответ 1:


Вопрос 497:

От: vas

Как мне узнать в программе что другой пользователь редактирует запись
в таблице Парадокс ?


Ответить.

Ответ 1:


Вопрос 498:

От: Усатов Константин

Скажите,  пожалуйста,  как  принимать  и  отправлять
системные/WinPopup сообщения (которые под Windows NT/2000
посылаются командой net send) ? Желательно привести пример,
желательно на Delphi.


Ответить.

Ответ 1:


Вопрос 499:

От: Ольга

Я использую таблицы PARADOX в сети и проблема в том,
что очень часто портятся индексы. Отчего это происходит и можно ли
этого как то избежать?
И еще вопрос: как печатать на рулонной бумаге,
чтобы в конце документа принтер не проматывал бумагу до конца листа.
Для формирования отчетов я использую QuickReport,
принтер матричный FX-1170,
операционная система Windows 2000 и Windows NT4.
P.S. в Windows 98 этого удалось добиться.


Ответить.

Ответ 1:


Вопрос 500:

От: Vladimir Vladimirov

Уже несколько лет мы используем RxLib. Последняя версия - 2.75.
Никаких сведений о RxLib для Delphi 6 в интернете не нашли,
www.rxlib.com отсутствует. Что известно о версии RxLib для Delphi 6 ?
Или придется адаптировать RxLib самостоятельно ?


Ответить.

Ответ 1:


Вопрос 501:

Вопрос:
От: Алексей Малиновский


У меня есть два вопроса по InterBase:
1) Обязательно ли загружать, перед выполнением своей программы,
ibGuard.exe или ibServer.exe и чем вообще эти два файла отличаются
(функции то они выполняют одни и те же)?
2) Можно ли как-нибудь убрать иконку из нижнего правого угла экрана, (в
индикаторной области) обозначающей InterBase сервер?


Ответить.

Ответ 1:


Вопрос 502:

От: dipper

возможно ли в dbGrid произвести подсчет
промежуточных итогов? Например: есть таблица на 2-а поля. В 1-м некие
коды, во 2-м числа (просто числа)
код   число
1000 итог по коду 1001,1002
1001 1
1002 2
2000 итог по 2100,2200
2100 итог по 2101,2102
2101 3
2102 4
2200 итог по 2201,2202
...


Ответить.

Ответ 1:


Вопрос 503:

От: Stark

    Уважаемые эксперты,
    1) Программирование TCP-IP. Как?
    2) Как в Delphi 5 провести опрос широковещательного канала
      UDP. По сути надо написать небольной сниффер.
    3) Киньте в меня ссылками на статьи и/или примеры для этих
    задач.


Ответить.

Ответ 1:


Вопрос 504:

От: Алексей Малиновский

Делаю программу с удалённым сервером InterBase. Связь идёт между
городами, т.е. в одном городе стоит сервер, а с другого города надо
иметь доступ к серверу через телефонную линию.
Как сделать так чтобы клиент дозванивался до сервера и тот отвечал ему и
соединялся с ним, т.е. какие компоненты, технологии, укажите направление
в котором мне следует исследовать Delphi?


Ответить.

Ответ 1:


Вопрос 505:

От: Кабанов Артур Александрович

После установки Delphi 6 при компиляции старого проекта выдал сообщение
"Undeclared identifier: Null"
if (DataSet['Cena']<>Null) and (DataSet['Kol_Upk']<>Null) then

DataSet['Cen_Edn']:=Round(DataSet['Cena']/DataSet['Kol_Upk']*100)/100;


Ответить.

Ответ 1:
Нужно так:

if (not (VarType(DataSet['Cena'])  in [varNull])) and
  (not (VarType(DataSet['Kol_Upk']) in [varNull])) then



Вопрос 506:

От: Вертянкин Алексей

Что может заставить отреагировать прогу на нажатие кнопок
со стрелками(вверх, вниз, лево-право).?
В Паскале можно было анализировать с помощью readkey а потом
с помощью Chr нажатия на эти кнопки.
Если поставить на событие OnKeyPress формы
(предварительно включив для нее KeyPreview в истину) какой либо
обработчик, то он реагирует на почти все кнопки кроме нужных кнопок
управления, и еще кроме кнопок Insert, Del, Page-UP-Down etc.
Может я что то делаю кардинально не так? Что заставит реагировать на
нажатия?



Ответить.

Ответ 1:


Вопрос 507:

От: Alex Gross

Модем Zyxel U1496 набирает номер под D5 с AsincPro, к
модему подключен телефонный аппарат.
Как сделать так, чтобы после ответа абонента человек
мог говорить по телефону? Модем можно выключить и
тогда говорить, а вот КАК ОБОЙТИСЬ БЕЗ ВЫКЛЮЧЕНИЯ
МОДЕМА?


Ответить.

Ответ 1:




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


Вопрос 391:

От: Shark

В текстовом файле, который обрабатывает программа, неоднократно
встречается признак конца файла (как этот файл создавался никто и
понятия не имеет), и как следствие если читать файл while not (eof), то
он будет прочитан до первого встреченного символа конца файла :(.

Как прочитать весь файл?



Ответить.

Ответ 1:
Перепишем ваш файл a.dat в файл b.dat, удалив признаки конца файла:

var
  f1,f2 :file of Byte;
  a :Byte;
  i :Longint;
begin
  {$I-}
  AssignFile(f1, 'a.dat');
  AssignFile(f2, 'b.dat');
  Reset(f1);
  Rewrite(f2);
  for i := 1 to FileSize(f1) do
  begin
     Read(f1, a);
     if a <> 26 then Write(f2, a);
  end;
  CloseFile(f1);
  CloseFile(f2);
end.
Ответ 2:
Используйте TFileStream.


Вопрос 392:

От: sasa@hawk1.marka.net.ua

как создать надстройку для Word 97 c расширением .WLL,
что бы в итоге к основному меню Word 97 было добавлено
мое меню. Похоже на то как делают программы переводчики,
например Рута 3.01


Ответить.

Ответ 1:
Надстройки под Word легче писать на ВизуалБейсик, язык макросов. Попробуй разобраться, запускаешь запись макроса, записываешь, а
потом смотриш, что программа автоматически зделала, немного модернизируешь, да и хелпа там по руски.



Вопрос 393:

От: Oleg Semiglazov

Подскажите пожалуйста, где можно найти описание и
примеры использования компонента TreeView? Помогите учащему Делфи,
плиз! :))


Ответить.

Ответ 1:
Эта собственно не компонента, а реализация
стандартного виндового класса TreeView... Етественно,
что если тебя интересует дока по ней, то смотри на
microsoft, если не лень разобраться самому... вся
delphi`йная библиотека в исходниках...


Вопрос 394:

От: Шкода Сергей Иванович

Вот возникли некоторые трудности в Дельфях:
Имеется база Exampl.dbf (dBase IV)
 Tip Name
 1  aaa
 2  bbb
 1  ccc
 1  ddd
 2  eee
Нужно создать отчет (QReport) следующего вида:
 1
aaa
ccc
ddd
 2
bbb
eee
Далаю я так:
1. Создаю SQL1 (select distinct tip from exampl order by tip)
2. Создаю DataSource (DS1.DataSet = SQL1)
3. Создаю SQL2 (select * from exampl where tip=:tip
        SQL2.datasource = DS1)
При просмотре (PreView) отчет такой как нужен,
в программе выдает ошибку "SQL1 поле TIP не найдено"
В чем проблема.


Ответить.

Ответ 1:
Возмлжно Вы просто не передаете параметр tip в SQL2
Ответ 2:
попробуй "select distinct tip as tip from....
Ответ 3:
А к чему такой гимор, собственно?... :-). Всё гараздо
проще... Один SQL, вот такой "SELECT * FROM Exampl
OREDR BY Tip". В QR ставишь группу (QRGroup) и в
выражении группировки пишешь Tip. На QRGroup кладёшь
QRDBText (поле Tip), добавляешь QRBand (типа Detale),
на него QRDBText (поле Name) и закрываешь группу
QRBand`ом нулевой высоты (закрыть группу, значит в
property QRGroup.FoterBand указать band, который
есть "подвал" группы).

Теперь, собственно попробую понять почему глюки...
вероятнее всего ты не в том месте проги делаешь
SQL1.Open или SQL2.Open;
Ответ 4:
1. Активный индекс по полю TIP
2. В отчете кроме всех прочих бандов добавить банд типа TQRGroup и
обычный банд TQRBand
3. В свойстве TQRGroup.Expression укажи поле Exampl.TIP, а в свойстве
TQRGroup.FooterBand имя простого банда из п.2

Детальный банд будет между двумя новыми, посмотри, что вышло.


Вопрос 395:

От: Ivan

Почему программы, написанные БЕЗ формы грузятся по меньшей мере 10
секунд,
даже если размер таковой не превышает 12 kb? Можно ли как-нибудь
"убыстрить"
программу? И старый вопрос: не знаю, может этот вопрос Вам покажется
простым
, но всё-таки: почему при работе с TButton на моей форме я могу поменять
её
регион, на эллипс например, но не могу поменять регион кнопки в винде,
зная
про неё всё(регион, width, handle и т.д.).



Ответить.

Ответ 1:


Вопрос 396:

От: ivc_dima

выполняю команду
MySheet.Cells.Item[11].CopyFromRecordset(ADODataSet1.recordset,EmptyPara
m,EmptyParam);

Под 2000 офисом работает нормально. Под 97 выдает Error:"Интерфейс не
поддерживается". В чем проблема? Помогите пожалуйста. А то ручками
выводить таблицу очень долго по времени.


Ответить.

Ответ 1:
Ответ прост и сложен одновременно.
прост: В 97 оффисе нет данной команды в таком виде, вот она и ругается.
сложен: нужно найти соответствующую команду поддерживаемую 97 оффисом.
и в соответствии в версией оффиса использовать ту или иную команду.
Ответ 2:
Нужно было при создании проекта импортировать библиотеку типов
(*.tlb) от 97-го офиса, а не от 2000-го. Тогда бы работало под любым
из: 97, 2000, XP.
Ответ 3:


Вопрос 397:

От: Нестеренко Кирилл


Открываю исходник а мне фигню пишут:
Error creating form: Invalid stream format.
Что делать подскажите...


Ответить.

Ответ 1:
Скорее всего поврежден файл ресурса формы *.dfm
Ответ 2:
Наверное, ты открываешь проект, написанный в более
поздней версии Дельфи. Проекты совместимы снизу вверх
(Дельфи 5 открывает проект Дельфи 4, но не наоборот).
Ответ 3:
Открываем *.dfm файл на просмотр в каком нибудь текстовом редакторе.
Например пользуясь Far-manager. Если там содержится описание формы в
виде текста, что-то вроде такого:

object frmOborVed: TfrmOborVed
 Left = 238
 Top = 200
 ActiveControl = cbDepart
 BorderIcons = [biSystemMenu]
 Borderstyle="bsDialog"
............... и т.д.

то переименовываем этот файл изменяя его раширение на *.txt

и конвертируем его в DFM-формат:

c:\MyProject\convert.exe somefile.txt somefile.dfm

Утилита convert.exe находится в подкаталоге BIN каталога установки
Delphi (по умолчанию c:\program files\borland\delphi5\bin\convert.exe)

Если не помогло, значит файл разрушен и восстановить его скорее всего
не получится.
Ответ 4:
Переменуй *.pas в *.txt потом открой новый проект и вставь из буфера.


Вопрос 398:

От: Врублевский Евгений Геннадьевич

Как сделать форму, которая бы отображалась на фоне рабочего
стола? Не откажусь и от версии на C++, но лучше на Delphi.


Ответить.

Ответ 1:


Вопрос 399:

От: xaoz

Вопрос такой, кто знает как работать с TField.DefaultExpression?
Ведь очень хорошая штука, а в процессе выполнения программы не работает.
Приходится открывать, и закрывать таблицу, а это согласитесь долго. И
еще
заметил глюк, TField.DefaultExpression с датой не хочет работать в
WinME, тоже
самое пишешь в Win98 все Ok. Буду благодарен любым ответам и
предложениям как
сделать красиво без или надеюсь с TField.DefaultExpression.



Ответить.

Ответ 1:


Вопрос 400:

От: Ivan


    У меня такой вопрос(серьёзный): можно ли, написав свою функцию,
которая
представляет обычный цикл, каким-либо образом подключить её к delphi(
может
быть записать её в windows.pas или куда нибудь в иное место) и вызывать
её
как функцию без параметров, но только у себя разумеется.
    Например(пример без формы).

program aCOOLa1_54;
uses
 Windows, Messages;
var......;
function......!ЗДЕСЬ я хочу создать и назвать функцию!
begin
......
end.

    Надеюсь идея понятна. Моя функция, которую я хотел бы сделать,
состоит из
цикла, из которого нельзя выйти в запущенном состоянии, кроме как по
ctrl+alt+delete. Т.е. ничего сверхъестественного там не происходит.
    Одним словом как сделать и подключить функцию к delphi (!!! для
уменьшения
кода в программе, не использующей форму!!!)


Ответить.

Ответ 1:
Напиши DLL. И подключай ее где угодно.
Ответ 2:
Создайте модуль. Опишите в нем свою функция. Даллее в любой программе
можно подключить этот модуль командой uses UnitName;


Вопрос 401:

От: fade

В Паскале была функция readkey, которая опредеяла нажатую клавишу.
Есть ли какойто ее аналог в делфи?


Ответить.

Ответ 1:
В Дельфи есть виртуальные коды. Поищи в хелпе на слово virtual,
а используется это при обработке события OnKeyDown.

И сделать как в Паскале ты не сможешь, т.к. Дельфи сам не опрашивает
клавиатуру, а получает сообщения (Messages) от Виндов. Если сможешь
разобраться, то сделай такое событие и такое сообщение, но это уже
самостоятельно. Можешь посмотреть исходный код у компонентов, которые это делают.
Ответ 2:
Ну.... а события OnKeyPress не достаточно? Вот пример проги для определения ASCII кодов:
unit Unit1;

interface

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

type
 Tfm = class(TForm)
  ListBox1: TListBox;
  Panel1: TPanel;
  procedure ListBox1KeyPress(Sender: TObject; var Key: Char);
 private
  { Private declarations }
 public
  { Public declarations }
 end;

var
 fm: Tfm;

implementation

{$R *.DFM}

procedure Tfm.ListBox1KeyPress(Sender: TObject; var Key: Char);
begin
//
ListBox1.Items.Add(key+' = '+IntToStr(ord(key)));
end;

end.


Вопрос 402:

От: Andrei

У меня вопрос как в Delphi5 отключить мышь и клавиатуру во
всём Windows, (но только чтобы потом можно их включить)?
Говорят, что можно это сделать с помощью Windows API, но я не знаю как
пользоваться Windows API. Если вам не трудно расскажите, как вызывать
функции Windows API и где можно достать описания этих функции
(желательно на
русском языке).


Ответить.

Ответ 1:
Интересно как ты клаву и мышь потом включишь? :))) А с WinApi делай так:
-Установи у себя весь хелп (к дельфям), обязательно Ms SDK Help Files
-В группе Borland Delphi X -> HELP -> Ms SDK Help Files и найдёшь оприсание WIN API...
Ответ 2:
procedure BlockInput(ABlockInput : boolean); stdcall; external 'USER32.DLL';


Вопрос 403:

От: Сергей Красовский

Каков комплект поставки CORBA клиента? То есть какие dll надо поставлять
с исполняемым файлом?


Ответить.

Ответ 1:


Вопрос 404:

От: Karpova Elena

Хотелось бы по двойному щелчку на имени файла в компоненте FileListBox
иметь возможность автоматически открыть его в нужном приложении, как мы
делаем это в любом из коммандеров(Norton, Windows). Насколько реально
это осуществить? И, если не совсем утопично, то как?

Ответить.

Ответ 1:
Вовсе это не утопия.

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
  FileListBox1: TFileListBox;
  DriveComboBox1: TDriveComboBox;
  DirectoryListBox1: TDirectoryListBox;
  Label1: TLabel;
  procedure FileListBox1DblClick(Sender: TObject);
 private
  { Private declarations }
 public
  { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FileListBox1DblClick(Sender: TObject);
begin
 ShellExecute(Application.Handle, 'open', PChar(FileListBox1.FileName), nil, nil, SW_RESTORE)
end;

end.
Ответ 2:
Вполне реально. Создайте обработчик события OnDblClick для FileListBox и в зависимости от типа файла запустите то или иное приложение функцией
ShellExecute. Например:

procedure TForm1.FileListBoxDblClick(Sender: TObject);
begin
   if Pos(FileListBox.FileName, '.doc') > 0 then
    ShellExecute(Handle, 'open'#0, 'd:\Office\winword.exe'#0, PChar(FileListBox.FileName), 'd:\Office''#0, sw_Show); // запустили документ Word
end;
Замечу, что файлы-документы, привязанные к определенным приложениям, могут запускаться ShellExecute таким способом
    ShellExecute(Handle, 'open'#0, PChar(FileListBox.FileName), NULL, sw_Show); // запустили документ Word

---


Вопрос 405:

От: Ефремов Александр


как
убрать программу из Alt+Ctrl+Del. Как убрать все окно Alt+Ctrl+Del я
знаю, но это все же не то ! Наверно программу надо присоединить к какому
нибудь процессу, уже запущенному в системе, но как это сделать ? У меня
нет документации по WinAPI, скоро меня это окончательно доканает. Может
кто-нибудь (если его конечно не затруднит) приведет несколько примеров
работы с ПРОЦЕССАМИ с описанием параметров функций - я буду очень
благодарен. Помогите пожалуйста !



Ответить.

Ответ 1:
Нужно сказать системе, что процесс приложения является 'ServiceProcess'
Windows не отображает такие процессы как например, службу печати на
принтере и другие.
Нужно изменять исходник самого проекта .dpr
Работает в Win 95/98.

var
 RegProcess : function(p1,p2:integer):integer;stdcall;
 hDllKernel : HINST;

begin
 hDllKernel:=LoadLibrary('kernel32.dll');
 RegProcess:=GetProcAddress(hDllKernel,'RegisterServiceProcess');
 RegProcess(0,1);

 Application.Initialize;
 Application.CreateForm(TfmMain, fmMain);
 Application.Run;
end.
Ответ 2:
Можно так:
................................
implementation
...
procedure RegisterServiceProcess; external 'kernel32.dll' name
'RegisterServiceProcess';

procedure HideProcess; assembler;
 asm
  push 1
  push 0
  call RegisterServiceProcess;
 end;
// Затем вызываем где-нибудь HideProcess;
...............................
А можно и так:
..............................
interface
...
const
  procedure RegisterServiceProcess(p1 : Word; p2 : DWord); stdcall;
...
implementation
...
procedure RegisterServiceProcess; external 'kernel32.dll' name
'RegisterServiceProcess';
// Далее - вызов:
 RegisterServiceProcess(0, 1); // скрыть
 RegisterServiceProcess(0, 0); // Un-скрыть :)


Вопрос 406:

От: Zelenin_ve@mail.ru

Скачал давеча FIB Plus для Делфей, утановил вроде все работает, но
есть одна проблема. В компонентах, которые я использовал до этого, для
создания исочиков данных использовались свойства MasterSource и
MasterFiels в FIB Plus есть свойство DataSource которое позволяет
связывать источники, но я не нашел свойсва которое указывает на поле
по которому происходит связь. К тому же в FIB очень много свойств
которых нет в стандартных компанентах для работы с InterBase не
подскажите где можно взять FAQ или Help на русском языке по FIB PLUS.
Если у кого есть то мыльните пожалуйста на GreenPeace@mail.kz :



Ответить.

Ответ 1:
www.delphipages.com
www.torry.net


Вопрос 407:

От: Oleg Martynov

Не могли бы вы просветить меня по следующему поводу:
В Windows с установленным IE 4.0 и выше существует компонент Microsoft
Windows Common Controls, файл MSCOMCTL.OCX. В нём OCX элементы
управления, в
частности, StatusBar. StatusBar весьма неплох, поддерживает вывод даты,
времени, состояния клавиш (Ins, Caps, Scroll, Num) и всё прочее, что
полагается строке состояния - есть смысл воспользоваться именно им, а не
городить что-то своё (или чужое:-). Проблема в следующем. Внизу слева
этого
бара должна рисоваться "цеплялка" SizeGrip для изменения размера окна (в
стандартом компоненте Delphi TStatusBar - свойство SizeGrip). У OCX
элемента
подобного свойства нет! Как я понял из документации, SizeGrip должен
появиться автоматически. В Visual Basic всё работает именно так, как
описано. При попытке импорта в Delphi или C++ Builder Grip не
появляется. Та
же картина при попытке воспользоваться им в Visual C++ и в ActiveX
Control
Test Container. В MSDN ничего найти не удалось - возможно, плохо искал.
Но
старался.
Буду благодарен за ваши соображения - в чём проблема? Что за
особенность
работы с этим ОСХ у Visual Basic? Знатоки OCX, подскажите, где (про что)
прочитать (желателько в MSDN или документации)? А может, что-то совсем
простое?



Ответить.

Ответ 1:


Вопрос 408:

От: Ефремов Александр


:Не подскажет ли кто, существуют ли в Delphi зарезервированные имена
(псевдонимы) для таких папок как Windows, program files и т. п. Если
такие константы есть, подскажите, пожалуйста, в каком файле они
объявлены. Может быть существуют функции для получения псевдонимов или
их можно найти где-нибудь в реестре ?


Ответить.

Ответ 1:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
и HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion - ключи
в реесте, содержащие пути к системным папкам'
Ответ 2:
Псевдонимов именно на папки нет, к ним обращаются либо как
к строковым переменным либо через PChar, ну может ещё через хэндл.
А вот для переменных такие резервы есть, напр, begin, end, com и т.д.
Описание есть в любой книге по дельфям либо по Паскалю.
Ответ 3:
Можно в реестре смотреть, но...
Есть функции из WinAPI. К примеру, GetWindowsDirectory.
Далее - читай хелп, там усё понятно. :)
.............................
function WinDir : string;
var
 Buff : ARRAY[0..MAX_PATH] of Char;
begin
 GetWindowsDirectory (@Buff, MAX_PATH);
 Result := StrPas (Buff);
end;
Ответ 4:
для Windows - %SystemRoot%
для Prog. Files - %Program Files%
и другая весьма интересная информация в ключах:
для Win9X
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

для WinNT
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion (для Win9X)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion (для Win9X)


Вопрос 409:

От: Lamer

В последнем выпуске прочел впечатления от Дельфи6. Я тоже ее себе поставил
и мне понравилась работа с Action-ами и особенно Action-bar-ы.
Есть ли способ сохранять состояния Action-ов не в файл
(как это делает ActionManager), а в соответвтующую ветку реестра (HKCU\...)?


Ответить.

Ответ 1:



Вопрос 410:

От: Ефремов Александр


Не подскажете ли как узнать, подключен ли в данный момент
компьютер к интернету или нет. Недавно в FAQ был дан ответ в качестве
функции InetIsOffLine(Flag: Integer): Boolean , которую необходимо
импортировать из библиотеки Url.dll. У меня она не работает. Все время
выдает FALSE !?! Зашел на официальный сайт Microsoft по MSDN
http://msdn.microsoft.com/library/psdk/shellcc/shell/Functions/InetIsOff
line.htm
<http://msdn.microsoft.com/library/psdk/shellcc/shell/Functions/InetIsOf
fline.htm>
где черным по белому написано, что функция эта выдает false не только,
когда комп подключен к интернету, но и когда ЕЩЕ НЕ БЫЛО ПОПЫТОК
подключения (or if no attempt has yet been made to connect to the
Internet). Ну и скажите мне теперь, какой у этой функции тогда смысл ?
Да, умом Microsoft не понять (к сожалению). Помогите хоть кто-нибудь
найти нормальный способ проверки подключения к инет (online) .


Ответить.

Ответ 1:
Для того, чтобы определить подключен ли комп к инету можно использовать такую функцию как:
  BOOL InternetGetConnectedState(OUT LPDWORD lpdwFlags, IN DWORD dwReserved)

Где, в lpdwFlags необходимо передать указатель на переменную, которая принимает одно из нижеперечисленных значений либо комбинацию
этих значений. Для соединения через модем нужно использовать первое значение.

1. INTERNET_CONNECTION_MODEM
2. INTERNET_CONNECTION_LAN
3. INTERNET_CONNECTION_PROXY
4. INTERNET_CONNECTION_MODEM_BUSY
А параметр dwReserved должен быть равен 0.
Я в своей проге использовал такой фрагмент:

t:=INTERNET_CONNECTION_MODEM;
stat:= InternetGetConnectedState(@t,0);

где t: integer; stat: boolean

более подробное описание этой функции можно найти все в той же MSDN
Для того, чтобы эта фунуция работала в раздел uses надо добавить wininet
Ответ 2:
Если компьютер представляет из себя обычную домашнюю пишущую машинку, без
всяких сетей и т.п, то можно просто определить изменение IP адреса с
127.0.0.1 на любой другой. Если не брезгуешь компонентами - то таких в инете
очень много:'
Ответ 3:
Долго возился с функциями Microsoft но ничего не получилось (и не у одного
меня), зделат так:

function LocalIP: string;
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);
 Result := '';
 GetHostName(Buffer, SizeOf(Buffer));
 phe := GetHostByName(buffer);
 if phe = nil then
 begin
  Exit;
 end;
 pptr := PaPInAddr(Phe^.h_addr_list);
 I := 0;
 while pptr^[I] <> nil do
 begin
  Result := StrPas(inet_ntoa(pptr^[I]^));
  Inc(I);
 end;
 WSACleanup;
end;

function CheckLanConnection: Boolean;
var
 IP: string;
begin
 IP := LocalIP;
 if ((IP = '') or (IP = '127.0.0.1')) then Result := False else Result :=
True;
 if RUNATDEBUGMODE then WriteLog('CheckLanConnection: IP address is (%s)',
[IP]);
end;

function CheckDialupConnection(EName: string): Boolean;
var
mEnum: mRasEnumConnections;
Handle: THandle;
mRasConn: TRasConn;
lpcb, lpcConnections: DWORD;
begin
 Result := False;
 Handle := LoadLibrary('rasapi32.dll');
 if Handle <> 0 then
 try
  try
   @mEnum := GetProcAddress(Handle, 'RasEnumConnectionsA');
   if (@mEnum <> nil) then
   begin
    mRasConn.dwSize := SizeOf(TRasConn);
    lpcb := SizeOf(mRasConn);
    if mEnum(@mRasConn, lpcb, lpcConnections) = 0 then
     if lpcConnections > 0 then Result := EName = mRasConn.szEntryName;
   end;
  except
  end;
 finally
  FreeLibrary(Handle);
 end;
 if RUNATDEBUGMODE then
  if Result then WriteLog('CheckDialupConnection: Already connected.')
   else WriteLog('CheckDialupConnection: Connection dosn''t exists.')
end;









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

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

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

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

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



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

В избранное