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

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 284
от 03.11.2005, 17:51

Администратор:Калашников О.А.
В рассылке:Подписчиков: 255, Экспертов: 46
В номере:Вопросов: 5, Ответов: 17


Вопрос № 28471: Приветствую всех. Как можно определить тип EXE файла, т.е. это DOS приложение, Win16 (не знаю было ли там деление на консольные и GUI, если было, то это тоже надо знать). С Win32 там все понятно. Поковырявшись немного в исходниках Resource Explorer-а...
Вопрос № 28478: Здравствуйте уважаемые эксперты и подписчики рассылки. У меня возникла небольшая проблема. Как сделать, чтобы при нажатии на кнопку в компонент PopupMenu добавлялись новые пункты – Caption которых брался из списка, которых хранится в текстово...
Вопрос № 28490: Здравствуйте уважаемые эксперты! У меня следующие вопросы, очень нужна ваша помощь: 1. Необходимо выдернуть инфу о материнке и процике из отчетов таких программ, как Everest и Aida (лучше Everest); 2. Есть таблица, я использую DBGridEh, в...
Вопрос № 28496: Здравствуйте уважаемые эксперты. 1).Такая вот маленькая проблемка: как сделать, чтобы после выполнения какой либо функции на метке появлялась, а затем через три секунды исчезала надпись. Попробовал так : Label2.Caption := 'Сделано'; Sl...
Вопрос № 28497: Привет. Есть программа Netlook, но сетевые ресурсы она открывает експлорером. Если поставить открывать с помощью программы и эта программа сама должна запускаться с параметрами, то открытия ресурсов не происходит (не может справиться с двумя и более ...

Вопрос № 28.471
Приветствую всех. Как можно определить тип EXE файла, т.е. это DOS приложение, Win16 (не знаю было ли там деление на консольные и GUI, если было, то это тоже надо знать). С Win32 там все понятно. Поковырявшись немного в исходниках Resource Explorer-а, из состава Delphi 7 все стало ясно, а DOS и Win16 ничего не ясно. Подскажите, пожалуйста.
Отправлен: 29.10.2005, 00:35
Вопрос задал: AlexAnder2k5 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Romodos
Здравствуйте, AlexAnder2k5!
В Win16 приложение должна быть сигнатура 454Eh. (т.е в коде надо искать 4E 45)
Эти биты в ASCII кодировке будут выглядеть как NE.
Поэтому Win16 файлы и называют NE, а Win32 - PE.

В DOS приложении должна быть сигнатура 5A4Dh. (т.е в коде надо искать 4D 5A)
Это первые два байта.
Эти биты в ASCII кодировке будут выглядеть как MZ
Поэтому DOS приложения называют MZ.
---------
FAQ me off!
Ответ отправил: Romodos (статус: Студент)
Отправлен: 29.10.2005, 07:53

Отвечает: sir henry
Здравствуйте, AlexAnder2k5!
Как бы это помягче выразиться, чтобы Вас не расстроить? :)
Дело в том, что форматы исполняемых файлов совершенно к разделу Дельфи не относятся. Дельфи всегда создает файл только одного вида - РЕ.
Если коротко пробежаться по форматам, то в начале ЛЮБОГО файла ВСЕГДА присутствует досовские заголовок, который начинается с букв MZ. Изредка там стоит ZM. Какие компиляторы этим балуются я не знаю, но имейте в виду. :)
Для файлов win16 прибавляется дополнительный заголовок - NE.
Если по смещению 0018h в заголовке MZ содержиться значение 40h, то этот файл виндовый (или win16 или win32). После этого нужно найти адрес начала второго заголовка. Он находится по смещению 003Ch. Допустим в этой ячейке стоит 400. Тогда переходим на 0400h. Если там стоит NE - это для win16, если PE - для win32.
В win16 были только GUI приложения. Консольные ничем от досовских не отличались.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 29.10.2005, 08:03


