← Октябрь 2001 → | ||||||
1
|
2
|
3
|
4
|
6
|
7
|
|
---|---|---|---|---|---|---|
8
|
9
|
11
|
12
|
13
|
14
|
|
15
|
16
|
17
|
19
|
20
|
21
|
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
29
|
30
|
31
|
За последние 60 дней 2 выпусков (1-2 раза в 2 месяца)
Сайт рассылки:
http://www.interface.ru, www.itshop.ru
Открыта:
16-01-2001
Адрес
автора: comp.soft.win.mydelphi-owner@subscribe.ru
Статистика
-3 за неделю
Проблемы и решения в Delphi #31
Проблемы и решения в 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 |
В избранное | ||