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

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

  Все выпуски  

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


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

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


О сколько нам открытий чудных
готовит.....???.....Microsoft


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


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

Сегодня в выпуске :
~~~~~~~~~~~~~~~~~~~
1. Что на форме и где?
2. Ищу подельника.
3. Очередные вопросы.
4. Отвеченные вопросы.
~~~~~~~~~~~~~~~~~~~


1. Что на форме и где?
----------------------
Для понимания принципов размещения различных компонент на форме или в
поле других компонент нужно знать как работают 2-а основных свойства,
которые присутствуют практически во всех визуальных компонентах Delphi.
Это свойства - 'Align' и 'Anchors'.Первое из них я бы назвал
полуавтоматизированным, а второе ручным. Сейчас поймете почему.
'Align' - позволяет "привязать" компоненту к тому или иному краю объекта
(формы ли, другой ли компоненты). Соответственно свойства alBottom, alTop,
alLeft, alRight позволяют привязаться, соответственно к низу, к верху, к
левой и правой сторонам. Причем, привязка осуществляется с одним
интересным моментом - компонент растягивается вдоль всего объекта к
которому привязываемся. Есть у него и еще 2-а свойства это -
alNone и alClient. Первое означает - 'без привязки'. Второе -
'растянуть на всю доступную площадь'.

Свойством 'Anchors' удобно пользоваться когда привязаться нужно, но
не вплотную или только к одной стороне и не на всю длинну. Его
свойства как раз и говорят об этом : akLeft,akRight,akTop,akBottom
(для совсем умных - лево,право,верх и низ). Грубо говоря, если Вы
разместили свои компоненты так как вам нравится, то не грех подумать и
о том как они будут смотреться на форме при изменении ее размеров.
Собственно для этого инужны все эти привязки.


2. Ищу подельника.
------------------
Я сам сейчас разбираюсь с Делфями, но тупо ковыряя очень тяжело
добиться каких либо результатов. Хотелось бы найти какого нибудь
компаньёна который мог бы предложить написать что нибудь совмесное,
а я буду стараться оказать посильную помощь.
Мой mail: nks13@ukrpost.net .



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


Вопрос 360:

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

Выполняю следующую процедуру : NMMsg1.PostIt(Memo1.Text),
если удаленная машина отключена получаю сообщение
'Connection Failed'.... Как блокировать это сообщение,
а показать свое? Или каким образом при запуске проги
получить список IP-адресов машин которые готовы
вступить в контакт?


Ответить.

Ответ 1:


Вопрос 361:

От: ivc_dima

Пишу я Вам, т.к. есть одна проблема. Не могли бы Вы мне помочь. Я
пытаюсь на Delphi5 создать отчет в Excel используя компоненты
TExcelApplication, TExcelWorkbook и т.д.
Фрагмент программы:


ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0)
as _Workbook);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.ActiveSheet as _Worksheet);


ExcelWorksheet1.Cells.Item[1,1].CopyFromRecordset(?,EmptyParam,EmptyPara
m);

ExcelWorksheet1.Columns.AutoFit;
ExcelApplication1.Visible[0]:=true;


ExcelWorkbook1.SaveAs(name,xlWorkbookNormal,Emptyparam,Emptyparam,Emptyp
aram,Emptyparam,xlNoChange,xlUserResolution,Emptyparam,Emptyparam,Emptyp
aram,0);
ExcelApplication1.Quit

В данном фрагменте не могу передать параметр Data:IUnknown в функции
CopyFromRecordset(const Data:IUnknown; MaxRows:OleVariant;
MaxColumns:OleVariant)

Не сталкивались ли Вы с этой функцией. Помогите пожалуйста
разобраться с этой проблемой. Заранее благодарен.


Ответить.

Ответ 1:


Вопрос 362:

От: Talis

Проблема в следующем:
Запускаю Word через CreateOleObject('word.application'), программа
частично формирует документ,
затем пользователь его редактирует, форматирует и сохраняет. Может ли
Word "сообщить" моей программе,
под каким именем сохранен файл либо сама программа "выцарапать" у Word
это имя файла?
 

Ответить.

Ответ 1:


Вопрос 363:

От: Андрей Сергеевич

Суть проблемы состоит в том, что я хочу иметь многострочные поля в
DBGrid, как в Exсel'е. В стандартной компоненте, а не в компонентах
прочих фирм. Буду очень призначелен.


Ответить.

Ответ 1:


Вопрос 364:

От: Egorov

Может быть мой вопрос покажется Вам слишком простым...
Как сделать переменные общими в DLL и в вызывающей программе? Я
догадываюсь, что, наверное, нужно отвести общую память под эти
переменные, но как это сделать? А может есть более простой способ?


Ответить.

Ответ 1:


Вопрос 365:

От: anton

Пришлите,если у кого есть,исходник видео-проигрывателя.Ещё пришлите,если
у
кого есть,crack для сборника компонентов MMTool5.Скажите,можно ли делать
crack на Delphi5,в смысле делать небольшую какую-нибудь
программку,которая
будет убирать регистрацию с другой программы.


Ответить.

Ответ 1:


Вопрос 366:

От: Dima

Работаю с базой на Microsoft SQL Server через ADO
1.ввожу данные через хранимую процедуру
2.обналяю данные в основной и связанной с ней таблицах
ADOTable1.active:=false;
ADOTable2.active:=false;
ADOTable2.active:=true;
ADOTable1.active:=true;
большая таблица на машине с памятью 128 открывается нормально
на машине с 32 мегами открывается очень долго
Может делать как то иначе


