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

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

  Все выпуски  

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


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

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


Если кончились силы, посмотри вокруг,
попроси о помощи друзей и подруг.


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


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

А лето то кончилось ...:-(

Сегодня в выпуске :
~~~~~~~~~~~~~~~~~~~
1. Большая база исходников и проектов OFFLINE- мнения!
2. Девушки - программисты?(на этом и закончим).
3. Очередные вопросы.
4. Отвеченные вопросы.
~~~~~~~~~~~~~~~~~~~


1. Большая база исходников и проектов OFFLINE- мнения!
------------------------------------------------------
Лично мне понравилось замечание 'Андрея' по этому поводу.

Думаю, что идея неплохая, но... Не лучше ли сделать все то же самое,
только для функций и процедур? Года 2 назад, на одном из сайтов,
(к сожалению забыл где, но что-то вроде "скороумрущей" домашней странички),
проводилась подобная "акция". кончилось это все тем, что из всего
архива было процента 3 нормальных исходников по конкретной теме,
а остальное - обычные рабочие программы. Так сказать "ассорти",
если говорить о наборе полезных функций в них. А ведь в таком случае
необходимо описывать каждую процедуру в программе, типа "В данном
исходнике содержаться такие-то полезные штучки: " и
список на пол-экрана. Я думаю, что моя мысль понятна:-)

С уважением
Андрей.

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

Читаем дальше.

Sergey:

По поводу организации OFFLINE базы исходников - целиком поддерживаю.
А было бы неплохо не только исходники на Delphi, но и на С++Builder
- ведь они во многом похожи. По крайней мере хоть можно посмотреть
идею.

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

Я всячески поддерживаю идею создания базы программ с отрытым
кодом. По-моему такая база может быть очень неплохим подспорьем и
начинающим и опытным программистам, а также отличным дополнением к
Вашей рассылке. Организовывать с ней работу можно наподобие того, как
на сервере Subscribe.ru (управление подпиской макрокомандами через
адрес subscribe@subscribe.ru).
Работа с системой может выглядеть так:
-Пользователь присылает письмо с запросом на поиск.
-Система отсылает пользователю письмо с описаниями программ
точнее всего соответствующих запросу.
-По запросу на какую-либо программу система отсылает её исходник
как вложенный файл (архив, конечно).
Если система будет создана, то я обязательно пришлю туда несколько
собственных программок.




2. Девушки - программисты?(на этом и закончим).
-----------------------------------------------
Анализируя Ваши высказывания, господа и дамы, по этому вопросу у меня
сложилось совершенно определенное мнение, которое буквально позавчера
практически полностью подтвердил Сергей Подкопаев.
Вот, что он пишет.

Прежде всего о себе и о том почему я решил высказаться по
этому вопросу.

