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

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

  Все выпуски  

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


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

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


ВОЗМОЖНО ВСЕ!!!
Но не у всех :-)

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


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

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

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


Вопрос 286:

От: Alexey

Привет!
Можно ли в TChart программно (т.е. не в диалоговом режиме)
добавить/убрать одну серию?
С уважением, Алексей.
:




Ответить.

Ответ 1:


Вопрос 287:

От: Гавриленко Степан

:
Вопрос.

1) КАК при помощи дельфи выполнить внешнее событие. например запутить
ехе файл.

2) У меня на форме есть компанент TStringGreed. - по русски говоря таблица.
Она заполнена какой либо информацией.
Вдруг в определенный момент мне нужно перенести фокус на определенную ячейку
таблици. Ну или хотябы выделить определенну строку.
Какое свойство за это отвечает?
Я пробовал Select. Но там оно типа Trect и я незнаю, как его юзать.

Заранее благодарен.
С уважением Гавриленко Степан.




Ответить.

Ответ 1:


Вопрос 288:

От: Egorov Alexander

Здравствуйте Дмитрий!

Не можете подсказать, почему не работает следующая программа:

program LockWorkStation;

uses
ShellAPI,
Windows;

{$E scr}
{$R *.RES}

var
c: Char;
begin
if (ParamCount >= 1) and (Length(ParamStr(1)) > 1) then
c := UpCase(ParamStr(1)[2])
else
c := #0;
case c of
'P': ;
'S': ShellExecute(0, 'open',
PChar('rundll32.exe'),
PChar('user32.dll,LockWorkStation'),
PChar('C:\WinNT\System32'), SW_HIDE);
end;
end.

Точнее она работает если запускать вручную, а системой она не запускается.

Александр.




Ответить.

Ответ 1:


Вопрос 289:

От: Алексей К

Здравствуйте.
А как добавить ключ к командной строке, например команда выключения
компьютера "rundll.exe user,exitwindows"?
Что сделать, чтобы запустить 1.exe user,exitwindows? Просто дописание не
помогает.
Спасибо!!!!!

Адрес изменён с <mailto:seagull@aaanet.ruна> seagull@aaanet.ru на
seagull_rnd@mail.ru <mailto:seagull_rnd@mail.ru>
Алексей.

===================Моё первое письмо================

>Здравствуйте!
>Напишите пожалуйста, как будет выглядеть текст программы, окно которой
имеет
>просто одну кнопку, при нажатии на которую запустится программа
C:\1\1.exe.
>И будет ли это работать с относительным путём?
>Я в этом полный ноль.
>Заранее благодарен.
>С уважением Алексей.
===================================================

> Пересылаю Вам письмо:
>
> From: Иван Варанкин < varankin@mail.kz <mailto:varankin@mail.kz> >
> To: DTarasov@kms.dvgd.ru <mailto:DTarasov@kms.dvgd.ru>
> Subject: OtvNaV64
>
> ==============Текст письма===============
> Ответ'
> unit Unit1;
> interface
> uses
> Windows, Messages, SysUtils, Classes, Graphics,
> Controls, Forms, Dialogs, StdCtrls, ShellApi;
> type
> TForm1 = class(TForm)
> Button1: TButton;
> procedure FormActivate(Sender: TObject);
> procedure Button1Click(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> end;
> var
> Form1: TForm1;
> implementation
> {$R *.DFM}
> procedure TForm1.FormActivate(Sender: TObject);
> begin
> width:= button1.Width;
> height:= button1.Height;
> end;
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> shellexecute(0, nil, '1.exe', nil, 'c:\1', sw_restore);
> end;
> end.
>
> В инспекторе объектов необходимо указать для Form1:
> BorderStyle:= None;
> Position:= poScreenCenter;
>
> для Button1
> Left:= 0;
> Top:= 0;
>
> Тогда при запуске программы в центре экрана будет отображаться одна
> кнопка, нажатие на которую приведет к запуску другой программы.
>
>
>
> ==============Финал письма===============
>
>
> ICQ : 89533941
> mailto:Dtarasov@kms.dvgd.ru
<mailto:Dtarasov@kms.dvgd.ru> (МПС-*.mps)
>
>
>


Ответить.

Ответ 1:


Вопрос 290:

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

Доброе время суток господа!

1) Подскажите как сделать так, чтобы при выборе моей программы в панели
задач, главная форма перерисовывалась (у меня в программе в цикле
обрабатывается инф-ия)?
2) Как сделать так, чтобы название в панели задач передоически менялось,
т.е. я хочу показывать там процесс обработки инф-ии в % (как это сделано
в DrWeb)?

Заранее большое спасибо за помощь.

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


Ответить.

Ответ 1:


Вопрос 291:

От: anton


Здравствуйте.
У меня есть компонент VrSpectrum и из него можно сделать
цветомузыку.Скажите как это можно сделать и чтобы компонент работал не
просто так,а именно под ритмы песни,как у WinAmp.Скажите есть ли компоненты
с помощью которых можно сделать проигрыватель типа как WinAmp,но без
использования bmp рисунков.
Антон.