Ответить.

Ответ 1:


Вопрос 367:

От: Igor Mahnach

Не могли бы вы подсказать процедурку при помощи которой можно получить
прямой доступ к винчестеру. Я пытался сделать это через
CreateFile('\\.\vwin32', GENERIC_READ,
FILE_SHARE_READ + FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0 );.
С дискетой получается, а с винчестером - выдает ошибку.


Ответить.

Ответ 1:


Вопрос 368:

От: temporary User of NewMail

Как в Дельфи привязать ProgressBar к Query (Table)?
Как сделать визуальным процесс загрузки при запуске
приложения?


Ответить.

Ответ 1:


Вопрос 369:

От: knijitsa@risp.ru

Друзья, помогите найти, что я делаю не так при создании компонента.
Пытаюсь создать свой компонент tDiap c дочерней кнопкой типа tLabel.
(Мне нужно, чтобы отрабатывались нажатия на саму кнопку (а не на
компонент с исследованием координат мыши), но в зависимости от данных,
связанных с экземпляром компонента. (На самом деле tDiap'ы я намерен
Creatить в
run-time, а кнопок мне понадобится не одна)).

Пишу в описании типа:
type tdiap = class (TComponent);
private
fLabel: tLabel;
public
constructor Create(AOwner: TComponent); override;
...
Пишу конструктор:
constructor tDiap.Create(AOwner: TComponent);
begin inherited;
fLabel:=tLabel.Create(AOwner);
fLabel.Parent:=Self {* привязываю Label к компоненту.
Пробовал и InsertControl(fLabel) -- ничего не меняет *};
end;
Регистрирую компоненту, всё проходит.
Ставлю компоненту на форму в design time -- всё как я ожидал, но у
созданной Label оказывается пустым поле Name! Заполнять Name
статически, разумеется, нельзя -- я тогда не смогу поместить на форму
ещё один tDiap. Но, мне казалось, новый Name обязан был заполнить
tLabel.Create.
Но не в этом проблема -- мне, собственно, Name был не нужен. Жму
F9 -- и при выходе из конструктора (до запуска Application.Run) получаю:

Project raised exception class EClassNotFound with Message 'Class
TLabel not found'. Process stopped. Use Step or Run to continue.

Как это not found?
Не помогло и обрамление текста конструктора после "inherited"
скобками "if csDesigning in componentState then begin" / "end;"
Почему так вышло, и как надо правильно? Что из работы конструктора
делается в design-time, но не делается в run-time, и наоборот?

И ещё: почему-то при запуске появляется ещё непрошенное чёрное окно
вроде окна MS-DOS-приложения.


Ответить.

Ответ 1:


Вопрос 370:

От: Hitman

1. Я создаю класс и наследую его от TObject. Создаю в нем
деструктор, и его последней строкой вызываю:
inherited Destroy; // (так рекомендуется в литературе) - все работает.
В help Delphi рекомендуют вызывать Free, мол он корректно работает
с указателями на nil. Отлично, переписываем последнюю строку:
Free; // (вместо inherited Destroy);
А здесь, при вызове деструктора генерится исключение 'Access
violation'. Так в чем тут дело?

2. В Delphi есть удобный компонент TList. Пусть у меня описаны
указатели на записи(record) PmyRecord.
// Теперь я динамически выделяю память
new(PmyRecord);
// инициализирую поля
PmyRecord^.xxx := xxx;
// Добавляю указатель в список
myList.add(PmyRecord);
// работаю со списком
//.
// освобождаю память
myList.Free;

Вопрос, что будет с памятью, отведенной под записи с помощью new()?
Освободится ли
она? Или я просто потерял на нее ссылки?


Ответить.

Ответ 1:


Вопрос 371:

От: Evgen Fedorenko

Может кто знает как сделать следующее:
Есть форма на котрою кинуты, к примеру, лейбл и кнопка. Есть
текстовый файл в котором есть строка типа:
MainForm.Label1.Caption=Anything.
Как сделать так, чтобы при нажатии на кнопку можно было изменить
caption лейбла на Anything (я имею в виду не текстовый парсер, а
тайпкаст строки в объект)?
Заранее благодарен,
Евгений.



Ответить.

Ответ 1:


Вопрос 372:

От: ivc_dima


Пишу я Вам, т.к. есть одна проблема. Не могли бы Вы мне помочь. Я
пытаюсь на Delphi5 создать отчет в Excel используя компоненты
TExcelApplication, TExcelWorkbook и т.д.
Фрагмент программы:


ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0)
as _Workbook);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.ActiveSheet as _Worksheet);


ExcelWorksheet1.Cells.Item[1,1].CopyFromRecordset(?,EmptyParam,EmptyPara
m);

ExcelWorksheet1.Columns.AutoFit;
ExcelApplication1.Visible[0]:=true;


ExcelWorkbook1.SaveAs(name,xlWorkbookNormal,Emptyparam,Emptyparam,Emptyp
aram,Emptyparam,xlNoChange,xlUserResolution,Emptyparam,Emptyparam,Emptyp
aram,0);
ExcelApplication1.Quit

В данном фрагменте не могу передать параметр Data:IUnknown в функции
CopyFromRecordset(const Data:IUnknown; MaxRows:OleVariant;
MaxColumns:OleVariant)