Я Подкопаев Сергей Александрович, начальник отдела АСУП "ОАО
Бугурусланский завод Радиатор". Для того, что бы было понятно на
чем основано мое мнение о девушках-программистах расскажу немного о
моей профессиональной деятельности:
Программированием, а именно обработкой информации
начал заниматься с 1984 года, будучи начальником отделения систем
обработки телеметрической информации на полигоне "Байконур".
Программы для обработки информации нам поставляло НПО "Энергия" и в
процессе работы приходилось встречаться и с программистами. Около
70 процентов (сейчас конечно трудно сказать точно) были девушки.
Как и везде это были специалисты с разным уровнем подготовки, но я
хочу сказать, что дураков на написании программ для испытаний
пилотируемых космических аппаратов никто держать не будет (там их и
не было).
В 1991 году я уволившись из Вооруженных Сил (а до этого времени я
был инженером-испытателем) устроился на завод "Радиатор" и
практически с нуля начал его автоматизацию. В процессе работы
набирал "команду". Однажды подошла молодая девушка-студентка и
попросила пройти у нас практику. Практику она прошла успешно, затем
я предложил ей писать дипломный проект на базе нашего завода, т.е.
по конкретному программному продукту с одновременной его
разработкой. Диплом написали успешно! И я сам (повторяю сам)
предложил ей работать у нас. Так в отделе АСУ появилась
девушка-программист. Надо сказать, что с поставленными задачами она
справлялась без замечаний. Но все-же со временем она нашла работу,
где не нужно разрабатывать программы, а нужно их настраивать и
эксплуатировать ,(в общем Admin). Других попыток устроиться девушке
на должность разработчика программ в моей практике не было.
А теперь попытаюсь проанализировать почему.
Считаю, что программист-разработчик (настоящий разработчик) должен
быть немного помешанным (слегка сумашедшим). Для написания хорошей
программы "писать" ее нужно не только когда садишся за клавиатуру а
все время. Ты едешь в автобусе и думаешь о том, как лучше
организовать обмен информацией между модулями, сидишь за столом и
думаешь об алгоритмах, закрываешь глаза перед сном и перед тобой
возникают модули твоей программы. Кстати, господа разработчики,
признайтесь сами себе "Вам когда нибудь снились сны, в которых вы
путешествовали внутри собственной программы?" Так вот это
нормальное состояние человека, увлеченного своим делом. Мужчина
может себе позволить это, при условии если рядом находится верная
подруга, которая накормит и позаботится о нем как о ребенке.
Женщина не может себе позволить такой роскоши - думать только о
работе. У женщин еще много забот, в которых мы, мужчины, не всегда
им помогаем. Модет быть к сожалению, а может быть к счастью женщины
не всегда могут "забыть все остальное и думать только о работе". У
женщины изначально в характере заложена аккуратность, а значит из
них должны получаться хорошие Admin-ы (не случайно ведь операции
ручной пайки радиоэлектронной аппаратуры на военных заводах
выполняют именно женщины). Поэтому мое резюме по этому вопросу
такое: Если у Вас, милые дамы получается разработка программ, если
Вы чуствуете в себе силы на это - то это очень здорово, но если
вдруг у вас появилось сомнение, вам стало тяжело гнаться за
бесконечно новой информацией о программировании, то не
разочаровывайтесь и не обижайтесь - смело переходите на
администраторскую работу. Вообще-то женщина создана не для
работы. Она создана для красоты и для любви. Так что милые дамы,
поддержите нас слегка помешанных и порой небритых, поддержите
лаской, любовью и это будет самая прекрасная и большая помощь.


На этой оптимистической ноте я и позволю себе закрыть эту тему, как не
имеющую прямого отношения к программированию на Delphi.


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


Вопрос 422:

От: Чернов Станислав

Можно ли при помощи компонент Делфи 5 получить вместо содержимого URL
StatusCode типа 404 - not found, 200 - OK,500-internal server error etc.


Ответить.

Ответ 1:


Вопрос 423:

От: anton


Пришлите какие-нибудь статьи по взламыванию программ или инструкции по
взламыванию.Скажите,кто знает,для чего нужен SoftICE,для чего IDA
(Interactive DisAssembler),для чего Hiew и другие программы.Хотелось
получить примерные инструкции по взламыванию программ от настоящих
взломщиков.


Ответить.

Ответ 1:


Вопрос 424:

От: Dima

Как на Delphi написать программу которая по
сети запускает Dial-Up и разрывает связь на другом
компьютере.


Ответить.

Ответ 1:


Вопрос 425:

От: Абонгруппа

Подскажите, где взять генератор отчетов (типа QR) в текстовом формате.
Т.е. не в графике, как QR и остальные делают, а в виде простого
текста, чтоб можно было шустро печатать матричным принтером.


Ответить.

Ответ 1:


Вопрос 426:

От: Sir Antony

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


Ответить.

Ответ 1:


Вопрос 427:

От: Sidorov Dmitry

Подскажите пожалуйста как можно через Delphi осуществить дозвон до
провайдера (как через удаленный доступ), и ещё, как
можно осуществить обычный звонок (типа Виндовского телефона).


Ответить.

Ответ 1:


Вопрос 428:

От: Утёнков Максим