Ответить.

Ответ 1:


Вопрос 292:

От: Eremenko Vitaly

Скажите пожалуйста как из программы прервать выполнение screensaver'a/


Ответить.

Ответ 1:


Вопрос 293:

От: asd

Подскажите пожалуйста как в DataBase Desktop создать alias для
Microsoft SQL Server ?
Что конкретно нужно вводить в поля при создании aliasa
DataBase = ?
Server Name = ?
User Name = ?
Open Mode = ?
Schema Cache = ?
Blob Edit = ?
LangDriver = ?
SQLQRYMODE = ?

А как также создать alias для Oracle ?

Очень нужно. Срочно.
Пожалуйста ответе или ужкажите адресс в интернете где есть информация по
этому поводу на любом языке.
drunya@freemail.ru



Ответить.

Ответ 1:


Вопрос 294:

От: Dizzer

Hello ALL!

Как можно в ОДИН файл сахронить несколько картинок из Image и
текстовую информаию, чтобы можно было любую картинку или строку
текста загрузить?

Спасибо за помощь...




Ответить.

Ответ 1:


Вопрос 295:

От: Roman Vdovenkov

Hello Dmitry,

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


--
Best regards,
Roman mailto:distrib@rambler.ru




Ответить.

Ответ 1:


Вопрос 296:

От: Вадим Шешунов


> Все очень просто:
>
>
> uses Windows, ..., Classes, MMSystem;
>
> ...
>
> with MediaTable do // таблица с медиа-блобами :)
> ...
> if not Fields[k].IsNull then // Fields[k] - поле с БЛОБом - не пустое?
> begin
> (Fields[k] as TBlobField).SaveToStream(AudioDev);
> AudioDev.Position:=0;
> sndPlaySound(AudioDev.Memory, SND_ASYNC or SND_MEMORY or SND_LOOP);
> end;
>
> ...
> // ну и это не забудь!
> procedure TFormХХХ.FormDestroy(Sender: TObject);
> begin
> sndPlaySound(nil, 0); // так можно прекратить проигрыш в любом
> // месте программы
> if AudioDev<>nil then
> AudioDev.Free;
> if MediaTable.Active then
> MediaTable.Close
> end;

Но, увы, этот принцип проблемы не решают. Дело в том, что надо проигровать
файлы размером более 100 кб, а ни sndPlaySound, ни PlaySound не справляются
с файлами таких размеров. Вообще-то, я разобрался с проигрованием mp3-, wav-
и mid-файлов mci-функциями. Но, как проиграть не дисковый файл, а образ
памяти, я пока не могу сообразить. Просто, мне нужно при переходе от записи
к записи в таблице БД проигровать содержимое поля с образом муз. файла,
причем минимизировав время на "раскачку". Я думаю, что саму музыку лучше
хранить не в BLOB, а в MEMO-поле. Но как это содержимое играть - не знаю. А
очень хотелось бы узнать. Буду благодарен за любые советы!

С уважением. Вадим.



Ответить.

Ответ 1:


Вопрос 297:

От: Андрей Щавелев

Вопрос:

Ситуация: из программы, написанной на Delphi, запускается DOS-задача (например,
rar.exe):

shellexecute(0, 'open', 'rar.exe' , <параметры>, nil, SW_HIDE);


Вопрос: Каким образом организовать ожидание завершения этой DOS-задачи? Т.е.
Надо подождать, пока заархивируется файл, и далее обработать его.

Спасибо.

Андрей.
----
Бесплатная почтовая служба http://mail.Rambler.ru/
Тетя Ася? Rambler Ego! http://www.rambler.ru/odigo/download.html


Ответить.

Ответ 1:


Вопрос 298:

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

Доброе время суток!

Господа, подскажите как из Delphi правильно сделать отчёт в Word'e по
шаблону, (а то методом научного тыка ни фига не получается) или
подскажите где взять имено такую документацию (в смысле: создание
отчётов по шаблону).

Заранее благодарен.

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


Ответить.

Ответ 1:


Вопрос 299:

От: Galya M. Fedorkiv

Добрый день!

Работая с Delphi 5, столкнулась со следующей проблемой. Она состоит в следующем.
Для построения отчетов использую компонент QuickRep. Если на компе
установлен драйвер к матричному принтеру все работает и печатает
нормально. Если же установить драйвер к лазерному принтеру -
невозможно ни запустить exe-шник данного проекта, ни даже открыть
проект в самом Delphi (не открывается модуль, который содержит этот
компонент). Возникает конфликт с драйвером принтера и программа
закрывается.
Если установить одновременно драйвера к матричному и лазерному
принтеру, поставив по default-у матричный принтер - можно работать
(проект запускается, exe-шник запускается и работает нормально) пока
дело не доходит до распечатывания отчета. Если руками поменять драйвер
принтера на лазерник - он отчет напечатает, но потом все равно
вывалится.
Может Вы можете что-то посоветовать. Заранее благодарна.:




Ответить.

Ответ 1:


Вопрос 300:

От: Vladimir Zabludovsky