Не сталкивались ли Вы с этой функцией. Помогите пожалуйста
разобраться с этой проблемой. Заранее благодарен.


Ответить.

Ответ 1:


Вопрос 373:

От: Ivan

Какие правила нужно соблюдать при написании программы БЕЗ формы:=)
Типа: из uses нужно удалить Forms, использовать функции, а не процедуры,
and
other -- каким образом?!?!?!:=)


Ответить.

Ответ 1:


Вопрос 374:

От: Игорь Маринин

Хочу спросить Вас, как можно читать писать голос с модема.
Может можно не напрямую а как-то через TAPI или RAS библиотеки.


Ответить.

Ответ 1:


Вопрос 375:

От: Anton

Подскажите как найти и удалить определенный фаил.
С FileSearch ничего не получается.
Приведите какой-нибудь пример если не трудно.

Ответить.

Ответ 1:


Вопрос 376:

От: Ivan

Какой класс имеет Рабочий стол: в WinSight32 -- #32769:Desktop; в проге
Даниила Карапетяна(WindInfo) -- SysListView32?!?!
Подскажите, как узнать его handle. FindWindow('#32769',nil) и
FindWindow('SysListView32',nil) -- НЕ РАБОТАЮТ.


Ответить.

Ответ 1:


Вопрос 377:

От: SMike

Доброго времени суток!
Вопрос такой: КАК ОПРЕДЕЛИТЬ ВЕРСИЮ СВОЕЙ ПРОГРАММЫ???
Ищу уже вторую неделю!


Ответить.

Ответ 1:


Вопрос 378:

От: Боровиков О.А.

Как можно перекодировать сообщение (содержание) из Win в КОИ8-Р для
отправки по EMail?
(может есть какая-нибудь IP - функция).


Ответить.

Ответ 1:


Вопрос 379:

От: Ivan

Как правильно общаться с функциями типа WM_SETTEXT: в хелпе я читал, что
у
этой функции есть два переметра(0 и строка), НО КАК ИМИ ВОСПОЛЬЗОВАТЬСЯ.
Если я пишу: SendMessage(myhwnd,WM_SETTEXT[0,'Нет'],0,0), то вылазиет
ошибка
'array typr required'(как же запихнуть 0 и строку в массив?)


Ответить.

Ответ 1:


Вопрос 380:

От: Danil

У меня к Вам, возможно, глупый вопрос: хочу создать свою заставку;
куда выводить графику? DrawGrid? Или ещё куда-нибудь (пооптимальнее)?


Ответить.

Ответ 1:


Вопрос 381:

От: Danil

Типа начал я писать свой скринсейвер и натолкнулся но проблему: как
убрать этот мышиный след aka курсор?
Полазил по хэлпам (delphi5, english), сначала написал так:

screen.cursor := null;

но не тут-то было, всё откомпилилось, но выньдос начала ругаться.
Попробовал значение 0 - стандартный курсор. Тут меня осенило -
поставил

screen.cursor := -1;

И ВОТ ОНО!!! НЕТ КУРСОРА!!!

К чему я это пишу? Хочу спросить у Вас: может есть более удобный
и оптимальный способ?
Спасибо.


Ответить.

Ответ 1:


Вопрос 382:

От: Odincov Vadim

Здравствуйте!
Подскажите, как написать код кнопок <-Назад, Вперед-> и Обновить в
WebBrowser, наподобии кнопок в Internet Explorer?
Заранее благодерен, Вадим.


Ответить.

Ответ 1:



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


Вопрос 201:

От: Lslayer


>>Уважаемый Lslayer.

>>Попробуйте следующий вариант:

>>procedure TForm1.Button1Click(Sender: TObject);
>>var
>> V:Variant;
>>begin
>> V := CreateOleObject('Word.Basic');
>> V.AppShow;
>> V.FileNew;
>> V.Insert('Automation is easy!');
>>end;

>>С уважением,
>>Сергей.

Еще раз здравствуйте!

А руководства по командам ентим (AppShow, FileNew, Insert и так далее!)у Вас
нету?
(пришлите, если есть, плс)!


Ответить.

Ответ 1:
См. файл VBAWRD8.HLP. В нем описаны методы VBA для работы с Word'ом, а
также об'екты Word'а (Getting Started with Visual Basic -> Microsoft
Word Objects)


Вопрос 202:

От: Константин Михайлович Воротов

Подскажите плз.
Как определить наличие мыши и ее тип ?


Ответить.

Ответ 1:
Насчет определения мыши.

В Delphi, у вас ВСЕГДА ЕСТЬ готовая переменная Mouse типа TMouse.

У нее есть набор свойств и методов, с помощью которых все очень
легко настраивается и определяется.

Просто наберите в окошке кода Mouse и нажмите F1 - справка есть и
даже мне, знакомому с английским весьма поверхностно, все было
понятно и ясно с первого прочтения.

Удачи.


Вопрос 203:

От: Константин Михайлович Воротов

И еще вопрос:
Перед тем как помещать выбранный файл в БД, хотелось бы провести
его архивирование прямо в программе. Существует ли возфожность упаковки "на лету".
Как это можно сделать?


Ответить.

Ответ 1:
На www.torry.net есть компоненты, для запаковки на лету (много,
так что перечислять - нет смысла)

Вопрос 204:

От: Калашников Артур

Как запустить из программы написаной на дельфи Excel используя OLE я
знаю, а вот как объеденить две ячейки в Excel и выравнять текст по
центру я не знаю. Помогите будласка!!!