Столкнулся с такой проблемой. Пишу программу, которая использует
класс TMediaPlayer. Пока программу протестировал только на 3 компьютерах
и на одном не стали играться mp3 файлы. Вообще плеер не подает
ни каких признаков жизни. Нажимаешь на play а он не реагирует. Проблемы
с mp3 файлами на этом компьютере быть не должно, т.к. другими
программами
они проигрываются, в частности, WinAmp`ом. ОС Windows 98 SE.
И еще вопрос. Как в TMediaPlayer корректно узнать о длине midi файла.
Ведь в midi длинна зависит от скорости воспроизведения.


Ответить.

Ответ 1:


Вопрос 429:

От: oops

Народ, скажите как мне сделать инсталяцию подключения к
интернет (соединения удаленного доступа)? Т.е., создать свое
соединение?


Ответить.

Ответ 1:


Вопрос 430:

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

Подскажите каким образом сделать так, чтобы программы обменивались
данными через телефонную линию (с помощью каких методов, компнент).
А именно:
1) имеется три объекта (отдалённых друг от друга на большое расстояние)
на которых установлено определённое программное обеспечение, (написанное
мною) там происходит опрос приборов и накоплений принятых данных (т.е.
БД).
2) имеется начальник, у него стоит компьютер.
Так вот как сделать так, чтобы начальник мог видеть данные на этих
объектах???


Ответить.

Ответ 1:


Вопрос 431:

От: Andrey

У меня несколько вопросов:
1) Как вывести окно которое всегда будет поверх других окон. (желательно
с
помощью WinAPI)
2) Как помешать Windows закрыть окно и продолжить выполнение программы.


Ответить.

Ответ 1:


Вопрос 432:

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

Сделал программу с использованием Interbase, но теперь не знаю как
установить программу на компьютеры... А именно имеется база данных
"sklad.gdb", имеется три компьтера соединённые между собой в сеть,
необходимо поставить программы на каждый компьютер, а база данных должна
быьт на каком-нибудь одном из них. Так вот что необходимо запустить
(Interbase server, client или что-то ещё) на компьютерах кроме
клиентской программы??? Или подскажите где инф-ию по данной теме.


Ответить.

Ответ 1:


Вопрос 433:

От: Stanislav Kireev

Вопрос такой, слышал что есть для DELPHI библиотеки или компоненты,
которые
позволяют работать с базой данных не через BDE, а напрямую, аналогично
Microsoft Visual C++. Подскажите где можно отыскать эти компоненты и
библиотеки.


Ответить.

Ответ 1:


Вопрос 434:

От: Дмитрий

Написал небольшую СУБД для работы с базой данных в формате Paradox 7.0.
В программе используются следующие компоненты для работы с базами
данных:
Table1: TTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
DBMemo1: TDBMemo;
После компиляции создался один .ехе файл на 700 кБ. Этот экзешник
работает на моем компьютере без проблем, но при запуске программы на
других компьютерах появляется ошибка, связанная с BDE Admenistrator'ом и
программа не запускается (3 файла базы данных помещаю в те же папки, как
и у себя). Насколько я понимаю эта ошибка может возникнуть, если на
компьютере нет программы BDE Admenistrator или его библиотек. Скажите,
пожалуйста, как откомпилировать проект, чтобы все нужные библиотеки
попали в проект или какие dll-ки необходимо копировать на 'чужие'
компьютеры ?


Ответить.

Ответ 1:


Вопрос 435:

От: Vladimir Vladikin

Ищу программу такова типа.
Во время того, пока комп свободен
она перебираен разные номера по принципу
8 гудок 805 пауза 10секунд переход
на тональный режим #########(9 цыфр, выбранных случайно)
и в конце знак #.
Если при этом через 10 секунд не появится сигнал зането, то
запомнить #########(9 цыфр).


Ответить.

Ответ 1:


Вопрос 436:

От: Васильев Сергей

Как правильно использовать компонент NMSMTP c вкладки FastNet. Нужно
отправить письма с вложенными файлами в кодировке UUEncode.
Проблемы:
1. Установливаю EncodeType в UUCode, но письма уходят в MIME кодировке.
2. Как установить CharSet для содержимого письма в KOI-8r, а то в
Инспекторе только us-ansii. Просто установка в кои не помогает.
Может я что не правильно делаю. Так молодой, неопытный.
Помогите или киньте ссылку на другой компонент, решающий проблему
(только
бесплатный :) ), с компонентом TmsSMTPClient из Internet Mail Suite 2.0
проблема решилась. Но он без платный, и бесплатно без оболочки Дельфи не
хочет запускаться.

Ответить.

Ответ 1:


Вопрос 437:

От: Константин Борейша


Подскажите пожалуйста, Delphi не реагирует на двойной щелчёк по
объекту ( кнопке и т.д)


Ответить.

Ответ 1:


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


Вопрос 310:

От: Oleg Klimchuk

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


Ответить.

Ответ 1:


Вопрос 311:

От: Okulov

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

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


Ответить.

Ответ 1:
Вряд ли это проблема... Все гораздо проще... По FormKeyDown у тя будет
обработчик, который по какой-нить переменной будет тя слать на другую
процедуру... That's all! ;)
Ответ 2:
Самый простой способ реализации данной проблемы следующий:

Переменная i: Integer - глобальная, устанавливается в нужное значение,
скажем на создание формы.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key=27 Then
Begin
Case i Of
1:Begin
ShowMessage('Метод ? 1');
i:=2;
End;
2:Begin
ShowMessage('Метод ? 2');
i:=5;
End;
3:Begin
ShowMessage('Метод ? 3');
i:=4;
End;
4:Begin
ShowMessage('Метод ? 4');
i:=3;
End;
5:Begin
ShowMessage('Метод ? 5');
i:=1;
End;
End;
End;
End;

Главное не допускать ситуации, когда в цикл выполнения поподают не все
обработчики, как в приведенном примере в случаи начального значения i=1
(3 и 4 методы не выполняются), как в прочем и далее как только i
становиться равной 1.
Ответ 3:
Все очень просто.
Пишешь два (или более) обработчика события, например,
procedure TForm1.FormKeyDownFIRST(Sender: TObject; var Key: Word; Shift:
TShiftState);
и
procedure TForm1.FormKeyDownFirstSECOND(Sender: TObject; var Key: Word;
Shift: TShiftState);

А потом, где нужно, подставляешь соответствующий адрес

@Form1.FormKeyDown=@Form1.FormKeyDownFIRST

Вопрос 312:

От: SAM

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


Ответить.

Ответ 1:
Register:
Regsvr32 file.ocx

Unregister:
Regsvr32 /u file.ocx

Или есть стандартный пример:
X:\DelphiX\Demos\Activex\Tregsvr\tregsvr.dpr


Вопрос 313:

От: SAM

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


Ответить.

Ответ 1:
Проще не может быть, вызвать из коммандной строки:
C:\WINDOWS\SYSTEM\REGSVR32.EXE "c:\my path\myocx.ocx"


Вопрос 314:

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

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

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


Ответить.

Ответ 1:
:ну так запускай ворд, а в параметрах укажи имя этого документа. И из ворда пусть уже и печатают.


Вопрос 315:

От: 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)


Ответить.

Ответ 1:
Проблема кроется в BDE 4.0 (про другие не скажу, не пробовал). Если вложенные хранимые процедуры возвращают наборы данных, то
в определенный момент BDE сбаивает и начинает считать, что внешняя процедура отработала свое. Поэтому использование условия в
хранимых процедурах ...IF @@NESTLEVEL= 1... перед возвратом результатов оказывается не лишним.


Вопрос 316:

От: Laykhov Denis

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


Ответить.

Ответ 1:
1.данные можн перекинуть с помощью утилиты DataPump - входит в поставку
с Delphi.
2. не пробовал , но думаю через TBatchMove перекачиваешь базу с
индексами в формат db
3. регистрируешь alias через Odbc
Ответ 2:
1. Как перекинуть все данные из *.dbf в *.db

Есть такая утилита, к делфям в комплекте идет. DataPump называется.
Перекинет тебе все, что надо, индексы создаст, но свою .db заранее не
создавай, пусть она создаст. Если надо будет, потом изменишь структуру.

2. Как проиндексировать программно базу с расширением *.dbf в *.db

Таблицу. База - это много таблиц, индексов и других вещей вместе.
Table1.AddIndex ('имяИндекса', 'СписокПолей', [опции]). подробнее в
хелпе

3. Каким путем можно добиться доступа к базе данных без BDE
Administrator
Ты имеешь ввиду, без создания алиаса? можешь просто закинуть свои файлы
в
тот же каталог, что и .exe
Ответ 3:
1. Как перекинуть все данные из *.dbf в *.db

Посмотри компонент BatchMove, если не разберешся сам,
напиши, а то в лом пример писать, но с помощью
компонента можно перекинуть базы.

2. Как проиндексировать программно базу с расширением
*.dbf в *.db

т.е. как проиндексировать из чего-то во что-то?
Создать индексы? Читаешь индексы в одной таблице
(indexdef), устанавливаешь соответственные в другой,
через то же свойство.

3. Каким путем можно добиться доступа к базе данных
без BDE Administrator

BDE Administrator к доступу не имеет отношения, ты
просто работаешь через BDE. Без BDE? Можно, выбирай -
- через ODBC
- через DAO
- через ADO
Для ODBC и DAO есть довольно неплохие бесплатные
компоненты для доступа, могу прислать. Наконец можно
написать свой драйвер для прямого доступа - если готов
сражаться со структурой всех версий всех баз данных, и
представляешь как выполнить квери над файлом (это ведь
не Дельфи делает квери и открывает таблицы, а именно
BDE!) то вперед, работы хватит минимум на пол года,
для поддержки только основных баз данных при сносной
производительности.


Вопрос 317:

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

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


Ответить.

Ответ 1:


Вопрос 318:

От: Anatoly Zhukov

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


Ответить.

Ответ 1:
Сдается мне, что здесь стоит написать обработчик OnMessage, который
"высматривает" сообщение WM_LBUTTONDOWN, проверяет координаты мыши и,
если мышь на кнопке, щелкает кнопку. Еще здесь нужен флаг,
сигнализирующий о выполнении обработки щелчка, чтобы сообщения не
накладывались друг на друга. Так что, в OnMessage нужно еще и этот флаг
проверять.


Вопрос 319:

От: Vega

вот хочу вас спросить по поводу перерисовки холста в Paintbox'е. Что
нужно
сделать, чтобы при минимизировании приложения нарисованные фигуры на
холсте
не пропадали, а оставались. Что именно написать в методе Paint или как
сгенерировать сообщение WM_PAINT???


Ответить.

Ответ 1:


Вопрос 320:

От: Ovtchinnikov Kirill

Ка запихнуть программу в трей и заставить ее реагировать на
клик по ней?


Ответить.

Ответ 1:
Друг мой, воспользуйтесь библиотекой RXLib!:'
Ответ 2:
1. В Uses добавьте ShellAPI.
2. В public или private блоке Вашей формы укажите
Tr_Icon : TIcon;
TrayIcon: TNotifyIconData;
procedure OnMessage(var Msg: TMessage); virtual;
3. Используйте ImageList в качестве контейнера для иконок, которые Вы будете использовать в Трее.
4. Создайте Popup меню для команд доступных из трея.
5. Теперь в FormCreate Вы должны выполнить следующее
FillChar(TrayIcon, SizeOf(TrayIcon), 0);
Tr_Icon := TIcon.Create; //Создаем иконку
IconsList.GetIcon(0, Tr_Icon); //и загружаем ее из ImageList

TrayIcon.cbSize:=SizeOf(TrayIcon);
TrayIcon.Wnd:=AllocateHwnd(OnMessage); // My Proc OnMessage
TrayIcon.HIcon:=Tr_Icon.Handle;
StrPLCopy(TrayIcon.szTip, Application.Title, SizeOf(TrayIcon.szTip)-1);
TrayIcon.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
TrayIcon.uCallbackMessage:=Wm_Callback_Msg;
Shell_NotifyIcon(NIM_ADD, @TrayIcon); // ВСЕ!!! Мы создали иконку в трее
6. В FormDestroy добавляем строку
Shell_NotifyIcon(NIM_DELETE, @TrayIcon);

7. Нам осталось описать процедуру onMessage

procedure TForm1.OnMessage(var Msg: TMessage);
procedure ShowPopup;
var
x, y : integer;
begin
x := GetSystemMetrics(SM_CXFULLSCREEN);
y := GetSystemMetrics(SM_CYFULLSCREEN) + GetSystemMetrics(SM_CYCAPTION);
PopupMenu1.Popup(x, y)
end;
begin
case Msg.Msg of
procedure TGepardManagerForm.OnMessage(var Msg: TMessage);
begin
case Msg.Msg of
Wm_Callback_Msg: case Msg.lParam of
Wm_LButtonDblClk : Show;
Wm_RButtonDown : ShowPopup;
end;
Wm_EndSession: Shell_NotifyIcon(NIM_DELETE, @TrayIcon);
Wm_QueryEndSession: ;
Wm_Size : ;
Wm_ActivateAPP : ;
end;
end;
Если у Вас в IconList сродержится несколько иконок Вы в любой момент можете выполнить
IconsList.GetIcon(n, Tr_Icon); // Здесь n - номер данной иконки в IconList
TrayIcon.HIcon:=Tr_Icon.Handle;
Shell_NotifyIcon(NIM_MODIFY, @TrayIcon);
и у Вас в трее изменилась иконка !


Вопрос 321:

От: auru

Вопрос: почему при создании ServerSocket'а Delphi присваивает ему
неправильный
номер порта? Вот хочу я, к примеру, слушать 1024 порт, указываю
ServerSocket.Port:=1024. А после выполнения ServerSocket.Open netstat
говорит,
что занят 1029. И каждый раз занят разный порт. Что я неправильно
учитываю?



Ответить.

Ответ 1:


Вопрос 322:

От: tp@pi.net.ua

1. Нужно: Блокировать реакцию на Alt+F4!
2. Нужно: Если моя прога активна дать пользователю возможность быть
только с моей прогой и ни ногой за нее.


Ответить.

Ответ 1:
Способов закрыть окно несколько в любых виндах: от Alt-F4 до Диспетчера
задач. Я бы не стал программировать реакцию на каждое такое действие, а
поставил бы в обработчике OnCloseQuery тупо CanClose:=false. Ну, или
запрос
пароля или что-то там ещё. Впрочем, я не уверен, что Диспетчер задач с
этим
смирится.
А чтобы юзер не переключался на другие программы нужно поставить
главному
окну WindowState:=wsMaximized; FormStyle:=fsStayOnTop , а чтобы
пользователя
и вовсе сбить с толку, BorderStyle:=bsNone.
Ну, мы все понимаем, что защиту от дурака сделать можно, но только от
неизобретательного :-)
Ответ 2:
procedure TForm1.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose := false;
end;


Вопрос 323:

От: d@nger0us (re@ture

Хотелось бы получить ответ но мой не очень сложный вопрос:
Когда я создаю в дельфи какой-н. проект, у которого на форме всего 2-3
кнопки, эдит и, например, листбокс; ехе-файл весит примерно 300k, хотя
полезных данных там на 50-70k.
Внимание вопрос: как мне уменьшить размер исполняемого файла?
(Пробовал экспериментировать с пакетами - ничего; кстати, версия
дельфи - 3.0 - может в 5.0 всё будет нормально?)


Ответить.

Ответ 1:
Уменьшить прогу никак нельзя. Пустая форма занимает уже от 200 до 400 Kb, с
кнопкой, например, + 200 Kb.
Если не устраивает размер .exe сожми его .ехе и .dll компрессором типа Shuriken.
Если хочешь, чтобы твои программы вообще "укладывались на ладони" пиши напрямую
под WinAPI.
Ответ 2:
Дельфя при создании exe-файлов встраивает туда все библиотеки, помеченные в секции uses. Избежать этого возможно,
либо отключив компиляцию пакетов совместно с приложением, и в таком случае поставлять их вместе с exe-файлом, либо
писать программу на Win API, но это немного геморойно :)). Для примера програмка, которая рисует на пустом окне
квадрат и круг, и при этом весит 17К.
Ответ 3:
Такой большой размер exe-шника из-за того, что Делфи (и 3.0 и 5.0)
закидывает в него все библеотеки, воторые отвечают за форму и все что
на ней (кнопки, изображения, поля и т.д.). То есть при увеличении
"полезных данных" объем программы практически не увеличится.
А так есть два пути:
1) Упаковать exe-шник упаковщиком исполняемых файлов.
2) В настройках проекта в Делфи в закладке Linker (вроде бы) поставить
галочку на против пункта Build with runtime packages, что значит, что
все библиотеки не будут прицеплены к exe-шнику и прога будем занимать
законные 50-70k, но тогда все библиотеки надо будет тоскать вместе с
прогой.


Вопрос 324:

{* Краснов М.В. softgl@chat.ru *}

Вопрос 325:

program Paint;


Вопрос 326:

{* драйвером устройства через специальную структуру данных, называемую *}
{* "контекст устройства". *}
{* Структура "контекст устройства" содержит основные характеристики ус- *}
{* тройства, а также различные средства отображения - кисти, карандаши, *}
{* цвета и т.п. Прежде чем вызывать различные функции для отображения *}
{* информации, прикладная программа должна получить контекст устройства *}
{* вывода. *}
{* После того, как программа отработала с контекстом, она должна его *}
{* освободить. *}

Вопрос 327:

uses
Windows, Messages;

const
AppName = 'WinPaint';

Var
Window : HWnd;
Message : TMsg;
WindowClass : TWndClass;

function WindowProc (Window : HWnd; Message, WParam : Word;
LParam : LongInt) : LongInt; stdcall;
Var
dc : HDC; { ссылка на контекст, должна использоваться для работы с окном }
MyPaint : TPaintStruct; { структура для работы функций отображения }
Brush : hBrush; { тип "кисть" }
Pen : hPen; { тип "карандаш" }
Begin
WindowProc := 0;
case Message of
wm_Destroy : begin
PostQuitMessage (0);
Exit;
end;
wm_Paint: begin { сообщение посылается при необходимости перерисовки окна }
dc := BeginPaint (Window, MyPaint); { получить контекст устройства }
// Создать необходимые графические примитивы - получаем ссылки на обьекты
Brush := CreateSolidBrush (RGB (0, 255, 255)); { кисть }
Pen := CreatePen (PS_SOLID, 1, RGB (0, 0, 0)); { карандаш }
SelectObject (dc, Brush); { выбираем ссылку для текущего контекста }
SelectObject (dc, Pen); { выбираем ссылку для текущего контекста }
Rectangle (dc, 10, 10, 110, 110); { рисуем прямоугольник }
Brush := CreateSolidBrush (RGB (255, 255, 0));
Pen := CreatePen (PS_SOLID, 1, RGB (255, 0, 0));
SelectObject (dc, Brush);
SelectObject (dc, Pen);
Ellipse (dc, 130, 10, 230, 110); { рисуем эллипс }
DeleteObject (Pen); { для нормального функционирования программы }
DeleteObject (Brush); { необходимо удалить все создаваемые объекты }
EndPaint (Window, MyPaint); { завершение операции по отображению в окне }
ReleaseDC (Window, dc); { освобождает контекст }
end;
end; // case
WindowProc := DefWindowProc (Window, Message, WParam, LParam);
End;

procedure WinMain;
Begin
With WindowClass do
begin
Style := cs_DblClks;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := 0;
hIcon := LoadIcon (0, idi_Application);
hCursor := LoadCursor (0, idc_Arrow);
hbrBackground := GetStockObject (White_Brush);
lpszMenuName := '';
lpszClassName := AppName;
end;
If RegisterClass (WindowClass) = 0 then
Halt (255);
Window := CreateWindow (AppName, 'Пример рисования в окне',
ws_OverlappedWindow, 100, 100, 250, 150, 0, 0, HInstance, nil);
ShowWindow (Window, CmdShow);
UpdateWindow (Window);
while GetMessage (Message, 0, 0, 0) do
begin
TranslateMessage (Message);
DispatchMessage (Message);
end;
Halt (Message.wParam);
End;

begin
WinMain;
end.
Ответ 1:
Для начала отключи информацию отладчика ( Project->Options вкладка
Linker параметр Include TD32 debug info)

Можно невключать в .exe пакеты с компонентами VCL (Project->Options вкладка
Packages параметр Build with run-time packages) Это в "четверке"
уменьшает размер на 235 К. Но в этом случае необходимо вместе с
программой юзеру передать все пакеты прогонки (VCL30.dpl и что там у
тебя еще используется из .dpl, закинуть в доступное место типа
C:\WINDOWS\SYSTEM)
Ответ 2:
Все зло в самом механизме наследования !!! (ну это все скорее
философские материи :]).Я знаю только 2 способа чтобы программы была
компактной и работала на любой машине.
1.Паковать программу [UPX,ASPACK]Недостаток: памяти занимает многовато и
некоторые антивирусы неадекватно реагируют на запакованные программы.
2.Пользоватся аналогами VCL только построенными по другому принципу.
Например: MCK (http://mercury.spaceports.com/~bonanzas/kol/rindex.htm)
Недостаток: Не совсем привычно ;)


Вопрос 328:

От: Michael Mazia

Вопрос касательно сохранения типизированных файлов: можно ли как-то
сохранить в записи (record) объект типа TStrings или TStringList?


Ответить.

Ответ 1:
Нет, record имеет строго постоянный размер, а TStrings
и иже с ним размер могут иметь любой. Толлько если
заранее знаешь размер TStrings сможешь бросить его с
record.
Ответ 2:
К сожалению, в лоб - никак. Согласно описанию языка Object Pascal оператор case ... of работает только с упорядоченными (ordinal)
типами данных (т.е. такими, для которых действительны функции ORD, PRED и SUCC). В хелпе явно и неоднозначно указано о
недопустимости использования строкового типа.
К уорядоченным типам данных относятся:
byte, word, integer и другие _цельночисленные_ типы данных (за исключением Comp, который внешне цельночисленный, но реализован
на базе 10-байтового типа данных, используемого сопроцессорами х87),
char
boolean
перечислимые типы
С перечислимыми типами возможен "обходной манёвр" типа:

.......
type
......
TDayOfWeek = (mon, tue, wed, thu, fri, sat, sun);
....
var
.....
dw : TDayOfWeekж
....

begin
....
case dw of
mon: ShowMessage('Понедельник');
tue: ShowMessage('Вторник');
wed: ShowMessage('Среда');
thu: ShowMessage('Четверг');
fri: ShowMessage('Пятница');
sat: ShowMessage('Суббота');
sun: ShowMessage('Воскресенье');
end;
....
end.


Вопрос 329:

От: Сергей Кононов

Пишу программу для перехвата сетевого трафика
и реакции на него. Использую библиотеку WPCapLib,
но она безбожно тормозит (хотя возможно я с чем-то и не
разобрался), кроме этого требует установки *.Vxd на машину.
Может кто паодскажет, что ещё можно использовать и где это взять.


Ответить.

Ответ 1:


Вопрос 330:

От: Dmitry Gricay

Вопрос такого плана - необходима документация по программированию USB
шины. Описание, методы работы и т.д.


Ответить.

Ответ 1:


Вопрос 331:

От: Дмитрий

Вот есть у TWebBrowser свойство document типа IDispatch. И дальше в
хелпе написано, что мол используйте некий IDispatch интерфейс, чтобы
работать с документом используя модель объектов COM. В общем, мне надо
работать с документом HTML как с документом (а не исходным текстом в
HTML). Чтобы иметь доступ к объектам документа, как в JavaScript,
например. Где про это про всё можно почитать (в Инете или книжка какая
есть, я не нашёл)?
Заранее сенкс.

Shaman
dimon-da@mtu-net.ru



Ответить.

Ответ 1:






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

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

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

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

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



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

В избранное