Добрый день!
Не налетал ли кто на такую штуку :
Delphi5 + MSSQL 7 - Вызываю хранимую процедуру через компонент ADO.
Если просто запускаю скомпилированный .exe - все работает,а если проделываю
то-же самое под delphi , то SQL возвращает синтаксические ошибки (как будто в
SP просто не дописана).
Может кто знает как с этим бороться.

Заранее Спасибо!
С Уважением,
Владимир.




Ответить.

Ответ 1:


Вопрос 301:

От: "Лобастов Николай"

Доброе время суток.

Я пытаюсь создать объект:

TDocument = class(TComponent)
end;

Так вот, в этом классе должны быть поля BrowseForm и EditForm
Вот так:

TDocument = class(TComponent)
BrowseForm: TBrowseForm
EditForm: TEditForm
end;

Это обычные окна. BrowseForm содержит DBGrid и несколько Button.
Объект Document должен иметь метод Browse для открытия окна BrowseForm.
Вот тут-то и проблема. Окна я использую fsMDIChild. Они при создании
сразу же являются миру.
Поэтому я не могу их создавать при создании Document. Да это и не нужно.
Лучше создавать по мере надобности и уничтожать после использования.
Теперь создаем объект
TPlatejka = class(TDocument).
Окно BrowseForm уже не
отвечает своим требованиям и нужно окно TPlatBrowseForm =
class(TBrowseForm).
И как мне подключить это окно к объекту TPlatejka. Я пробовал создать
свойство
BrowseForm. Но присваивать BrowseForm := TPlatBrowseForm.Create(Self) не
могу, т.к.
Окно сразу же появляется. И как в таком случае описать метод Browse в
объекте
Document и в объекте Platejka. И вообще нужно ли инкапсулировать объект
BrowseForm в
Document.
И как создать такой компонент? Возникает куча проблем. Можно ли в одном
компоненте использовать несколько окон. Насколько я понимаю производные
от TForm нельзя поместить на палитру. Их можно только вызывать из меню
New.
Если кто такое уже делал, буду очень признателен за
предоставленный код.

С уважением, Николай.


Ответить.

Ответ 1:


Вопрос 302:

От: Mikhail A. Loginov

Вопрос имеющим опыт написания ISAPI-приложений, работающих с базами данных.
Решил ли кто-нибудь проблему постраничного вывода выборки данных в таких
библиотеках?
Речь идет о возможности просмотра многострочной выборки порциями, по
страничкам. Видел решения средствами SQL, но они работают в определенных
условиях (есть ключ и выборка отсортирована по этому ключу).
В ASP имеется возможность использовать методы ADODB.RecordSet такие как
PageSize, AbsolutePage, PageCount, которые позволяют осуществить свободную
постраничную навигацию по выборке любой длины.
Я не нашел в Delphi интерфейса к таким методам ни для ADO ни для BDE.



С уважением,

Mikhail Loginov








Ответить.

Ответ 1:


Вопрос 303:

От: Nikiforov V.A.

Существует ли возможность уже работать с результатом запроса
к БД, пока он ещё до конца не выполнился? (по принципу Интернета)
:


Ответить.

Ответ 1:


Вопрос 304:

От: "Бузуверов Михаил"

Здравствуйте!!!
Подскажите пожалуйста, как сделать взаимодействие между
двумя Delphi-приложениями в локальной интрасети, работающей по протоколу
TCP/IP. Если можно, пришлите пример с исходником на e-mail.

Заранее благодарен, Бузуверов Михаил

mailto: Buzuverov@nvk.ru <mailto:Buzuverov@nvk.ru>


Ответить.

Ответ 1:


Вопрос 305:

От: oilplant

Добрый день, Дмитрий!

Меня интересует такой вопрос:
Возможно ли при загрузке файла в RichEdit
автоматически использовать перекодировку символов DOS -> Windows,
если это не возможно, подскажите,
как это лучше сделать.
А то при обработке каждого символа этот процесс занимает много
времени.

Заранее благодарен. Дмитрий.

mailto:dabadabiabo@mail.ru

Если возможно, ответьте до новой рассылки.




Ответить.

Ответ 1:


Вопрос 306:

От: Igor Tolstik (www.irop.de)

Здравствуйте!
Слышал, что существует программа, которая показывает текст кода
программы.
Это правда? Знает кто-нибудь где можно её найти и опробовать?
Я не хочу взламывать другие программы, а хочу быть уверенным в своей
защите.
Благодарю. Игорь www@irop.de <mailto:www@irop.de>


Ответить.

Ответ 1:


Вопрос 307:

От: Nostradamus

:Здравствуйте,

У меня такая проблема: я сделал ловушку :
SetWindowsHookEx(WH_Shell, ... и тд). Эта ловушка ловит создание и удаление
окон других приложений и посылает сообщение основной программе (ловушка в dll конечно). Проблема состоит в том что все пойманные ловушкой окна не
появляются в трее как будто у них isLibrary в True стоит. Как этого избежать?



Ответить.

Ответ 1:


Вопрос 308:

От: Jura Goliakov


Вопрос

Привет.
Пытаюсь написать 3D-game.
Необходимо сделать быстрый вывод на экран или форму прямоугольника пикселов
из массива TColor? Поточечный вывод, ScanLine, перевод в BMP - слишком
медленны. Вроде, надо как-то использовать память (Z-буфер), но я в этом
чайник. Нужен пример.



Ответить.

Ответ 1:


Вопрос 309:

От: Vladimir

Доброго всем!!!

Может, кто-то поможет
1) Дано: проект с формой, на ней компоненты (rxtrayicon, rxpopupmenu, timer)
Можно ли сделать проект с этими компонентами, но без формы, чтобы программа
сразу лезла в трей,
а при необходимости можно было бы вызывать форму (с другими компонентами)
например, из DLL?
Конечно, если такое возможно.
2) Можно ли закрасить форму с переходом цветов не по горизонтали или
вертикали, а под углом?


Буду очень признателен за любую помощь

Заранее большое спасибо



Ответить.

Ответ 1:


Вопрос 310:

От: Oleg Klimchuk

Для построения отчетов использую QReport.
Но появилась необходимость печатать не на листовую
бумагу, а на рулонную, т.е. без разделений на листы.
Подскажите как это сделать. В хелпах я не обнаружил.


Ответить.

Ответ 1:


Вопрос 311:

От: Okulov

Здравствуйте!!!!
: Вот такая проблема.
Я выполняю процедуру
procedure TForm1.FormKeyDown(Sender: TObject; var
Key: Word; Shift: TShiftState);
т.е обработка нажатия клавиши,а мне надо такая штука:

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


Best Regards!
Sniper
http://www.okulov.boom.ru <http://www.okulov.boom.ru>


Ответить.

Ответ 1:


Вопрос 312:

От: SAM

Добрый день, Дмитрий.
Очень нужна информация о том, как зарегистрировать файл *.ocx в системе.
Помогите, если можете.
Sam Savinov



Ответить.

Ответ 1:


Вопрос 313:

От: SAM

В моем проекте используется ActiveX-компонента, OCX-файл.
Вопрос: каким образом из программы зерегистрировать ее на другом компьютере?
Sam



Ответить.

Ответ 1:


Вопрос 314:

От: SAM

Попробую...
Sam
P.S.: Спасибо

-----Original Message-----
From: Тарасов Дмитрий Владимирович [mailto:dtarasov@kms.dvgd.ru]
Sent: Tuesday, June 19, 2001 1:15 AM
To: SAM
Subject: Re: delphiV


Добрый день.

> Вопрос: каким образом из программы зерегистрировать ее на другом
компьютере?

Есть утилитка виндовая - regsvr32 помоему. Ей в параметрах можно
указать имя *.ocx. А запустить ее из программы не сложно -
ShellExecute.


ICQ : 89533941
mailto:Dtarasov@kms.dvgd.ru (МПС-*.mps)



Ответить.

Ответ 1:


Вопрос 315:

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

Здраствуйте господа программисты!

Я создал документ Word из Delphi, а теперь мне надо его прочесть с
помощью Delphi и вывести в окне, чтобы потом можно было распечатать и
т.п.

Господа подскажите как мне это можно осуществить, с помощью чего
(TOLEComponent - не пойдёт т.к. у него не полос прокрутки и фон всё
время clBtnFace)?

Заранее, спасибо за ответы...

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


Ответить.

Ответ 1:


Вопрос 316:

От: ksergej

Вопрос:
(Инструментарий: Delphi 3, MS SQL Server 7.0)