Вопрос № 28.478
Здравствуйте уважаемые эксперты и подписчики рассылки.
У меня возникла небольшая проблема.
Как сделать, чтобы при нажатии на кнопку в компонент PopupMenu добавлялись новые пункты – Caption которых брался из списка, которых хранится в текстовом файле. Процедура для всех новых пунктов одна и та же, но необходимо получить для нее Caption пункта меню по которому кликнули. Изначально в этом PopupMenu уже существуют 3 пункта. При каждом клике по кнопке список пунктов должен обновляться. Другими словами нужно что-то похожее на меню избранное в IE с вышеуказанными параметрами. Я просто довожу до ума свой IRC клиент (http://source.at.tut.by/instruments.exe) – решил в него добавить пункт Избранное, но вот застрял на создании пунктов меню :).
Отправлен: 29.10.2005, 04:36
Вопрос задал: source (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, source!
Это можно сделать с помощью функции:
AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL;
где
hMenu - хэндл Вашего меню;
uFlags - специфические флаги пункта меню. Флагов довольно много, посмотрите сами в хелпе;
uIDNewItem - идентификатор (номер) пункта меню;
lpNewItem - надпись.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 29.10.2005, 08:18

Отвечает: Schmak
Здравствуйте, source!
Добавьте в раздел private нужной формы (в примере Form1) объявление процедуры
procedure ItemClick(sender:Tobject);
А затем вставьте код из примера. Естественно, что я не стал приводить загрузку из файла и собственно выполняемое действие.

Приложение:

Ответ отправил: Schmak (статус: 5-ый класс)
Отправлен: 29.10.2005, 10:42


Вопрос № 28.490
Здравствуйте уважаемые эксперты!
У меня следующие вопросы, очень нужна ваша помощь:
1. Необходимо выдернуть инфу о материнке и процике из отчетов таких программ, как Everest и Aida (лучше Everest);
2. Есть таблица, я использую DBGridEh, вообщем есть некоторая запись, как в одну ячейку добавить несколько строк?
3. Мне нужно для нашей организации написать, программку по инвентаризации ПК, мож кто с этим сталкивался, есть какие-нибудь исходники, ссылки, мысли, идеи, компоненты, приветствую любую помощь. Ссылки на готовые программы не предлагать. Сколько не находил, везде очень много каши. Мне нужно инфу собрать, а у нас 136 компьютеров (процессор, память, HDD, материнка, CD-Rom, видео, сеть, монитор, принтер, ксерокс, сканер и соответственно инв. номера на системник, монитор, принтер...).
Заранее спасибо за проявленную помощь.
Отправлен: 29.10.2005, 12:10
Вопрос задал: xXx (статус: 5-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Werewolf
Здравствуйте, xXx!
1. Ищите компоненты отображающие информацию о системе в т. ч. о материнке и процике
2. Поставте dbgrideh.rowSizingAllowed в true, а затем DBGridEh1.DataSource.DataSet.AppendRecord(['fdhsh'#13#10'dggbdsg'#13#10'=)']);
3. См. п. 1

Удачи.
Ответ отправил: Werewolf (статус: Студент)
Отправлен: 29.10.2005, 12:29

Отвечает: sir henry
Здравствуйте, xXx!
1. Во-первых нужно знать, в каком формате Вы сохранили отчет. У меня стоит AIDA, так вот она предлагает форматы: HTML, текстовый, XML, CSV, INI и т.п. В зависимости от того, в каком формате Вы сохраните отчет и будет зависеть способ его "распотрошения". :)
2. В свойстве TColumnEh.WordWrap надо поставить True, тогда длинная строка будет переносится автоматом.
3. Никаких идей кроме стандартных, о том, что надо определить, какие данные Вы будете собирать и обрабатывать, здесь подсказать трудно. Об этом полностью забит интернет и всевозможные учебники по БД.
Нужно составить таблицы-справочники, где будет вестись учет названий техники, составить оперативные таблицы, где будет вестись учет количества техники и зделать шаблоны отчетов, которые Вам понадобятся.
Лучшев всего будет Вам купить книжку по работе с БД.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 29.10.2005, 15:14


Вопрос № 28.496
Здравствуйте уважаемые эксперты.
1).Такая вот маленькая проблемка: как сделать, чтобы после выполнения какой либо функции на метке появлялась, а затем через три секунды исчезала надпись. Попробовал так :
Label2.Caption := 'Сделано';
Sleep(3000);
Label2.Caption := '';
но программа зависает как раз ровно на 3 секунды и с меткой ничего не происходит.
2). Процедура sleep объявлена как в модуле SysUtils, так и в модуле Windows:
Unit SysUtils
Syntax [Delphi] procedure Sleep(milliseconds: Cardinal);
Unit Windows
Syntax [Delphi] procedure Sleep(dwMilliseconds: Cardinal);
Мне интересно из какого же модуля она вызывается? (по умолчанию объявлены оба модуля)
Отправлен: 29.10.2005, 15:15
Вопрос задал: Teapot (статус: Посетитель)
Всего ответов: 9
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Jadd
Здравствуйте, Teapot!
Очень просто. Два варианта. Первый. Размещаешь на форме TTimer и при завершении какой-то функции просто активируешь таймер, а тот, по истечении 3-х секунд сам себя деактивирует и стирает надпись. Способ Второй. Он схож с первым, но тут не размещаешь, а в коде создаешь объект типа TTimer и присваиваешь ему собственный обработчик события OnTimer. Третий способ. Ловишь сообщение винды WM_TIMER и делаешь то же самое.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 29.10.2005, 15:25
Оценка за ответ: 4
Комментарий оценки:
Thanks

Отвечает: Schmak
Здравствуйте, Teapot!
Можно вставить перед Sleep строчку
Application.ProcessMessages;
Метка при этом изменяется, но приложение всё равно подвисает, поэтому лучше использовать Timer:
1) В таймере выставляете нужную Вам задержку, в обработчике OnTimer:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label2.Caption := '';
Timer1.enabled:=False;
end;
2) В функции просто запускаете таймер.