Ответить.

Ответ 1:
Чтобы нучится использовать каманды Excel лучше всего создать макрос, который
это делает, а затем перевести его синтаксис из
Visual Basic на Delphi

Пример кода для объединения ячеек и выравнивания текста.

var
xls: Variant;
const
xlCenter=-4108;

Procedure MerCen(ran:string);
Begin
xls.Range[ran].Select;
xls.Selection.HorizontalAlignment := xlCenter;
xls.Selection.VerticalAlignment := xlCenter;
xls.Selection.WrapText:= false;
xls.Selection.Orientation := 0;
xls.Selection.ShrinkToFit := False;
xls.Selection.MergeCells := False;
xls.Selection.Merge;
End;

Вызывать так:

MerCen('A4:J4');
Ответ 2:
Используй метод Merge (см. VBAXL8.HLP)
например: XLSheet.Range['a1','b1'].Merge(True)
По умолчанию передается параметр False - об'единяются все ячейки в
диапазоне в одну; если True - об'единяются ячейки построчно.


Вопрос 205:

От: Virus

Здравствуйте!
Я хочу попробовать программировать DirectX7 на Delphi, но не имею ни
малейшего представления как это можно сделать. Что мне для этого нужно
(какие библиотеки), и как это дело подключить?
Очень интересно! Заранее ОГРОМНОЕ СПАСИБО! :)
С уважением, Virus


Ответить.

Ответ 1:


Вопрос 206:

От: Nohcha@iname.com

:Подскажите как подписать ActiveX, чтобы IE не задавал дополнительных
вопросов?


Ответить.

Ответ 1:


Вопрос 207:

От: anton

Здраствуйте.
Пришлите,если у кого есть компонент часов с электронными цифрами и
жидко-кристаллическим экраном для Delphi5.Заранее благодарен.Антон.
mailto:armen@online.sinor.ru


Ответить.

Ответ 1:


Вопрос 208:

От: Andrey F Ivanov

Добрый день!
Не может ли кто-нибудь поделиться примером из WinAPI , который
проверял бы , не занят ли COM1 и возвращал handle (если я правильно
выражаюсь) окна , которое это сотворило.
Заранее благодарен за любой ответ.
Ответить.



Ответить.

Ответ 1:


Вопрос 209:

От: Andrew Slobodyanyk

Вопрос: Как перерисовывать изображение без мерцания?
Рисовать прямо на форме или на PaintBox-е? Если прямо на Canvas -
мерцает ужасно; создавать МетаФайл с МетаКанвой, а потом Draw - плохо;
BitMap в памяти, а потом CopyRect или BitBln - чуть-чуть, но мерцает.
Как совсем избавиться, ведь скажем мышь над окном двигаеться - и
нормально.


Ответить.

