К вопросу №996 (Можно ли определить какие команды отправляет программа на устройство подключенное к com-порту). Среда Win2000, программа чужая, с SoftIce 4.05 проблема, видимо не дружит с моей видеокартой (ATI Radeon 8500), нажимаю CTRL D экран зависает, еще раз CTRL D, экран работает..., окно SI не появляется. В настройках выставлен стандартный видеоадаптер и галочка универсальный видео драйвер. Есть программа PortMonitor, она показывает что отправляется на порты и читается с них, в шестнадцатиричном виде, отправляю такую же последовательность, но устройство ничего не отвечает.
Доброе время суток, nau! На счёт sice могу посоветовать поставить Connectix Virtual PC или VMWare Virtual PC. Там ставишь win98 и проблемы (почти все) с sice'ом отпадают. Только довольно "тормознуто" все работает. З.Ы. Что за устройство? Самопальное? Может не соблюдаются временные интервалы. Ответ отправлен: 08.10.2003, 20:14 Отправитель: Илья Отвечает Cybernetic Creature
Доброе время суток, nau! Как программно установить конфигурацию COM-порта --------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject); var CommPort: string; hCommFile: THandle; Buffer: PCommConfig; size: DWORD; begin CommPort := 'COM1'; {Открываем Com-порт} hCommFile := CreateFile(PChar(CommPort), GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hCommFile = INVALID_HANDLE_VALUE then begin ShowMessage('Unable to open ' + CommPort); exit; end; {Выделяем временный буфер} GetMem(Buffer, sizeof(TCommConfig)); {Получаем размер структуры CommConfig} size := 0; GetCommConfig(hCommFile, Buffer^, size); {Освобождаем временный буфер} FreeMem(Buffer, sizeof(TCommConfig));
{Выделяем память для структуры CommConfig} GetMem(Buffer, size); GetCommConfig(hCommFile, Buffer^, size); {Изменяем скорость передачи} Buffer^.dcb.BaudRate := 1200; {Устанавливаем новую конфигурацию для COM-порта} SetCommConfig(hCommFile, Buffer^, size); {Освобождаем буфер} FreeMem(Buffer, size); {Закрываем COM-порт} CloseHandle(hCommFile); end;
Ответ отправлен: 09.10.2003, 18:34 Отправитель: Cybernetic Creature
Вопрос № 1002
К вопросу №996 (Можно ли определить какие команды отправляет программа на устройство подключенное к com-порту). Среда Win2000, программа чужая, с SoftIce 4.05 проблема, видимо не дружит с моей видеокартой (ATI Radeon 8500), нажимаю CTRL D экран зависает, еще раз CTRL D, экран работает..., окно SI не появляется. В настройках выставлен стандартный видеоадаптер и галочка универсальный видео драйвер.Как заставить его работать??? Есть программа PortMonitor, она показывает что отправляется на порты и читается с них, в шестнадцатиричном виде, отправляю такую же последовательность, но устройство ничего не отвечает. В чем может быть проблема??
Доброе время суток, nau! После открытия com-порта через CreateFile() необходимо с помощью GetCommState() и SetCommState() установить параметры порта (в частности убрать автоуправление RTS и DTR). Затем для установки соответствующих сигналов используется функция EscapeCommFunction().
Procedure ControlRTS; Var S: String; lDCB: TDCB; fHandle: THandle; Begin S:='COM1'; // open port fHandle:=CreateFile( Pchar(S), GENERIC_READ Or GENERIC_WRITE, 0, Nil, OPEN_EXISTING, 0, 0); If fHandle=INVALID_HANDLE_VALUE Then Begin // can't open.... Exit; End; // read settings If Not GetCommState( fHandle, lDCB) Then Begin // can't read Exit; End; // Fill dcb lDCB.BaudRate:=CBR_2400; lDCB.ByteSize:=8; lDCB.Parity:=NOPARITY; lDCB.StopBits:=ONESTOPBIT;
// !!! we will manage RTS ourself !!! ldcb.Flags:=(ldcb.Flags And $FFFFC0FF) Or $00000100; // set comm state SetCommState( fHandle, ldcb); // Here we can manage // Reset RTS EscapeCommFunction( fHandle, CLRRTS); // Set RTS EscapeCommFunction( fHandle, SETRTS); // Close port CloseHandle(fHandle); fHandle:=0; End;
P.S. Надо заметить, что все выходы com-порта являются инверсными. А это значит, что активным сосотоянием порта является 0, а неактивным 1.
Ответ отправлен: 09.10.2003, 18:34 Отправитель: Cybernetic Creature
Вопрос № 1003
Здраствуй народ. Кто знает, как можно получить информацию об очереди печати на Delphi: пусто там или нет, что там и сколько? Система W2000.
Добрый день, Alex! Ищи delphistfaq.chm - там найдешь все, что нужно. В частности:
Приложение: Ответ отправлен: 08.10.2003, 17:59 Отправитель: Boriss Отвечает Cybernetic Creature
Здравствуйте, Alex! Пример показывает, как использовать PrintDlg() для того, чтобы дать возможность пользователю выбрать принтер, и напечатать две страницы.
uses CommDlg; {$IFNDEF WIN32} const MAX_PATH = 144; {$ENDIF} procedure TForm1.Button1Click(Sender: TObject); var Pd: TPrintDlg; DocInfo: TDocInfo; begin FillChar(Pd, sizeof(Pd), #0); Pd.lStructSize := sizeof(Pd); Pd.hWndOwner := Form1.Handle; Pd.Flags := PD_RETURNDC; if PrintDlg(pd) then begin FillChar(DocInfo, sizeof(DocInfo), #0); DocInfo.cbSize := SizeOf(DocInfo); GetMem(DocInfo.lpszDocName, 32); GetMem(DocInfo.lpszOutput, MAX_PATH); lStrCpy(DocInfo.lpszDocName, 'My Document'); {Add this line to print to a file } lStrCpy(DocInfo.lpszOutput, 'C:DownloadTest.doc'); StartDoc(Pd.hDc, DocInfo);
StartPage(Pd.hDc); TextOut(Pd.hDc, 100, 100, 'Page 1', 6); EndPage(Pd.hDc); StartPage(Pd.hDc); TextOut(Pd.hDc, 100, 100, 'Page 2', 6); EndPage(Pd.hDc); EndDoc(Pd.hDc); FreeMem(DocInfo.lpszDocName, 32); FreeMem(DocInfo.lpszOutput, MAX_PATH); end; end;
Ответ отправлен: 09.10.2003, 18:35 Отправитель: Cybernetic Creature
Вопрос № 1004
Здравствуйте, уважаемые эксперты!! Недавно я поставил Delphi и по мере его освоения появились вопросы. 1. Чем отличается nil от 0? Когда я пишу ShellExecute (nil,nil,'http://drahus.narod.ru',nil,nil,nil); компилятор ругается, что-то там с HWND и указателями. А когда пишу ShellExecute (0,0,'http://drahus.narod.ru',0,0,0) то всё работает. Так в чём разница? 2. Нет ли у вас примера работы с Tab? 3. А описание компонента TWebBrowser? К примеру, что нужно сделать, чтобы при нажатии какой-нибудь кнопочки происходил переход на предыдущую страницу? Ну и так далее в таком роде. 4. И последнее. Хочется сделать какую-нибудь игру, только DirectX или OpenGL изучать не хочется. Сделать хочу простенькую двухмерку. Вот как это будет выглядеть: главное окно - карта, каждый герой (юнит) будет находиться в отдельном прозрачном окошке. Всё на мой взгляд просто,
только не представляю что нужно сделать для того чтобы... ну, допустим выстрелил один чувак в другого. Как узнать, что он попал в другого чувака? А! Вза-и-мо-дей-стви-е между объектами :). Вот кажется и всё. Заранее благодарю за ваши длинные и интересные ответы. С уважением, Drahus.
Приветствую Вас, Drahus! <<0>> - eto tsifra, a <> - eto ukazatel na to chto u dannoqo elementa net znacheniya! TWebBrowser: TWebBrowser.Reload; TWebBrowser.Stop; TWebBrowser.Back; TWebBrowser.Forward; TWebBrowser.Navigate('http://thepro.by.ru'); ... Nuuuuu... iqrushku mojno sdelat tak: Form1,Image1,Image2: Forma- eto karta, Image1 i Image2- eto chuvaki... Koqda kto to strelyayet proveryayem koordinati. Yesli oni sovpali, znachit tot popal, a yesli net, znachit mimo... ---Klassika: "Morskoy Boy" Ответ отправлен: 09.10.2003, 10:26 Отправитель: THE_PRO Отвечает Marouder
Доброе время суток, Drahus! 1. Nil принято в указателях использовать. 2. Ты о чем? 3. Я сам нашел. Просто напишешь типа "WebBrowser1." - Delphi выдаст список методов - и сам ищещь. Кажется, вперед - TWebBrowser.Forward. Назад - TWebBrowser.Back. 4. ИМХО с DirectX и OpenGL будет проще это сделать. Много хороших материалов по этому поводу на delphigfx.mastak.ru. Ответ отправлен: 11.10.2003, 05:29 Отправитель: Marouder Отвечает _vt
Добрый день, Drahus! 1)> компилятор ругается, что-то там с HWND и указателями А что там с ними?? :) 3) > при нажатии какой-нибудь кнопочки происходил переход на предыдущую страницу По-моему, WebBrowser.Navigate(...) и WebBrowser.Navigate2(...) Ну и так далее :)
*** E-Man - we are waiting for you ***
Ответ отправлен: 09.10.2003, 22:02 Отправитель: _vt Отвечает sir henry
Приветствую Вас, Drahus! 1. NIL (ничего нет :) присваивается указателю, а HWND - это целочисленный тип данных и ему нужно какое-то определенное число - дескриптор окна или 0, если без разницы к какому эта штука окну относится. 2. Tab - это клавиша? Тогда нужно уточнить, что нужно с этой клавишей делать :). 4. Тогда нужно изучить и обязательно освоить множество примеров работы команд графики в Дельфи или графики WinAPI. Опять незадача :))). Ничего не поделаешь, всему нужно учиться :)). Ответ отправлен: 09.10.2003, 04:45 Отправитель: sir henry Отвечает CJ
Приветствую Вас, Drahus! 1)А тем что одно это указатель, а другое HWND! И вместо последнего nil, надо SW_NORMAL! 2)Используй код калавиши TAB-9! 3)WebBrowser1.Navigate('www.karatetski.narod.ru'); 4)Найди на сайте delphimaster компонент для создания игр! Может поможет! А на сщет выстрела можно попрбовать через координаты объектов! Ответ отправлен: 09.10.2003, 09:06 Отправитель: CJ Отвечает URiS
Доброе время суток, Drahus! 1) Каждый nil=0, но не каждый 0=nil. Ничем, почти. :) 2) А что это? 4) Вот этот вопрос уже по моей части. Найди себе DelphiX - идеальный и простой вариант для простых двумерных игр на Delphi. > ну, допустим выстрелил один чувак в другого. Как узнать, что > он попал в другого чувака? А! Вза-и-мо-дей-стви-е между объектами :). Друг мой, вам ещё рано писать игры! :) Рано вы влезли в Delphi. Следует ещё с Turbo Pascal'ем поиграться. :)
Ответ отправлен: 09.10.2003, 17:47 Отправитель: URiS Отвечает Cybernetic Creature
Здравствуйте, Drahus! 1) 0 - это целое число, nil - указатель Компилятор в этом случае полностю прав. так как если вы посмотрите на описание ShellExecute вы увидите что первый и последний параметр они целочисленние переменние. остальные четыре строки с нулем в конце. на самом деле вы должны писать так var Command,FileName,Parameters,Directory:PChar; Command:=PChar('open');(*можно 'explore' для просмотра папок, или 'print' для печати*) Filename:=PChar('p1.jpg');(* http://draphus.narod.ru*) Parameters:=nil;(* '/p' '/%1'*) Directory:=PChar('C:MyDocuments'); ShellExecute(Handle, Command, Filename, Parameters, Directory, SW_SHOWNORMAL(* SW_HIDE, SW_MINIMIZE etc*) ); 2) Код клавиши ТАБ=9 3) у этого компонента есть соответствуюшие методы Back,Forward,Refresh etc. Ответ отправлен: 09.10.2003, 18:35 Отправитель: Cybernetic Creature
Вопрос № 1005
Подскажите, пожалуйста, как можно перетащить элемент из ListView'а, скажем, на рабочий стол или в какую-то другую папку. Т.е. чтобы они его приняли, как родного. Ну, а я чтобы получил путь, куда его бросили. Заранее спасибо.
Добрый день, Евгений! Sobitiye OnDrag... Ответ отправлен: 09.10.2003, 10:19 Отправитель: THE_PRO Отвечает Marouder
Добрый день, Евгений! Есть сообщение такое WM_DROPFILES. С помощью него попробуй что-нибудь сделать. Ответ отправлен: 11.10.2003, 05:29 Отправитель: Marouder Отвечает CJ
Доброе время суток, Евгений! Только методом копирования! Ответ отправлен: 09.10.2003, 20:42 Отправитель: CJ Отвечает Cybernetic Creature
Здравствуйте, Евгений! У меня есть TTreeView и TListView, размещенные точно так же, как это сделано в Windows Explorer (фактически я хочу им придать и то же функциональное назначение). Как мне сделать следующее: При двойном щелчке на элементе ListView узнать его индекс? Затем, как мне 'открыть' ветку и папку в компоненте TreeView, являющегося 'родителем' данного элемента? (В точном соответствии с функциональностью Проводника, к этому моменту родительский узел TreeView должен уже быть выбран - поэтому, я понимаю, необходимо правильно определить дочерний узел - но я чего-то запутался в синтаксисе). Ниже приведен пример кода, показывающий как выбрать правильный узел дерева, по которому произведен двойной щелчок. Как вы можете здесь видеть, ключем здесь является функция NodeAtIndex. Данный пример подразумевает наличие дочерних узлов и индексов, начиная с
нуля. Так, если мы подразумеваем что был выбран родительский узел списка элементов, (что является безопасным предположением), то мы можем использовать данный узел как отправной пункт. Методы GetFirstChild и GetNextSibling "отправляют" вас к желаемому узлу.
function TFrmTipExplorer.NodeAtIndex(Index: Integer): TTreeNode; var I: Integer; begin Result := TreeView1.Selected.GetFirstChild; for I := 0 to Index - 1 do Result := Result.GetNextSibling; end; procedure TFrmTipExplorer.ListView1DblClick(Sender: TObject); begin TreeView1.Selected.Expand(False); { Выбираем узел дерева, соответствующий "щелканному" элементу списка } NodeAtIndex(ListView1.Selected.Index).Selected := True; end;
Ответ отправлен: 09.10.2003, 18:36 Отправитель: Cybernetic Creature
Вопрос № 1006
Добрый день! Если у вас хорошее настроение и желание помочь ближнему (дальнему:), то жду совета. 10 лет писал на Foxpro для родного предприятия, а тут возникло желание приобщиться к чему-то хорошему. Пробую изучить (понять, писать…) на Делфи, но чего-то мне не хватает (может мозгов?). Поясните, если можно: Где найти описание процедур и функций поставляемых с Делфи модулей (SysUtils и т.д.), в книге которую читаю только выборочные описания. Есть ли хорошие книги или только открывать сами модули и там все смотреть? В принципе у меня один самый главный вопрос: посоветуйте литературу для изучения. С уважением, В. Иванов
Доброе время суток, Vladimir! Хорошая книга: Фаронов. "Delphi 6. Учебный курс" А насчет всех процедуру из функций из SysUtils и т.п. - продавался справочник какой-то. Только вот название забыл. Ответ отправлен: 11.10.2003, 05:29 Отправитель: Marouder Отвечает THE_PRO
Приветствую Вас, Vladimir! Mne lichno nravitsya poslednyaya kniqa C.Bobrovskoqo "Delphi7" Nu eto konechno ne vse chto yest v delphi, no eto na moy vzqlyad edinstvennaya kniqa v svoyem rode! Koroche kupi, ne pojaleyesh! Ответ отправлен: 09.10.2003, 10:16 Отправитель: THE_PRO Отвечает sir henry
Добрый день, Vladimir! В качестве справочника по Дельфи мне понравилась книга Карпова. Ее можно заказать на Болеро или других инет-магазинах. Но самый подробный справочник - это конечно хелп :-))). Ответ отправлен: 09.10.2003, 12:46 Отправитель: sir henry Отвечает Cybernetic Creature
Доброе время суток, Vladimir! в книжках В.В.ФАРОНОВа очень подробно все оптсано. а также Архангельский, и Бобровский. Ответ отправлен: 09.10.2003, 18:36 Отправитель: Cybernetic Creature
Вопрос № 1007
Доброго времени суток, эксперты! Какие есть способы работы с LPT-портом в CBuildere? Требуется просто выставлять значения в порт, причем использовать не только 378h, но еще дополнительно 4 линии (всего нужно получать сигналы на 12 контактах). ОС - Win2000,XP (и возможно под 98 чтобы тоже работало).
Приветствую Вас, Андрей! function GetPortAddress(PortNo: integer): word; assembler; stdcall; asm push es push ebx mov ebx, PortNo shl ebx,1 mov ax,40h // Dos segment adress mov es,ax mov ax,ES:[ebx+6] // get port adress in 16Bit way :) pop ebx pop es end;
Ответ отправлен: 09.10.2003, 18:36 Отправитель: Cybernetic Creature
Вопрос № 1008
Доброго времени суток, эксперты! Где можно найти хорошую русскоязычную информацию о компонентах Delphi IdFTP и IdHTTP, а также IdPOP3, IdSMMTP и IdNNTP? Заранее спасибо!
Приветствую Вас, AlX! Nujno skachat hlp Indy. Yesli komu nujno moqu poslat na milo! Ответ отправлен: 11.10.2003, 09:49 Отправитель: THE_PRO Отвечает sir henry
Добрый день, AlX! http://www.interface.ru/borland/buil.htm - первая часть статьи; http://www.interface.ru/chapters/publicax.htm - вторая часть статьи;
Ответ отправлен: 10.10.2003, 05:38 Отправитель: sir henry Отвечает Cybernetic Creature
Доброе время суток, AlX! в книжке Бобровского и в книжке Архангельского Ответ отправлен: 09.10.2003, 18:36 Отправитель: Cybernetic Creature
Вопрос № 1009
Здравствуйте, уважаемые эксперты! Подскажите пожалуйста, как во время работы программы можно запустить какой-нибудь исполняемый файл, но при этом чтобы пользователю при этом особенно не досаждать новыми открывающимися окнами. Но при этом надо как-то отследить, когда этот запущенный процесс закончится и только после этого продолжить выполнение программы. Мне нужно во время работы программы заархивировать несколько файлов архиватором arj. У меня C++Builder5
Добрый день, Fizik! WinExec или ShellExecute. В последнем параметре SW_HIDE передать, тогда окно не появится. Ответ отправлен: 11.10.2003, 05:29 Отправитель: Marouder Отвечает Bob Johnson
Доброе время суток, Fizik! Используй CreateProcess - там есть такой параметр как lpStartupInfo. Он указывает на структуру, в которой есть поле wShowWindow. Если поставить сюда SW_HIDE, то окно запускаемого приложения не появится на экране. Чтобы дождаться завершения процесса необходимо использовать функцию WaitForSingleObject, указав в качестве параметра handle созданного тобой процесса (он помещается в структуру PROCESS_INFORMATION).
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 11.10.2003, 20:29 Отправитель: Bob Johnson Отвечает _vt
Добрый день, Fizik! Используй API-функции: CreateProcess, WaitForSingleObject...Чтобы запущенный процесс не отображал окна, одним из параметров CreateProcess должен быть флаг SW_HIDE..
*** E-Man - we are waiting for you ***
Ответ отправлен: 09.10.2003, 23:18 Отправитель: _vt Отвечает sir henry
Доброе время суток, Fizik! Можно с помощью ShellExecute(), последним параметром которого будет SW_MINIMIZE, т.е. в минимизированом окне. Ответ отправлен: 10.10.2003, 05:44 Отправитель: sir henry Отвечает Cybernetic Creature
Здравствуйте, Fizik! posmotrite function ShellExecute v module ShellAPI Ответ отправлен: 09.10.2003, 18:37 Отправитель: Cybernetic Creature
Вопрос № 1010
Здрвствуй народ. У меня вопрос к эксперту Boriss (может конечно кто еще знает): где можно найти delphistfaq.chm, что в интернете я его не обнаружил...delphistfaq.chm
Добрый день, Alex! Я бы посоветовал бы вам архив ДелфиWorld DelphiWorld Ответ отправлен: 11.10.2003, 16:05 Отправитель: Cybernetic Creature
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.