Ответ отправил: Schmak (статус: 5-ый класс)
Отправлен: 29.10.2005, 15:47

Отвечает: Romodos
Здравствуйте, Teapot!
Можно на форму кинуть таймер с interval=3000;
и писать в ontimer
label2.caption:='Сделано';
timer1.enabled:=false;
---------
FAQ me off!
Ответ отправил: Romodos (статус: Студент)
Отправлен: 29.10.2005, 15:53

Отвечает: Denis Hakimov
Здравствуйте, Teapot!
2) Вызывается из того модуля, который позже объявлен! :) Такая же ситуация с функцией Beep, есть 2 версии этой функции - первая в SysUtils, вторая в Windows. Если написать

uses SysUtils,...,Windows;

, то будет вызвана вторая функция (по умолчанию вызывается первая).
1) добавте таймер на форму, поменяйте свойство Interval таймера на 3000, затем создайте обработчик события OnTimer, в котором и изменяйте
Label2.Caption := '';
Затем при выполнении Вашей функции сначала поменяйте заголовок Label2.Caption := 'Сделано';
а после включите таймер
Timer1.Enable:=True;
код в приложении.
Удачи!

Приложение:

Ответ отправил: Denis Hakimov (статус: 4-ый класс)
Отправлен: 29.10.2005, 16:22
Оценка за ответ: 5
Комментарий оценки:
Спасибо за первый полный ответ

Отвечает: Denisss
Здравствуйте, Teapot!
1. Есть два (ну и более) способа решения проблемы:
1) перед sleep(3000) вызвать процедуру Application.ProcessMessages;
тогда на метке будет высвечиваться текст, программа будет подвисать на 3 секунды, а после трех секунд будет очищать метку.
2) установить таймер с интервалом 3000 (3 сек). после Label2.Caption := 'Сделано'; прописать Timer.Enabled:= True;
В самом таймере сделать так:
Timer.Enabled:= False;
Label2.Caption := '';

2. Узнать откуда вызывается функция Sleep легко - наведите на него мышкой и удерживайте до получения всплывающей подсказки.
Обычно, если функция встречается дважды в двух разных модулях, то используется та функция, модуль которой встречается позже в uses. (Т.е. скорее всего у Вас функция sleep вызывается из модуля SysUtils).
Аналогично работает класс Tbitmap, который встречается в модулях Windows и Graphics.
Если Вам необходимо использовать процедуру из определенного модуля, то используйте его так:
Windows.Sleep(3000);
либо
SysUtils.Sleep(3000);