Есть некая хранимая процедура с фрагментом:
...
IF EXISTS(SELECT Name FROM Sysobjects WHERE Name= @Proc_Name)
BEGIN
SELECT @Exec_String= 'EXECUTE '+ @Proc_Name+ ' '+ CONVERT(varchar, @ID_Route)+ ', '''+ CONVERT(varchar, @Create_Date)+ ''', '+
CONVERT(varchar, @ID_Worker)+ ', '+ CONVERT(varchar, @Doc_Type_ID)+ ', '+ CONVERT(varchar, @ID_Worker)
EXECUTE(@Exec_String)
END
...
Из SQL Server Query Analyser все работает как часы, корректно, но при выполнении из приложения (на Delphi) или SQL Explorer, вызываемая процедура (@Proc_Name) не "дорабатывает" до конца, процесс как бы заканчивается на определенном этапе (не путать с зависанием). В чем проблема не понятно.

Максимальная вложенность вызова хранимых процедур достигает 6 уровней (сервер поддерживает до 32)


С наилучшими пожеланиями, Сергей К.
mailto:ksergej@mail.ru






Ответить.

Ответ 1:


Вопрос 317:

От: Laykhov Denis


Добрый день!

Есть несколько вопросов:
Если можно то с примерами т.к. я еще user в этом не легком деле.
1. Как перекинуть все данные из *.dbf в *.db
2. Как проиндексировать программно базу с расширением *.dbf в *.db
3. Каким путем можно добиться доступа к базе данных без BDE Administrator


С уважением, Денис!




Ответить.

Ответ 1:


Вопрос 318:

От: Оскирко Дмитрий Сергеевич

Уважаемый DTarasov,

Подскажите пожалуйста как заставить ДЕЛФИ понимать казахский язык.

--
Всего наилучшего,
Оскирко Дмитрий Сергеевич mailto:dmitrii_o@mail.ru http://dmitrii.narod.ru
ICQ: 91134112
Как бы далеко ты ни зашел по неправильному пути, возвращайся.




Ответить.

Ответ 1:


Вопрос 319:

От: Anatoly Zhukov

Hi! На форме имеется несколько кнопок TBitButton. Как написать
процедуру, чтобы кнопка TbitButton работала так, как TSpinButton, т.е.
при кратковременном нажатии некоторая процедура отрабатывалась
однократно, а при удержании кнопки в нажатом состоянии эта процера
работала циклически до момента отпускания кнопки? Спасибо.

Anatoly Zhukov
adm@adaptex.unets.ru <mailto:adm@adaptex.unets.ru>


Ответить.

Ответ 1:



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


Вопрос 106:

От: aleks

Как из программы на Delphi узнать текущую маску подсети? Очень необходим
пример. Заранее спасибо.


Ответить.

Ответ 1:


Вопрос 107:

От: Serj

привет. я на досуге сделал простенький радио тюнер и програмку для него
соответственно тоже, но есть маленькое неудобство: из програмки
невозможно регулировать громкость.
Как из программы на дельфи считывать и записывать (регулировать) аудио
параметры? Я специалист неважный, по этому желателен небольшой пример.
Заранее благодарен за столь нужный мне совет.



Ответить.

Ответ 1:


Вопрос 108:

От: Миленький

Хотел сделать, чтобы SpeedButton, когда на нее жмеш правой кнопкой мыши
меняла своё свойство enabled на противоположное, т.е. если было
enabled=true, то стало ensbled=false и наооборот. Но столкнулся с двумя
проблемами:
1. Как распознать правый клик? В стандартных events-ах его нет.
2. Если на кнопку с enabled=false тыкаеш даже левой кнопкой, то она ни как
не реагирует, то есть не создается ни какого события.
Как быть? Что делать? Если кто знает подскажите пожайлуста.
SuperD


Ответить.

Ответ 1:
1. Для обработки щелчка правой кнопки мыши по SpeedButton используйте обработчик OnMouseDown, а используя
параметр Button, удостоверьтесь в том, что нажата нужная клавиша мыши.

2. Если внутри этого обработчика вы установите свойство Enable в False, то тем самым вы отключите и
сам обработчик. Вообще, это неверный подход - запрещать/разрешать компонент только через его
собственные обработчики событий.
Ответ 2:
Пишешь процедуру нажатия кнопки мыши НА ФОРМЕ, не на твоей кнопке:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (button = mbright)
then if (Sender = SB)
or
((x > sb.left)
and (x < sb.left+sb.width)
and (y > sb.top)
and (y < sb.Top+sb.height)
)
then SB.Enabled := not SB.Enabled;
end;

* здесь "sb" - "SpeedButton"

А потом в окне имени процедуры OnMouseDown ТВОЕЙ КНОПКИ выбираешь эту процедуру.

Работает.
Ответ 3:
Для распознавания событий мыши имеются специальные обработчики OnMouseXXX.
В Вашем случае необходимо использовать обработчик OnMouseDown или OnMouseUp.
Разница между ними лишь в том, что первое событие происходит при нажатии
клавиши,
а второе - при ее отпускании.

Один и другой метод имеют одинаковые параметры.
(Sender:TObject; Button:TMouseButton; Shift:TShiftState; X, Y: Integer)
где
Sender - указатель на объект-источник события
Button - определяет нажатую клавишу мыши
может быть типа mbLeft, mbRight, mbMiddle
Shift - множество, определяет вспомогательные нажатые клавиши
может быть типа ssSift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble.
X and Y - координаты курсора.

Пример реализации задачи:

procedure TForm1.ButtonMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Sender=Button2)
then
if (Button=mbRight)
then if (y>0)
then if (y<25)
then if (x>0)
then if (x<75)
then begin
if Button2.Enabled=True
then Button2.Enabled:=False;
end else Beep;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Sender=Form1)
then
if (Button=mbRight)
then if (y>100)
then if (y<125)
then if (x>40)
then if (x<115)
then begin
if Button2.Enabled=False
then Button2.Enabled:=True;
end;
end;

Прошу обратить внимание на тот факт, что когда компонента (например Button)
выключена,
то ее как бы не существует. По этому, что бы ее активизировать, необходимо
кликать в то место формы
где она расположена.
В первой функции проверка координат не нужна, но Вы можете подумать и найти
ответ на вопрос:
Почему там проверяются координаты, отличны от координат второй функции?


Вопрос 109:

От: lenick


Как выцепить имя пользователя компьютера в DELPHI?


Ответить.

Ответ 1:
BOOL GetUserName(

LPTSTR lpBuffer, // address of name buffer
LPDWORD nSize // address of size of name buffer
);
Ответ 2:
Var
Buf:PChar;
Kol:DWord;

Kol:=16;
GetUserName(Buf,Kol);
Ответ 3:
function GetSystemUserName: string;
var
S: array [Byte] of Char;
nSize: DWORD;
begin
FillChar(S, SizeOf(S), 0);
nSize := SizeOf(S);
GetUserName(S, nSize);
Result := S;
end;
Ответ 4:
Для определения имени пользователя системы используют функцию API
GetUserName. Однако, как ни странно, определить достаточно сложно, в
то время как имя компьютера не составляет никаких проблем:

procedure TForm1.Button1Click(Sender: TObject);
var
compnm:array[0..50] of Char;
i:integer;
comp:boolean;
begin
comp:=null;
for i:=0 to 50 do
begin
comp:=GetComputerName(compnm,i);
if comp=true then
begin
Label1.caption:=strpas(compnm);
Exit;
end;
end;
end;

Для функции GetUserName структура определения полностью идентична
структуре функции GetComputerName. Теоретически, заменив
GetComputerName на GetUserName, можно получить имя пользователя,
однако практически, это вызовет ошибку. Можно конечно определить имя
пользователя и через реестр:

var
reg:Tregistry;
begin
reg:=Tregistry.create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\',false);
Label7.Caption:=reg.ReadString('RegisteredOwner');
reg.CloseKey;
reg.Free;
end;

причем определение происходит на 100%
Ответ 5:
Спрашивала lenick, что "Как выцепить имя пользователя компьютера в DELPHI?"
Делается так:

uses
Windows, Registry, SysUtils;

///////////
var
Reg:TRegIniFile;
User:string;//имя юзера
Comp:string;//имя компа


///////////

;//где-то в программе

Reg:=TRegIniFile.Create('');
Reg.RootKey:=HKEY_LOCAL_MACHINE;
//имя компа

Comp:=Reg.ReadString('System\CurrentControlSet\Control\ComputerName\Computer
Name', 'ComputerName', '');
//имя юзера
User:=Reg.ReadString('System\CurrentControlSet\Control','Current
User','');
Reg.Free;

///////////


Вопрос 110:

От: "Кравец Станислав"


Добрый день.

> > Здравствуйте! У меня вопрос: возможно ли блокировать Ctrl+Alt+Del в
> > WinNT?
> > SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, 0, 0); работает только
> > под Win95/98.
> > Если знаете, ответьте скорее, пожалуйста, сроки поджимают.
>
> Сам не пробовал, но основная идея такова - зацепить на Ctrl+Alt+Del
> горячую клавишу и ничего по ней не делать:
> KeyboardProc или SetWindowsHookEx из WinApi.
>
Дело в том, что WinNT перехватывает Ctrl+Alt+Del раньше и хук не вызывается



Ответить.

Ответ 1:


Вопрос 111:

От: Serge V. Frolov

Подскажите как с помощью Windows Api можно определить
наличие компьютера в сети. В настоящее время для этого
использую компоненту TICMP (наличие компьютера проверяется
Ping'ом). Кому интересно могу поделиться.




Ответить.

Ответ 1:


Вопрос 112:

От: Eremenko Vitaly

Как в Delphi можно работать с Windows Socket 2.


Ответить.

Ответ 1:


Вопрос 113:

От: Завилов В.Н.

Допустим я создаю некое приложение и хочу чтоб оно добавляло в
контекстное меню проводника некоторые пункты ( например как WinZip).

Каким образом (в общих чертах) это сделать?.

Заранее благодарен всем кто ответит.


Ответить.

Ответ 1:
function CreateShellLink(const FileName, Description, ShortcutTo,
Parameters,
WorkingDir, IconFileName: string; const IconIndex: Integer;
const RunMinimized: Boolean): Boolean;
var
Obj: IUnknown;
begin
Obj := CreateComObject(CLSID_ShellLink);
with Obj as IShellLink do
begin
SetPath(PChar(ShortcutTo));
SetArguments(PChar(Parameters));
if WorkingDir <> '' then SetWorkingDirectory(PChar(WorkingDir));
if IconFileName <> '' then SetIconLocation(PChar(IconFileName),
IconIndex);
if RunMinimized then SetShowCmd(SW_SHOWMINNOACTIVE);
if Description <> '' then SetDescription(PChar(Description));
end;
Result := SUCCEEDED((Obj as
IPersistFile).Save(PWideChar(WideString(FileName)), True));
end;

Вопрос 114:

От: Igor Kovtonyuk

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


Ответить.

Ответ 1:
Только используя API конкретного принтера


Вопрос 115:

От: Igor Tolstik

Второй вопрос (может он для профи и смешной, но я полдня сидел в
пустую):
Edit1.Text := DateTimePicker1.Date - DateTimePicker2.Date
Поясню: 20.03.2001 - 20.02.2001 = 28
Спасибо
Игорь


Ответить.

Ответ 1:
Edit1.Text := FormatFloat('0', DateTimePicker1.Date - DateTimePicker2.Date);
Ответ 2:
Edit1.Text := IntToStr(Round(DateTimePicker1.Date) - Round(DateTimePicker2.Date));
Ответ 3:
Не знаю точно, но мне кажется, что есть и более легкий способ. Однако я сделал так -
var
Year1,Year2,Month1,Month2,Day1,Day2:Word;
begin
DecodeDate(DateTimePicker1.Date,Year1,Month1,Day1);
DecodeDate(DateTimePicker2.Date,Year2,Month2,Day2);
Edit1.Text:=IntToStr(Year2-Year1)+'y.'+' '+IntToStr(Month1-Month2)+'m.'+' '+IntToStr(Day2-Day1)+'d.'
end;

Alex


Вопрос 116:

От: Vadim S

ДВТ> ShellExecute(h,'open','http://www.irop.de/',nil,'',SW_RESTORE);

И еще один вопрос: А если нужно, чтобы страничка открывалась в
отдельном окне, а не в том, которое уже запущено?


Ответить.

Ответ 1:
ShellExecute(h,'open','IEXplorer.exe','http://www.irop.de/','C:\Program
Files\Internet Explorer',SW_RESTORE);


Вопрос 117:

От: Lslayer

Подскажите, как можно используя ВордАпликейшн открыть док-овский файл.
У меня не получается только показать Ворд на екран, а вообще сам файл я
загружаю, но нигде его не вижу.
Подскажите, плз.
Спасибо

Ответить.

Ответ 1:
Уважаемый Lslayer.

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

procedure TForm1.Button1Click(Sender: TObject);
var
V:Variant;
begin
V := CreateOleObject('Word.Basic');
V.AppShow;
V.FileNew;
V.Insert('Automation is easy!');
end;
Ответ 2:
WordApplication1.Visible:=true;

попробуй так...
Ответ 3:
По поводу открытия док-файла в Ворде

Я делаю так:
1. Прописать в строке uses модуль ShellAPI
2. По нажатию кнопки возникает событие:

procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', 'C:\Мои документы\Пример.doc', nil, nil, SW_NORMAL);
end;

Тогда откроется файл C:\Мои документы\Пример.doc в Word'е


Вопрос 118:

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

Доброе время суток господа!

Помогите чайнику!
Я сделал программу типа клиент/сервер с ипользованием InterBase сервера.
Так вот как теперь эту программу поставить на клиентскую машину (только
по порядку, если можно, а то я чайник в этом деле), и вообще нужно ли
вообще устанавлиавть сам InterBase на клиентскую машину (это очень
неудобно т.к. с программным продуктом предётся поставлять и InterBase
:-( ).
Заранее благодарен за помощь...

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


Ответить.

Ответ 1:
При работе с локальным сервером достаточно установить псевдоним БД (утилита BDE Administrator) и затем
использовать этот псевдоним в компонентах TDatabase и может быть, TTable и TQuery (когда соединение с БД
производится, минуя компонент TDatabase). При доступе к локальному серверу с помощью утилиты WISQL
указывается путь к БД (InterBase работает с БД, используя собственный API, минуя BDE).
При работе с удаленным (сетевым) сервером необходимо "прописать" его на компьютере, с которого
происходит обращение к серверу. При использовании протокола TCP/IP:
1) IP-адрес сервера и имя должны быть описаны в файле HOSTS, например 10.12.0.41 spv
2) протокол доступа к InterBase должен быть описан в файле SERVICE:
gds_db 3050/tcp

Оба указанных файла находятся в каталоге WINDOWS
Удачи!
Ответ 2:
IB cервер должен быть установлен на том компе, где будет лежать база данных, и должен быть запущен (обычно
автозапуском).
Если клиент по сети будет работать с базой на другом компе, то на клиенте достаточно установить IB - клиента (немного
меньше самого сервера).
Иначе ничего работать не будет.
Очень много полезной информации на сайте ib.demo.ru
Ответ 3:
Требуется поставить клиенту Interbase Client (любая инсталляция сервера
также содержит клиентскую часть, хотя последнняя может распространяться
и в виде отдельного инсталлятора.)
Вообще, можно обойтись и без инсталлятора. Детали см. в Interbase Embedded
Installation Guide.

Если ODBC драйвер использовался при написании программы, то требуется
поставить и его. Аналогично в случае с BDE.



Вопрос 119:

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

Господа подскажите, где взять Wise Installer или InstallShield?
Заранее спасибо.

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


Ответить.

Ответ 1:


Вопрос 120:

От: Sergey Sarychev

Господа Программисты!
У меня такой вопрос: Имеется обычная таблица в DBF формате.
При вызове метода Delete компоненты TTable текущая запись помечается
на удаление, но не удаляется физически. Как программно выполнить
запаковку этой таблицы (т. е. физическое удаление всех записей, помеченных
на удаление)?

С наилучшими пожеланиями, Сергей.


Ответить.

Ответ 1:
dbiPackTable(Table1.Handle);

Вопрос 121:

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

Господа программисты - здраствуйте!

Подскажите, как подключить компонент FIBPlus - TFIBQuery к DBGrid? У
меня ни как не получается! Может быть необходимо использовать другие
специальные компоненты, типа DBGrid, но тогда где их взять?

Спасибо за ответы.

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


Ответить.

Ответ 1:
А datasource когда отменили?

Вопрос 122:

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

Доброе время суток!

У меня вопрос по Interbase. Я использую TRIGGER (Before Insert) для
автоматического заполнения поля определяющего индентификационный номер
покупателя. И после выполения оператора вставки компонента TIBQuery:
qryBuyers.Insert; ничего не происходит :-(
В чём может быть дело?

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


Ответить.

Ответ 1:
Алексей. Значение поля, в которое пишет тригер обновляется только после коммита. Попробуйте не использовать триггер,
а организуйте добавление в таблицу не напрямую, а через интерфейс хранимой процедуры и все будет хорошо.
Ответ 2:
Привет...опять. :)
После того как ты сделал вставку, необходимо сделать Commit или CommitRetaining транзакции твоего запроса (это не
обязательно , но желательно, если хочешь, чтоб изменения зафиксировались в базе), а потом делаешь Close-Open своему
запросу - все появится, правда не спозиционируется на вставленную строку :) - дальше думай


Вопрос 123:

От: Иван Варанкин

Hello DTarasov,

Здравствуйте. Как с помощью Delphi вызвать адресную книгу и
обработать результат?

--
Best regards,
Иван mailto:varankin@mail.kz icq#110199023




Ответить.

Ответ 1:


Вопрос 124:

От: КТ


Вопрос:

Если это возможно привдите пример использования компоннты ImageList.

Заранее благодарен
Oleg K.
kovink@beep.ru


Ответить.

Ответ 1:
Приходилось использовать компонент TImageList в следующем варианте:

1)Разместить компонент TImageList на форме. Задать имя, например
ImageListComp.

2) Заполнение списка
{Загрузка изображений компонентов (bmp) из заданного каталога по имени
находящемуся в таблице TableI}
If not ImageIsLoad then
begin
Form1.Caption := 'Загрузка образов компонентов ...';
If MainForm.ImageListComp.Count <>0
then MainForm.ImageListComp.Clear;
Form1.Tablei.First;
While not Form1.Tablei.EOF do
begin
Comp:=Form1.Tablei.FieldByName('CN').AsString;
Bitmap3.LoadFromFile(IniFile.ReadString 'vispa','puust','ERROR')+
'bmplib\' + Comp);
MainForm.ImageListComp.Add(Bitmap3,nil);
Form1.Tablei.Next;
end;
end;{If}
ImageIsLoad:=True;

3)Использование списка

{Настройка таблицы изображений на компонент}
Form1.Tablei.SetKey;
Form1.Tablei.FieldByName('CN').AsString := Comp;
Form1.Tablei.GotoKey;
{Получить номер записи в базе, то есть номер образа в списке}
NumImComp:= Form1.Tablei.RecNo;

{Загрузка шаблона изображения компонента в Bitmap3}
MainForm.ImageListComp.GetBitmap(NumImComp-1,Bitmap3);

Ограничение: Все графические файлы должны иметь одинаковый размер.


Вопрос 125:

От: Andrey Prigara

Вопрос: вопрос не столько по программированию, сколько по алгоритмам. Не
сталкивался ли кто нибудь с вейвлет-преобразованием? Если да - откликнитесь,
хотелось бы обсудить эту тему. Со своей стороны могу предложить ряд ссылок
на русско- и англоязычные ресурсы на эту тему.
С уважением, Андрей.



Ответить.

Ответ 1:



3. Ищу подельника.
------------------
Astanin Dmitry:
Ищу желающих помочь мне в создании программы, обеспечивающей
одновременный доступ нескольких пользователей с
разных компьютеров в лок. сети (в этом я вообще чайник) и аудит
событий с сохранением результатов в защищенном
файле .. Дима kinch-ch@mail.ru

Лобастов Николай:
Здравстуйте, господа программисты.

У меня в голове куча идей, только не знаю куда с ними сунуться.
Два дня назад пришел к одному выводу и хочу с вами
поделиться. Может кто уже так делает. Может кто дельный совет даст.

Я работаю в банке в отделе разработки и столкнулся с тем, что мы часто
повторяемся в написании каких-то вещей.

Что такое хоз. деятельность любой организации? Это производство мат.
ценностей или услуг и ведение учета и отчетности. К чему сводится
отчетность? К документообороту. Что такое документ? Это объект с набором
свойств и методов. Никому не приходилось создавать компоненты TDocument,
TPlategka, TPKO, TRKO? Можно описать такие свойства как база данных, таблица,
номер, дата, название, методы такие как создать документ, провести документ,
распечатать документ и все это разместить на палитре компонент. И при
разработке чего-то еще нового в организации или в какой-то
фирме для организации просто кидаешь их на форму или в датамодуль
и описываешь реакцию на события.

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

Жду ответов и предложений. - Lobastov@kedr.kts.ru




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

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

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

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

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



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

В избранное