Ответ 1:
Насчет мерцания.
Пришлите, пожалуйста, пример кода.
Дело в том, что я рисовал и прямо на форме (на ейном Canvas'е),
и сперва в BMP-шке, а потом ее сразу выводил (у меня, например,
самодельный Tetris так построен...) И НИЧЕГО НИКОГДА у меня
почему-то не мерцало...
(А вообще, на мой взгляд, лучший способ - сперва рисовать в памяти
на временной BMP-шке, а потом готовую картинку вываливать на экран)
Ответ 2:
Попробуй в OnCreate у формы поставить DoubleBuffered := True;
Ответ 3:
мышь, если не ошибаюсь, поддерживается аппаратно. Вы разве не
замечали, что когда программа виснет и не хочет перерисовываться, мышь
все равно не оставляет на ней следов?
Ответ 4:
Необходимо у парента TImage , например TForm , или
TPanel , присвоить свойству DoubleBuffered значение
true !
Ответ 5:
А прикол с морганием в том, что Винда перед рисованием кидает
сообщение
WM_ERASEBKGND - если его перехватиывать и говорить - типа все ОК!, то
мерцания не будет!

type
TClass = class
....
procedure Erased(var Mes: TWMEraseBkgnd);message WM_ERASEBKGND;
...
end;


procedure TMyCustom.Erased(var Mes: TWMEraseBkgnd);
begin
Mes.Result := 1;
end;


Вопрос 210:

От: Pavel Trushko

Добрый день.
Как сделать, чтобы при вызове внешней программы, выполнение кода Дельфи
продолжалось лишь после завершения работы внешней программы?
Спасибо.
С уважением, Павел Трушко.


Ответить.

Ответ 1:
procedure ExecuteWait(const Cmdline:string);
var pi:TProcessInformation; si:TStartupInfo;
begin
GetStartupInfo(si);
if CreateProcess(nil,pchar(CmdLine),nil,nil,false,0,nil,nil,si,pi) then
begin
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
end
else raise Exception.Create('Impossible execute: '+CmdLine);
end;
Ответ 2:
А выполняется это так:

procedure ExecAndWait(aPath: string; HideApp: Boolean = False);
var
Si : TStartupInfo;
p : TProcessInformation;
begin
FillChar( Si, SizeOf( Si ) , 0 );
with Si do
begin
cb := SizeOf( Si);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := SW_SHOW;
end;
CreateProcess(nil,'notepad.exe',nil,nil,false,CREATE_DEFAULT_ERROR_MODE,nil,nil,Si,p);
WaitForSingleObject(p.hProcess,Infinite);
end;

Вот и все!

Вопрос 211:

От: "Ирина Арзамасцева"


Вопрос: Может кто подскажет: как строить диаграммы и графики, используя
значения из таблицы или текстового файла (программным путем).
Заранее спасибо. Irinchik@r66.ru <mailto:Irinchik@r66.ru>


Ответить.

Ответ 1:


Вопрос 212:

От: "Ирина Арзамасцева"


Вопрос:
Можно ли из Delphi запустить макрос, записанный в MS Word'e?
Заранее спасибо Irinchik@r66.ru <mailto:Irinchik@r66.ru>


Ответить.

Ответ 1:
W.Application.Run('Макрос1');


Вопрос 213:

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

Господа, подскажите как сделать форму типа формы Object Inspector с
функцией Stay on top?
Заранее спасибо.

С уважением, Алексей.


Ответить.

Ответ 1:
не знаю, как в других, но в пятой дельфе у формы есть свойство Style,
если не ошибаюсь, которое может быть fsStayOnTop.


Вопрос 214:

От: Sir Antony

Привет, всезнающий All!

У меня вопрос:
Есть ли процедура копирования каталога со всем его содержимым (файлами
и подкаталогами). Если есть, укажите, PLS, если нет - не подскажите, как
организовать этот процесс.

Заранее спасибо, Sir Antony.


Ответить.

Ответ 1:
Примерно так :

В Uses -> ShellAPI

procedure Win95copy(handler: hwnd; txFrom: pchar; txTo: pchar;
txTitle:pchar; operation:UINT);
var
Fo : TSHFileOpStruct;
buffer : array[0..256] of char;
p : pchar;
begin
FillChar(Buffer, sizeof(Buffer), #0);
p := @buffer;
StrECopy(p, txFrom);

FillChar(Fo, sizeof(Fo), #0);
Fo.Wnd := Handler;
Fo.wFunc := operation;
Fo.pFrom := @Buffer;
Fo.pTo := txTo;
Fo.fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR +FOF_SIMPLEPROGRESS;
Fo.lpszProgressTitle:=txTitle;
if ((SHFileOperation(Fo)<> 0) or
(Fo.fAnyOperationsAborted <> false)) then
// .....здесь реакция на "копирование неуспешно"
;
end;

Win95Copy(Self.Handle, pchar('c:\from'), pchar('\\server\d\to'),
'Идет резервное копирование ...', FO_COPY );

Т.е. путь может быть как локальный, так и сетевой,
можно еще поизвращаться с флагами (внешний вид) и operation (FO_MOVE,
FO_DELETE ).


Вопрос 215:

От: Furmanov@nursat.kz

Имеется Win2000Server.

Требуется сделать суточный лимит времени по DialUp, т.е. пользователю
дается, к примеру, 1 час в сутки. Он подключился, провел на линии N
минут, отключился на некоторое время, затем опять подключился и ему
дается времени (1час-N прошедших минут). Если кто-то знает, как это
сделать стандартными средствами Windows, либо при помощи каких либо
конкретных программ, то подскажите, пожалуйста. Если же никто не слышал
о подобном, то вот вторая часть вопроса: Как написать программу (Delphi
или C++), которая осуществляла бы подобный контроль? Знаю, что можно
использовать функции NetUserAdd, NetUserDel и т.п., но не знаю, как их
применить в собственной программе. (к сожалению знания мои еще не так
велики). Есть ли функция, при помощи которой можно отключить учетную
запись? Был бы очень благодарен за небольшой исходник, в котором
описывалась хотя бы одна из этих функций на конкретном примере.

И еще один вопрос: как при помощи TAPI можно оборвать соединение
созданное не моей программой?

Буду очень признателен всем откликнувшимся! Помогите пожалуйста!
Горю!!!! Рассылку забираю нерегулярно, поэтому огромная просьба -
продублируйте ответ на furmanov@nursat.kz <mailto:furmanov@nursat.kz>

Заранее благодарен Фурманов С.


Ответить.

Ответ 1:


Вопрос 216:

От: George Dolin

Как при создании таблицы, например Paradox, добавить в нее поля типа
Memo и Graphic.


Ответить.

Ответ 1:


Вопрос 217:

От: George Dolin

Добрый день!
Для блока математических вычислений требуется увеличить точность
вычислений чисел - сверх типа extended. Какие методики стоит
использовать, возможно есть ссылки на примеры решения подобной проблемы.


Ответить.

Ответ 1:
В Германии разработали специальный Паскаль с всевозможными численными методами (они гарантируют
очень высокую точность вычислений). Купите книгу "Pascal-XSC Язык численного программирования", а
скачать его можно по www.xsc.de
К сожалению использовать это в Borland Pascal или Delphi по моему не удастся.


Вопрос 218:

От: Ернар Шамбаев

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

У меня вот какой вопрос. Имеется таблица, одно поле которой - binary.
Алгоритм записи в него мне неизвестен. Каким образом я смогу (если
смогу вообще) прочесть содержимое этого поля?


Ответить.

Ответ 1:
Можешь прочитать, как массив байтов...

Вопрос 219:

От: Ернар Шамбаев

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

Не подскажите, где можно взять хорошую справку по Win API
(желательно, на великом и могучем и, если можно, с примерами
использования)?

Премного благодарен.


Ответить.

Ответ 1:


Вопрос 220:

От: Константин Михайлович Воротов

Научите плз.
Как передать параметры из одного Win-приложения в другое?
Каким образом они описываются на приемнике?


Ответить.

Ответ 1:
Через файл, отображаемый в память, через MailSlot, сообщения Win и др.
Это хорошо описано в Библиотеке Системеного Программиста Фролова, т. Ѓ 27
Выбранный метод зависит от создаваемого приложения и требуемых
функций.
Ответ 2:
Если достаточно простые параметры то послать сообщение
(в посылателе создать USER message, а в получателе
написать процедуру его захвата), если более сложные
параметры - например строку текста, то надо создать
атом. Если надо намертво связать несколько приложений
и гонять туда-сюда параметры - то надо использовать
COM технологию. Пишите если нужен конкретный пример.


Вопрос 221:

От: Ольга **********

У меня возникла проблема при работе с компонентом БД
TDBLookupCombo она заключается в следующем,
При активизации окна поле этого компонента пусто,
после нажатии на него выпадает список при выборе
из него поле заполняется этим значением, подскажите
как сделать так что бы при активизации окна этот
компонент содержал значение определенной записи
используемая БД на Access2000.


Ответить.

Ответ 1:
1. Тот набор данных (TDataSet, b.e. TTable, TQuery), на который ссылается
свойство ListSource Вашего TDBLookupCombo используется ещё каким-то
компонентом, например ещё одним TDBLookupCombo или, скорее всего, если я
правильно представляю Ваше приложение, TDBGrid. На КАЖДЫЙ
TDBLookupCombo.ListSource (даже для ссылающихся на один набор данных, но
РАЗНЫЕ записи) нужен ОТДЕЛЬНЫЙ набор данных => отдельный TDataSource. Что
обидно.
2. В мастер-таблице отсутствует запись с ключом из текущей записи. Свяжите
таблицы в базе.
3. Если всё же п.1 и п.2 не выполняется - спозиционируйте указатель записи
TDBLookupCombo.DataSource на нужную Вам запись, например так:
TDBLookupCombo.DataSource.DataSet.First
или так
TDBLookupCombo.DataSource.DataSet.Locate(......)

Ответ 2:
Поле и будет пустым, если в него ничего не внесено. Если требуется
отображать в нем значение определенной записи, то в таблицу
DBLookupComboBox1.DataSource в поле DBLookupComboBox1.DataField
необходимо программно вписать это значение, только тогда оно и
отобразиться в компоненте. (Напр., вносить значение по-умолчанию и
затем предлагать пользователю для просмотра/изменения).


Вопрос 222:

От: Wladimir

Как в Delphi повесить процедуру на событие открытия - закрытия CD-ROM ?
В Windows есть сообщение WM_DEVICECHANGE но оно возникает только когда в
дисководе есть диск.


Ответить.

Ответ 1:


Вопрос 223:

От: Micky

Привет, господа DELPHIсты, мой вопрос никаким боком нельзя отнести к
вопросу по программированию. У меня проблема. У меня есть диск:
"Delphi 5.1" фирмы AlexSoft. С недавних пор, после установки, Delphi
перестал загружатся. Сначала выходит некоторое сообщение, типа "хочу
ли я принять новые установки дебаггера", а затем "виснит", причем все,
кроме RESET ничего не помомает.
Затем в каталоге Delphi появляется файл: "BORDBG50.FFFF961B.log"
Содержимое которого выглядит так:
[FFFD1DEB:C438] StartServiceCtrlDispatcher being called.

[FFFD1DEB:C438] StartServiceCtrlDispatcher failed.

[FFFD1DEB:C438] StartServiceCtrlDispatcher being called.

[FFFD1DEB:C438] StartServiceCtrlDispatcher failed.

[FFFD1DEB:C438] StartServiceCtrlDispatcher being called.

[FFFD1DEB:C438] StartServiceCtrlDispatcher failed.

Вот такая у меня проблема.Форматировал диск, не помогло. Не работает
(а ведь работал!!!) не только у меня.

Помогите люди добрые!!!


Ответить.

Ответ 1:
Такие глюки возникают в Delphi при кривой работе видео драйвера.
Попробуй обновить драйвер или вернуться к прежнему работающему.
(Например: у меня эта проблема решилась после снятия битой видео
памяти.) Удачи....


Вопрос 224:

От: Mikl Kapustnicov

:Где можно достать драйвер для базы Clarion. Которая стоит в ПФР 2000.
Если, кто может то киньте мне mailto:ximka@yandex.ru
<mailto:ximka@yandex.ru> или укажите адрес, где можно достать их.


Ответить.

Ответ 1:


Вопрос 225:

От: Никита

Как программно изменять значение DBCheckBox
т.ч. значение в связанном поле тоже менялись


Ответить.

Ответ 1:
Надо программно изменить в связанном поле, вот галочка и появится.


Вопрос 226:

От: Nat

:Здраствуйте!
Подскажите, пожалуйста.

Есть такая форма:

<FORM METHOD=POST ACTION="http://www.111.222/cgi-bin/333/send_page_www">
<INPUT NAME="num" Type="Hidden" Value="59" SIZE=10>
<B>Текст сообщения</B> <INPUT NAME="message" SIZE=50>
<INPUT TYPE=SUBMIT VALUE="Отправить">
</FORM>

А как передать данные по точно такому адресу, но не открывая форму в
веб-броузере, а из программы, написанной на Delphi (у меня 4)? Точнее я
хочу сделать программку, которая могла бы при выполнении определенных
условий послать такое же сообщение, какое отправляет эта форма при нажитии
пользователем кнопки "Отправить"?.



Ответить.

Ответ 1:


Вопрос 227:

От: John D

Здравствуйте!
Возник вопрос такой, немного дурацкий, но всё-таки...

Попробовал я намедни свою компоненту написать. (Для справки - всю эту
чуму я пробовал
не из-под Delphi, а из-под C++ Builder 5) Оказалось, что это вообще не
страшно и ежели сильно
не разгоняться, то даже и очень просто. Но в процессе этого дела заметил
я каку одну.
И вот о ней хочу спросить.

Возьмем, например, стандартную метку (TLabel). У неё есть свойство
Caption.
Когда в Object Inspector'e этот Caption редактируешь, то СРАЗУ ЖЕ В
ПРОЦЕССЕ
РЕДАКТИРОВАНИЯ МЕНЯЕТСЯ И ТЕКСТ МЕТКИ НА ФОРМЕ.
Затем создадим новый компонент и отнаследуем его, например, от
TCustomLabel.
Запишем ему в published: __property Caption;

Инсталлируем эту компоненту и бросим на форму. И появится у нас на форме
такая же,
как и TLabel метка, только свойств у нее в Object Inspector'e будет
поменьше. Но Caption
будет!

Теперь начнем менять этот Caption в Object Inspector'e -
ТЕКСТ МЕТКИ НА ФОРМЕ НЕ БУДЕТ!!! МЕНЯТЬСЯ СРАЗУ ЖЕ В ПРОЦЕССЕ ВВОДА ВАМИ
НОВЫХ ДАННЫХ,
а измениться лишь после того, как вы нажмете на <Enter> или Object
Inspector'e перепрыгнете курсором
на какое-либо другое свойство.

В связи с этим вопрос - а как сделать так, чтобы и для своего компонента
свойства подобные Caption
при работе с Object Inspector'ом вели себя как у встроенных компонентов
(т.е. выдавали
изменения на форму сразу же, а не после щелканья по вводу)?

(Я чего только не пробовал..! И нифига, - не хочет и всё тут! Помогите,
please...)


Ответить.

Ответ 1:
Даже не знаю что и сказать... Попробывал специально создать и что?
У меня все работает.... Ниже пример класса.
=====================
type
TMyLabel = class(TCustomLabel)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
Property Caption;
end;
==================


Вопрос 228:

От: Leo Novak

Добрый день.
У меня есть необходимость в получении информации о серийных номерах
физических устройств компьютера: матери, процессора , винчестера.
Пока я научился находить только "серийный номер тома жесткого диска", но
эта информация не очень мне подходит, так как пользователь сам может ее
изменить.
Заранее благодарен за ответ(ы). С уважением Леонид


Ответить.

Ответ 1:


Вопрос 229:

От: AxelT

Привет!
В выпуске ?14 в ответ на вопрос 72 был приведён пример работы с модемом
через ShellAPI. Я написал программу которая реагирует на входящие звонки
(спасибо Станиславу)
---
CommPort := 'COM3';
hCommFile := CreateFile(PChar(CommPort), GENERIC_READ, 0, nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
Mask:=EV_Ring;
if SetCommMask(hCommFile,Mask) <> False then
if WaitCommEvent(hCommFile, Mask, Nil) <> False then
begin
Result:=True;
end;
CloseHandle(hCommFile);
---
Вопрос такой: При вызове WaitCommEvent происходит полная блокировка
работы приложения пока не
придёт входящий звонок. Пробовал сделать этот кусок кода отдельным
потоком - тот-же результат (даже не закрыть по человечески при отладке,
выход из программы только через Ctrl-F2).
Хотелось бы знать, можно ли обойти эту проблему и как.


Ответить.

Ответ 1:


Вопрос 230:

От: SysAdmin_John

Дрямствуй братва.
Есть вопросик, может хто знает где валяется компонент для доступа к DB
без BDE. Очень нужен. Желательно скоростной т.к. в таблицах > 256000
записей :)


Ответить.

Ответ 1:
Moget luchshe ispolzovat ADO??? Dlia ADO connection - 1 million records nichego ne stoit. I eshe - zachem skachivat vse
records srazu? - lluchshe vsego postepenno, naprimer cherez Tree-view.
Ответ 2:
Поищи компонент KaDAO на http://www.torry.net
Может подойдёт, БДЕ не требуется.
С уважением Денис.
Ответ 3:
Бысто навскидку точный адрес дать не могу. Но, вроде бы в комплекте
с Delphi 4 шел такой компонент DBISAM. К нему есть утилиты для
переноса данных из Dbase и Paradox с сохранением индексов.база данных
встоенная независит от BDE. довольно быстро бегает. Я уже давно
перенес все свои небольшие программы на нее=
Вот то, что нашел =
DBISAM Database System
Welcome to the DBISAM Database System for Delphi 1.02 / 2.01 / 3.0x / 4.0x. Be sure to review our
links regarding bug reports and enhancement requests so that if the need arises you'll have
everything handy to report any information regarding a bug or something that needs improving.

Please note, this help file assumes at least a cursory understanding of
the data access components (TDatabase, TDataSet, TTable, TBatchMove, TQuery,
TStoredProc, TField, etc) that ship with Delphi and their usage.
Please refer to the Delphi online help files or printed manuals for
more information about using the data access components.
Because a large portion of the DBISAM data access components are
either the original Delphi components themselves or very close
duplicates this help file will not spend a large amount of time
duplicating the documentation already present in Delphi.
Простите за многословность=
Ответ 4:
Такой компонент, вернее набор компонентов, есть и называется Topaz

Вопрос 231:

От: Hitman

Вопрос: Как при старте приложения показывать изображение, не
останавливая при этом загрузку основной формы, как это сделано
при старте Delphi5, The Bat! и прочих программ? При этом заголовок
формы (синяя полоса) не отображается.
С уважением, Олег.


Ответить.

Ответ 1:
Посмотри демонстрационную программу, входящую в поставку Delphi
Находится в каталоге %Delphi%\demos\db\ibmastapp
Особое внимание обрати на DPR-файл - там есть код, реализующий подобный запуск приложения. Что касается
заголовка - он не будет появляться у формы, если указать её свойство BorderStyle равным bsNone
Ответ 2:
В проекте перед
Application.Initialize;
вставь
Form4:=TForm4.Create(Application);
Form4.Show;
Form4.Update;

где Form4 форма с заставкой.
Синяя полоса убирается через Инспектор. Попробуй найти сам.
Ответ 3:
Исходный код приводить не буду, но имеется подробное описание и даже
примерчик с исходником. Смотреть здесь:
http://programming.dax.ru/lessons/delphi/les8/les8.shtml
Ответ 4:
Из Kuliba1000:

Создайте форму и поместите на нее логотип, используя компонент Timage. В моем примере я создал
форму с логотипом и именем "logoform". Зайдите в настройки проекта и исключите форму их списка
"автосоздаваемых" форм.

Затем в вашем файле PROJECT.DPR где-то сразу после ключевого слова begin напишите примерно
следующее:
Ответ 5:
Splash Screen сделать - пример поставляется с Delphi -
поищите что-то типа Splash...
Ответ 6:
Очнь просто! В главном модуле программы:
...............................................
var f : TForm;
begin
f := TForm.CreateNew(Application);
f.BorderStyle := bsNone;
f.Position := poScreenCenter;
f.Visible := True;
// далее следует пр., а после Application.Run пишем:
f.Free;
...............................................


logoform := TLogoform.Create(nil);
logoform.Show; { ВНИМАНИЕ! show! НЕ showmodal }


.
. { Здесь может размещаться код инициализации приложения, например, открытие базы данных... }
.


. { После блока кода, создающего все ваши формы и перед
строчкой Application.Run напишите: }


logoform.Hide;
logoform.Release;

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

A вот Алексей (msalex@tomcat.ru) показал более изящный способ:


program Project1;
uses

Forms,
Unit1 in 'Unit1.pas' {Form1};
ULogo in 'ULogo.pas' {LogoForm};

{$R *.RES}

begin Application.Initialize; {до этого момента никаких изменений}

with TLogoForm.Create(Application) do
try
Show;
Update;
Application.CreateForm(TForm1, Form1);
{GProgress.AddProgress(1); - здесь можно двигать прогресс, если TGauge
или TProgressBar лежат на TLogoForm'е}

{если есть еще формы, то Application.CreateForm(TForm2, Form2); и т.д.}
finally
Free;
end;

Application.Run;
end.


А чтобы не было заголовка задаем свойству BorderStyle формы bsNone,
конечно для красоты надо "налепить" компоненту Bevel и все такое...


Вопрос 232:

От: Ернар Шамбаев

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

Как делать приложения со splash-формой - я знаю (DEMOS\DB\Mastapp).
А как реализовать следующее:
чтобы сначала загрузилась форма, предлагающая
сделать определенный выбор (режим А либо режим Б), затем
после осуществления выбора она бы выгрузилась из памяти и загрузилась бы
та или иная форма (в зависимости от сделанного выбора)?
Подскажите, пожалуйста, элегантное решение задачи.


Ответить.

Ответ 1:
Вместо метода Show сплеша (см MastApp) надо вызвать ShowModal и пока ты её не закроешь сам - приложение
будет ждать
А после пиши обработку результатов этой формы и выгружай.
Ответ 2:
В файле DPR пишем:

begin
Application.Initialize;
//MyRequestForm - спрашивает что-то и в зависимости от
этого присваевает себе свойство ModalResult
with TMyRequestForm.Create(Application) do
try
Case Showmodal of
mrOk:Application.CreateForm(TMain1, Main1);
mrCancel:Application.CreateForm(TMain2,
Main2);
mrNo:Application.CreateForm(TMain3, Main3);
finally
free;
end;
Application.run;

end;


Вопрос 233:

От: CyberZone

Здравствуйте. У меня проблема - я не хочу, чтобы из меню "пуск" в
Windows при нажатии на правую кнопку мыши нельзя было выключить
программу, а также как можно убрать программу при завершении программы
через Ctrl+Alt+Del.
С большой благодарностью Владимир.


Ответить.

Ответ 1:


Вопрос 234:

От: Енин Сергей Иванович

Как вытащить содержимое Stringgrid в QuickRep?
Через QRRichText туфта какая-то получается...
Help me please!!!


Ответить.

Ответ 1:


Вопрос 235:

От: Andrew

При работе с InterBase столкнулся со следующей проблемой:
Создаю индекс create index iNAME on books (NAME)
по объявленному следующим образом полю -
NAME varchar(200) not null collate PXW_CYRL
возникает ошибка:
Statement failed, SQLCODE = -607
unsuccessful metadata update
-key size too big for index INAME

а таким образом: NAME varchar(250) not null нет.
Как с этим бороться?


Ответить.

Ответ 1:







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

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

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

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

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



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

В избранное