Удачи!
Ответ отправил: Denisss (статус: Практикант)
Отправлен: 29.10.2005, 16:53
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, Teapot!
1) Скорее всего метка просто не успевает изменится, т.к. программа сразу же засыпает на 3 сек.
Сделайте так, тогда прежде чем заснуть, программа обновит метку:
label2.Caption:='Сделано!';
Application.ProcessMessages;
sleep(3000);
label2.Caption:='';
Можно вместо Sleep() использовать таймер.
label2.Caption:='Сделано!';
Timer1.Enabled:=True;
Таймер запустится, а в событии OnTimer должно стоять его выключение:
label2.Caption:='';
Timer1.Enabled:=False;
Время работы (3секунды) выставляете:
Timer1.Interval:=3000;
2) А Вам не все равно? Это одна и таже функция, которая берется из kernel32.dll.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 29.10.2005, 17:11
Оценка за ответ: 4
Комментарий оценки:
>>А Вам не все равно? Это одна и таже >>функция, которая берется из kernel32.dll.
Если б знал не задавал бы вопроса.

Отвечает: Delphin
Здравствуйте, Teapot!
Имя TeaPot = Чайник ? :D
Sleep(); Вешает твою программу...
Перед ним но после присваивания текста поставь Label2.Refresh;
---------
Обращаться в ICQ: 66550088 (Ally) или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: Студент)
Отправлен: 29.10.2005, 18:27
Оценка за ответ: 5
Комментарий оценки:
Label2.Refresh = Application.ProcessMessages
Такого еще не предлагали, но результат аналогичен уже предложенному.
А по поводу имени - чтобы особо умные эксперты не придирались к моим вопросам выбрал имя соответствующее своему положению :)

Отвечает: Ерёмин Андрей
Здравствуйте, Teapot!
1) Нужно вот так:

Label2.Caption := 'Сделано';
Application.ProcessMessages;
Sleep(3000);
Label2.Caption := '';
Application.ProcessMessages;


2) По умолчанию функция Sleep вызывается из модуля SysUtils.
---------
Бог создал мир за семь дней и до сих пор система работает, не требуя перезагрузки, потому что у него не было необходимости поддерживать совместимость с предыдущими версиями...
Ответ отправил: Ерёмин Андрей (статус: Специалист)
Отправлен: 29.10.2005, 19:16

Отвечает: Маренич Владимир
Здравствуйте, Teapot!
1. Попробуйте перед Sleep добавить строку
Label2.Update;
2. Обычно :) выполняется процедура из модуля, который объявлен позже.
Ответ отправил: Маренич Владимир (статус: 4-ый класс)
Отправлен: 30.10.2005, 16:37


Вопрос № 28.497
Привет. Есть программа Netlook, но сетевые ресурсы она открывает експлорером. Если поставить открывать с помощью программы и эта программа сама должна запускаться с параметрами, то открытия ресурсов не происходит (не может справиться с двумя и более параметрами). Если комуто не влом будет написать програмку которая бы могла тот параметр с которым ее запустили, передать другой программе, которая тоже запускается с параметром был бы вам признателен.
Вот строка запуска программы к которому нада добавить параметр передаваемый программой нетлук:
"C:Program FilesTotal Commander XPTOTALCMD.EXE" /I=".ProfilesProfmain.ini" /F=".ProfilesProfftp.ini"
Заранее благодарен...
Отправлен: 29.10.2005, 15:56
Вопрос задал: Vovochka (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 12)

Отвечает: sir henry
Здравствуйте, Vovochka!
Наше решительное "НЕТ!" лентяям и лоботрясам.
Пишите сами. А если в ходе написания возникнут трудности, тогда пожалуйте сюда, поможем.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 29.10.2005, 17:18
Оценка за ответ: 1
Комментарий оценки:
Если бы я мог программировать, то задал бы вопрос о проблеме. Если ты не хочешь помогать, то не стоило даже высылать ответ...

Отвечает: Delphin
Здравствуйте, Vovochka!
В чем проблема??
В строку добавим все параметры. ( Их число ParamCount. )
Добавляй каждый в одну строку через пробел.
А потом запусти.
Но так как вы я понял не сильны в программировании. То я могу выслать вам программу :-) DelphinSter@Gmail.com - Пишите я пришлю. 41 кб несжатый :-)

Приложение:

---------
Обращаться в ICQ: 66550088 (Ally) или E-Mail: delphinster@gmail.com

Ответ отправил: Delphin (статус: Студент)
Отправлен: 29.10.2005, 18:08
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо...


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

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

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Rambler's Top100 Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Архив рассылки
Отписаться
Вспомнить пароль

В избранное