Приветствую. Подскажите как узнать состояние клавиши Shift в OnClick event. В onKeyDown все вроде работает, да она не всегда срабатывает почемуто. Есть ли возможность узнать состояние специальных клавиш из любого места программы... Благодарю..
Добрый день, Yar! 1:структура InShiftState 2: Вроде есть команда KeybordState
Ответ отправлен: 10.02.2004, 15:46 Отправитель: Pawel Отвечает Boriss
Приветствую Вас, Yar! BYTE keys[256]; GetKeyboardState(keys); А вот кодов клавиш я не знаю, так как Дельфист :((, в основном, но знаю, что можно взять их на сайте Borland X Portal: http://borland.xportal.ru
Ответ отправлен: 10.02.2004, 13:09 Отправитель: Boriss Отвечает Bob Johnson
Добрый день, Yar! Есть - функция GetAsyncKeyState.
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 09.02.2004, 10:19 Отправитель: Bob Johnson
Вопрос № 1318
Здравствуйте! Проблема такая: на Delphi5.0 пытаюсь скрыто (sw_hide) запустить DOS приложение (с помощью winexec, ShellExecuteEx). Так вот в Win98 всё нормально. В W2000 - беда. Не запускается скрыто. Запускается как sw_show. При этом при запуске изображение на экране пропадает(типа как при переходе в текстовый режим, хотя в ярлыке к DOS программе у меня стоит "в окне"). Спасибо.
Добрый день, Вадим! Об этом можно подробно почитать в прикольной книге Михаила Фленова "Программирование в Delphi глазами хакера", вышла в этом году, и можно найти, либо на его сайте www.vr-online.ru Ответ отправлен: 09.02.2004, 10:45 Отправитель: Boriss Отвечает Pawel
Доброе время суток, Вадим! Попробуй выполнить в нормальном режиме? а потом скрыть с помощью unction ShowWindow(Wnd, sw_hide);
Ответ отправлен: 10.02.2004, 15:49 Отправитель: Pawel
Вопрос № 1319
поправка к непомню какому вопросу Мне необходимо ПРИСВОИТЬ ехе некую иконку
Добрый день, realkomrad! Я писал вроде-бы в прошлый раз. Можно ещё с помощью Application.Icon.LoadFormFile; Tckb ys;yj присвоить иконку чужому(нет исходников) приложению, то это совсем другая история. Могу скинуть исходник(D6), но не уверен в его работоспособности. Ответ отправлен: 10.02.2004, 15:53 Отправитель: Pawel Отвечает Boriss
Добрый день, realkomrad! Таки это ж совсем элементарно, Ватсон! Application.Icon.LoadFormFile Application.Icon.LoadFromClipboardFormat Application.Icon.LoadFromStream Ответ отправлен: 09.02.2004, 14:40 Отправитель: Boriss
Вопрос № 1320
Доброе время суток! Назрело несколько вопросиков по Delphi: 1)Что я выигрываю//проигрываю создавая компоненты (кнопочки, менюшечки etc.) по ходу работы программы, а не во время ее разработки. 2)Главная форма вызывает некую другую форму. Как получить от второй формы результаты ее работы(путь к файлу, ссылку на объект etc. 3)Очень хотелось бы хорошенько разобраться с конструкторами и деструкторами (где надо писать inherited, где не надо; когда надо их перегружать, когда не надо; чего они делают сами и чего//в каких случаях делать должен я). Может книжку какую посоветуете?! Подробную, толстенную... 4)Что выгоднее//полезнее//правильнее использовать - проверки типа If fileExist; If i<>0; etc. или блоки try ... Except? Заранее спасибо! :D
Приветствую Вас, Vitally! 1) Наглядность теряешь 2) ShowModal возвращает результат, а другую информацию - нет проблем, только пропиши в USES. Если спутал и хотел сказать - приложение, то можно через карман Clipboard, можно послать сообщение SendMessage 3) В Delphi все такие "мелочи" уже прописаны за Вас. А так, если Ваш класс (объект) - наследник другого, то первым делом в конструкторе нужно вызвать Inherited, а потом делать все остальное. В деструкторе Inherited должно быть последним. Книг много. Вот сегодня Inch(tm) дал ссылки (в приложении) - Обращай внимание на ObjectPascal (в Delphi 7 - Delphi) 4) все хорошо, но try ... excetpt освой. Однако, зачем лишний раз обрабатывать исключительную ситуацию ;))
Приложение: Ответ отправлен: 10.02.2004, 13:21 Отправитель: Boriss Отвечает Pawel
Здравствуйте, Vitally! 1: получаеш дополнительные проблемы. 2:Подключит вызываемую форму через uses и обращатся formX.Label1.Caption 4: try ... Except Ответ отправлен: 10.02.2004, 15:56 Отправитель: Pawel Отвечает Bob Johnson
Приветствую Вас, Vitally! 1. Выигрываешь то, что ты можешь динамических их создавать, т.е. по мере необходимости. Это значит, что меньше расходуется память и т.п. Проигрываешь в том, что их труднее создавать (нужно указывать руками положении). 2. Во второй форме создаешь переменную, а из главной ее считываешь/записываешь. Также можно сделать, если форма создается динамически. 3. Inherited - это вызов конструктора/деструктора класса-родителя (в констр. и дестр.). Их надо вызывать обязательно. В конструкторе - в начале, в деструкторе - в конце. 4. И то, и другое :)
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 10.02.2004, 14:09 Отправитель: Bob Johnson Отвечает THE_PRO
Здравствуйте, Vitally! 1)Teryayesh vremya! 2)Sozday v klasse qlavniy formi peremennuyu i na OnClose druqoy prisvoy yey znacheniye 3)Ishi v maqazinax(Yesli ona tolstaya eto yeshe nicheqo ne znachit) 4)Kajdiy priyem imeet svoyo mesto! Ответ отправлен: 10.02.2004, 13:49 Отправитель: THE_PRO Отвечает samum2000
Добрый день, Vitally! 1. Если делаете все правильно - то выигрываете на освобождении ресурсов GUI и USER, проигрываете в усложнении кода. Ознакомтесь с документацией по Delphi RTTI. 2. Например, есть форма Form1 и подчиненная форма Form2. Указываете модуль в котором хранится Form2 в Uses первой формы. Теперь можно из любого места писать Form2.AnyField, где AnyField - любое поле второй формы. 3. Конструкторы стоит перекрывать, если в вашем компоненте добавляются какие-либо динамические поля, или если вы хотите установить начальные значения каким-либо полям. Да и просто когда нужно что-то сделать во время создания компонента. Inherited должно идти самой первой строчкой. Деструкторы перекрываются, если вы размещали в динамической памяти объекты при создании компоненты. Inherited должно всегда идти посленим. В остальных случаях Inherited надо вызывать по мере
необходимости: например, если вы перекрыли метод Paint и не хотите, чтобы компонета отрисовывалась как предок, то не вызывайте Inherited вообще, если хотите дорисовывать что-то - вызывайте перед прорисовыванием своих элементов и т.д. 4. Имхо, это вообще три большие разницы :). Использовать IF .. Then надо! Использовать Try .. Except надо, если вы хотите уберечь пользователя от сообщений об ошибках. То есть этот блок нужен для обработки исключительных ситуаций, и if..then вам в этом деле не помошник. Ответ отправлен: 11.02.2004, 13:19 Отправитель: samum2000
Вопрос № 1322
Добрый день, срочно нужна помощь (Дельфи и Интербэйс): 1) в IB-компоненты (Дельфи7) отсутствуют FindFirst, FindNext и т.д. Как можно реализовать это ? С помощью стандартных BDE-компонентов я это решил, но не уверен что это будет вполне корректно регулировать траффик в сети. 2) есть gdb-шки и в 1-ой список Товаров, в другой движение по ним(имеется ввиду накладные на приход и расход). Как воплотить метод анализа товаров по опред.критерию, при этом не нагружая сеть и , соответсвенно не загружая клиента. Потому как в BDE-компоненте база грузиться на локальный комп клиента, что существенно загружает сеть, а как реализовать это с помощью IB-компонентов, я пока не представляю. Жду ваши комментарии.
Доброе время суток, jiny! 1)Sdelay zapros na SQL (IBQuery) 2)Panel komponentov "Desicion Cube" 3)Konnektimsya k baze po TCP/IP : Server:FilePath Ответ отправлен: 10.02.2004, 16:10 Отправитель: THE_PRO Отвечает sir henry
Добрый день, jiny! 1. А Вы не ошиблись? :)) IBQuery.FindFirst; IBQuery.FindNext; Все это есть и никуда не девалось :). 2. Если у Вас установлен IB сервер, то реализуйте это все дело с помощью хранимых процедур. В БД они создаются командой: CREATE PROCEDURE ------ Я бы Вам посоветовал приобрести книжку по созданию и использованию БД в Дельфи, например Фаронов "Дельфи. Руководство разработчика баз данных". Поверьте, это будет куда полезнее, чем посылать вопросы типа "Я не знаю как работать с IB пришлите свои комментарии" :)). Ответ отправлен: 11.02.2004, 08:52 Отправитель: sir henry
Вопрос № 1323
Здравствуйте, уважаемые эксперты! У меня такой вопрос: как для текстовых файлов (*.txt) можно автоматически определить вид кодировки: - win1251 - dos 866 Есть ли какое-нибудь более изящное решение, чем составить словарик на несколько десятков слов и искать эти слова в файлах. Возложить такое на пользователя нежелательно. Нужно чтобы программа отсылала файлы в кодировке dos 866, а если пользователи сделали свой файл в win1251, то автоматически перекодировать. Среда разработки - Borland C++ Builder 5
Добрый день, Alexandr! Смотри пример на DELPHI. Uhjvjprj но еффективно.
Приложение: Ответ отправлен: 10.02.2004, 18:08 Отправитель: Pawel Отвечает sir henry
Приветствую Вас, Alexandr! Вот довольно интересная статейка для автоопределения кодировки. Там же есть ссылки на ассемблерный и сишный модуль: http://ivr.webzone.ru/articles/defcod_2/ Ответ отправлен: 11.02.2004, 09:20 Отправитель: sir henry Отвечает samum2000
Здравствуйте, Alexandr! В своё время передо мной втала такая же задача - как определить кодировку текста. Я воспользовался тем обстоятельством, что первые 127символов совпадают во всех кодировках, а различается лишь расположение русских. Я сканировал весь текст буква за буквой, и если код очередного символа был от 128 до 175 - увеличивал переменную DOS, а если от 192 до 255 - то WIN. Каких символов в итоге получалось больше, такая это и кодировка. К сожалению, метод не стопроцентный, особенно если используется много псевдографики (кстати, можно учитывать тот факт, что в win псевдографикой практически не пользуются). Куском кода поделиться не получится - куда-то делся исходник, но если возникнут проблемы, то пиши, чем смогу - помогу. Попутного ветра! Ответ отправлен: 11.02.2004, 13:19 Отправитель: samum2000
Вопрос № 1324
Здравствуйте эксперты ! Помогите решить следующую задачу: имеется некоторый тип type MyType = record ... end; имеется файл, в котором лежат n элементов этого типа. n может меняться другим куском программы. Я считываю n. Вопрос: как мне создать массив этого типа длиной n и считать туда эти элементы в run-time. Хорошо бы кусочек кода. Заранее спасибо.
Добрый день, Радик! Ispolzuy dinamicheskiye massivi: var arr:array of ; ... SetLength(arr,n); ... //Delayem chto to s "n" ... SetLength(arr,n); ... Tolko zapomni chto yesli novoye znacheniyemenshe staroqo to massiv otsekayetsya a yesli net noviye elementi pribavlyayutsya v konets massiva. Ответ отправлен: 11.02.2004, 16:36 Отправитель: THE_PRO Отвечает Boriss
Приветствую Вас, Радик! А какие проблемы? Динамические массивы! Пример: элементарнейший в старом стиле. Мне кажется, там все понятно :)) В "новом" все можно и читать и писать быстрее
Приложение: Ответ отправлен: 11.02.2004, 15:07 Отправитель: Boriss Отвечает Pawel
Доброе время суток, Радик! На каком языке кусочик кода то? Используй динамический массив array of MyType. Правдо насчёт сохранения динамического массива в фаил я не уверен. Можно в принципе писать в фаил блоками типа MyType Ответ отправлен: 10.02.2004, 21:15 Отправитель: Pawel Отвечает Andy
Добрый день, Радик! const n:integer=50; ... var a: array[1..n] of MyType ... begin ... BlockRead(var F: File; a; 50*SizeOf(MyType)); ... end. Ответ отправлен: 11.02.2004, 06:26 Отправитель: Andy Отвечает sir henry
Приветствую Вас, Радик! var arMyType: array of MyType; {безразмерный массив} Begin {После определения количества записей n, можно определить длинну массива} SetLength(arMyType, n); {И все дела :)} End. Ответ отправлен: 11.02.2004, 08:56 Отправитель: sir henry Отвечает samum2000
Приветствую Вас, Радик! Это будет самый обыкновенный динамический массив. var myarray=array of mytype; f: file; begin ... setlength(myarray,n); ... blockread(f,myarray,n); ... end; Можно еще объявить f как file of mytype и считывать по одной все записи из файла. Ответ отправлен: 13.02.2004, 11:59 Отправитель: samum2000
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.