Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Декабрь 2004 → | ||||||
3
|
4
|
|||||
---|---|---|---|---|---|---|
6
|
7
|
8
|
10
|
11
|
||
13
|
14
|
15
|
16
|
17
|
19
|
|
20
|
21
|
22
|
23
|
24
|
26
|
|
27
|
28
|
30
|
31
|
Статистика
-1 за неделю
Программирование на DELPHI в вопросах и ответах #7
Информационный Канал Subscribe.Ru |
Программирование на Delphi в вопросах и ответах.
|
||||||||||||||||||||||||
Со времени выхода предыдущего выпуска нашей рассылки пришло 5 вопросов, поэтому отвечайте на них! Радует то, что пока ещё не было задано таких вопросов, ответов на которые бы не прислали. На вопрос 11 (про иконку в трее) прислали ответ. Но это был явно не ответ, а целая статья! Причём даже с рисунками. Поэтому как ответ на вопрос, не засчитано, зато опубликовано как статья... А вообще, рекомендую использовать специализированные для этого компоненты. Их много на портале http://www.torry.net/. Если вы ещё не знаете об этом замечательном сайте, спешите заглянуть! Вот сам с удовольствием пользуюсь CoolTrayIcon - есть всё, что нужно. Закончен опрос " Программы какого направления вы создаёте?". Пришло всего 43 голоса! Вот такие результаты:
Как видно из результатов, основное направление - программирование баз данных. Остальные типы программ являются неопределёнными. Однако сказать здесь однозначно нельзя. Лично я, например, написал как минимум одну программу по каждому из предложенных типов... В следующем выпуске рассылки будет открыт новый опрос. Пока - отдыхаем ;) Правила нашей рассылки: |
||||||||||||||||||||||||
Размещение значка приложения в System Tray Часто программисту приходится сталкиваться с задачей написания приложения, работающего в фоновом режиме и не нуждающегося в месте на Панели задач. Если вы посмотрите на правый нижний угол рабочего стола Windows, то наверняка найдете там приложения, для которых эта проблема решена: часы, переключатель раскладок клавиатуры, регулятор громкости и т. п. Ясно, что, как бы вы не увеличивали и не уменьшали формы своего приложения, попасть туда обычным путем не удастся. Способ для этого предоставляет Shell API. function Shell_NotifyIcon(dwMessage: DWORD; Параметр dwMessage определяет одну из операций: NIM_ADD означает добавление значка в область, NIM_DELETE — удаление, NIM_MODIFY — изменение. const WM_MYTRAYNOTIFY = WMJJSER + 123; Примечание procedure TForml.WMICON(var msg: TMessage); Обратите внимание, что при показе всплывающего меню недостаточно просто вызвать метод Popup. При этом нужно вынести главную форму приложения на передний план, в противном случае она не получит сообщений от меню. procedure TForml.HideMainForm; Теперь у вас в руках полноценный набор средств для работы с панелью System Tray. В заключение необходимо добавить, что все описанное реализуется не в операционной системе, а в оболочке ОС — Проводнике (Explorer). В принципе, и Windows NT 4/2000, и Windows 95/98 допускают замену оболочки ОС на другие, например DashBoard или LightStep. Там функции панели System Tray могут быть не реализованы или реализованы через другие API. Впрочем, случаи замены оболочки достаточно редки. Присылайте свои статьи по адресу delphi-faq@list.ru с темой 'Clause' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки. Большая просьба: статью оформляйте в -txt или -doc формате и используйте -zip или -rar сжатие (без самораспаковки). |
||||||||||||||||||||||||
12. Привет. Может, кому-нибудь из читателей, удалось написать утилиту, показывающую все активные TCP/IP соединения (аналог Netstat) на Delphi без использования Fnugry Netstat Components. Поделитесь пожалуйста исходником, а то дядька Google мне отказался с этим помочь. [Ответить]. 13. Где можно скачать Delphi 6? [Ответить]. 14. Скажите, как узнать занятость принтера и передать задачу на другой принтер сети! [Ответить]. 15. zdrastvuyte.Mojete skazat kak ya mogu vibrat komponent iz drugogo Application? Naprimer V drugom App.
ya ispolzoval s odnogo Edit-a ili on mojet bit ne vizualnim. I xochu shto dobavit kod novuyu Application( pervomu Form-u OnCreate ) shtobi on avtomaticheski vibral tu Componentu kakuyu ya dam v kode. Zaranee blogodoren. [Ответить]. 16. Расскажите или хотя бы намекните как работать с тенями и отражениями в 3D графике (DirectX /OpenGL). Буду благодарен любому ответу. [Ответить]. 17. Здравствуйте. Как двойным щелчком мышки по URL, скопоровать его в TMemo? [Ответить]. |
||||||||||||||||||||||||
11. (Создание иконки программы с системном трее). Пусть угол L-угол поворота стрелки (В РАДИАНАХ!!!), Length - длина, а X,Y - её ось вращения. Тогда координаты конца стрелки: Ещё надо учесть, что ось Y направлена не снизу вверх, как принято в геометрии, а сверху вниз. Поэтому координаты будут такими: Потом пихаешь на форму компонент TTimer с вкладки System, задаёшь ему интервал не более 100 миллисекунд и на событии OnTimer пишешь примерно следующее: procedure TForm1.Timer1Timer(Sender: TObject); procedure DrawAxis(X,Y,Angle,Length:Integer); begin Теперь работа с треем. Для этого нужно включить модуль ShellApi. Вот весь код (надо ещё пихнуть на форму какой-нибудь Button1): unit Timer; interface uses const type var implementation {$R *.DFM} // отрисовываем стрелки (лучше сделать для данного примера форму размером 200x200) procedure DrawAxis(X,Y,Angle,Length:Integer); begin //обрабатываем события на иконке в трее // добавляем иконку в трей // при удалении формы её надо удалить из трея // нажатие на кнопку прячет приложение в трей end. [Отвечает: Андрей Лучников]. Самый простой способ - воспользоваться rxLib, хотя есть и другие способы. Если надо, чтоб программа стартовала сразу в Трее, то в в dpr (запускающем модуле проги) указать Application.ShowMainForm:=False; 8. (Передача данных по порту USB). [Отвечает: Садовников Владимир]. Насчёт USB точно не знаю, но могу привести пример, как я работал с СОМ. Каждый порт в Windows можно представить как файл. Для него и есть специальные функции: Может, это тебе чем-нибудь поможет (отрывочек из одной моей проги, информацию смотрел, кажется, в MSDN Library (April 2000))... Пример работает! type implementation { TComThread } constructor TComThread.Create(Port:Integer;Speed:Integer;BufferSize:Integer); Name:='COM'+IntToStr(Port); RxQueue:=TCyclicQueue.Create(FBufSize); idComDev:=CreateFile(PChar(Name), if (idComDev=$FFFFFFFF) then with dcbCom do Res:=SetCommState(idComDev,dcbCom); FInitialized:=Res; destructor TComThread.Destroy; SetCommMask(idComDev,0); // purge any outstanding reads/writes and close device handle CloseHandle(idComDev); RxQueue.Destroy; inherited Destroy; procedure TComThread.Execute; // create I/O event used for overlapped read if (osRead.hEvent=0) then if (not SetCommMask(idComDev,EV_RXCHAR or EV_TXEMPTY)) then while (True) do WaitCommEvent(idComDev,dwEvtMask,nil); //NULL - os if ((dwEvtMask and EV_RXCHAR) <> 0) then if ((dwEvtMask and EV_TXEMPTY) <> 0) then function TComThread.ReadCommBlock(var Data: array of Byte): Integer; if (dwLength > 0) then end. [Отвечает: Alexander Prishchepa]. Ты полез в страшные дебри!!! Могу сказать одно. Нет универсального способа. С USB контроллером должен поставляться драйвер и, если это для разработчиков, то API к этому драйверу. Я по работе имел дело с контроллером Cypress FX2. К нему шел заголовочный файл (.h) и библиотека (.lib) для С++. Поэтому из Delphi это не реально. Пришлось переквалифицироваться под BCB. Правда, существует еще такой пакет - Jungo WinDriver. Это универсальная обертка под железо. В ней можно создать тестовый, консольный проект на Delphi, а потом уж сидеть и смотреть, что из этого вышло. Пробуй, смотри. P.S. Будь добр, сообщи мне с каким контроллером тебе надо работать, а так-же его характеристики (USB 1.1 или 2.0 Full Speed или High Speed). 9. (Программа для имитации мультимедиа-клавиатуры). [Отвечает: Садовников Владимир]. Насчёт проги. library Dll; uses {$R *.RES} var SysHook:HHook=0; function SysMsgProc(Code:Integer;wParam:Word;iParam:LongInt): begin Result:=CallNextHookEx(SysHook,Code,wParam,iParam); //вызываем следующий обработчик procedure RunStopHook(State:Boolean) export; stdcall; exports RunStopHook index 1; begin Компилируем библиотеку. Теперь пишем саму программу: program KeyLogger; procedure RunStopHook(State:Boolean);external 'Dll.dll'; begin Универсальности относительно проигрывателей тут трудно достичь. Нужно знать: 10. (Определение размера файла, большего 10 Gb). [Отвечает: Садовников Владимир]. По-моему, проблема в том, что Integer может содержать в себе значение длины файла только максимум в 2 Гб, да и в файловой системе FAT32 нет файлов больше 2 Гб. Однако попробуй что-то вроде GetFileSizeEx. В MSDN она описана как: BOOL GetFileSizeEx( В Delphi5, например, нет описания этой функции. Естественно, она появилась только в Windows2000. Но её легко подключить: function GetFileSize(hFile:THandle, var Int:Int64):Boolean;external 'kernel32.dll';stdcall; Вот, собственно, говоря, и всё... [Отвечает: Sandro]. Размер файл а привяза к размеру блока, увелич размер блока 4Кб (кстати точнее все равно глупо даже НТФС блок 4Кб) или больше, и тогда размер фалйла будет равен GetFileSize*РазмерБлока. [Отвечает: Alexander Prishchepa]. var Вы также можете ответить на предыдущие вопросы. Поскольку на них уже ответили как минимум раз, они больше не публикуются в рассылке. Но если вы можете что-то добавить к ответам других, пожалуйста, отвечайте - ответы будут опубликованы. Найти предыдущие вопросы вы можете в архиве рассылки: http://subscribe.ru/archive/comp.soft.prog.delphifaq/, либо на сайте рассылки (http://www.delphi-faq.fatal.ru). |
||||||||||||||||||||||||
Здесь представлены ссылки на дружественные сайты нашего портала. Если вы тоже хотите стать нашим другом, разместите баннер на главной странице своего сайта. Подробнее о том, как стать "другом", можно прочитать здесь: http://www.delphi-faq.fatal.ru/banner.htm. http://infomania2004.webhost.ru/ - Этот сайт создан для того, чтобы вы могли получить интересующую вас информацию с минимальными затратами сил и времени. Если вы не нашли здесь нужной информации, вы можете оставить заявку на ее поиск. Как только информация будет найдена, она появится на сайте, а вам сообщат об этом. |
||||||||||||||||||||||||
Программист ночью сидит за компом, в отладке. К нему подходит сынок, долго смотрит в монитор, потом смотрит в окошко и кричит: Мышь. Оптическая. С прицелом. Коврик для мышки выполнил недопустимую операцию и будет свернут. - В кого бы вы выстрелили, если бы оказались в одном лифте с Усамой Бен Ладеном, Гитлером, Сталиным и Билл Гейтсом и у вас был бы один револьвер с двумя патронами? Разговаривают два активных пользователя Сети: Присылайте свои "компьютерные" анекдоты по этой ссылке: delphi-faq@list.ru и они обязательно будут опубликованы! |
||||||||||||||||||||||||
Товарищи программисты! Проявляйте свою активность. Давайте помогать друг другу! |
||||||||||||||||||||||||
Сайт рассылки: http://www.delphi-faq.fatal.ru E-mail: Delphi-FAQ@list.ru |
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.delphifaq |
Отписаться |
В избранное | ||