Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Декабрь 2005 → | ||||||
1
|
2
|
3
|
4
|
|||
---|---|---|---|---|---|---|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
18
|
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
29
|
31
|
Статистика
-1 за неделю
Программирование на Delphi (выпуск 38)
Программирование на DELPHI |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Выпуск #38 (30 декабря 2005 г.) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Лидеры по количеству баллов:
Примечание: Под форматированием текста понимается возможность оформлять ответы с использованием html-тегов. Если Вы хотите, чтобы Вашего имени (ника) не было в данной таблице, отправьте письмо по этой ссылке с зарегистрированного у нас адреса. В теле письма, пожалуйста, укажите причину удаления имени из таблицы. Нам важно ваше мнение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Задать вопрос в рассылку | Задать вопрос с помощью web-формы | Система "Эксперт" | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вопрос #209 (автор вопроса: Матвеев И.В.; вопрос отправлен: 18.12.2005 02:34): Можно ли узнать когда был "расшарен" каталог в сети. Т.е. узнать дату, когда на каталог был установлен общий доступ, если этот каталог находится не на моей машине и я имею к нему только "сетевой" доступ? [Ответить на вопрос] Вопрос #210 (автор вопроса: Денис; вопрос отправлен: 18.12.2005 05:35): Здравствуйте уважаемые эксперты! Подскажите пожалуйста: как превратить ячейку StringGrid'a в многострочный редактор типа TMemo, другими словами - добавить свойство Lines? Заранее всем спасибо. [Ответить на вопрос] Вопрос #211 (автор вопроса: Павел; вопрос отправлен: 18.12.2005 15:41): Как написать программу, которая будет определять какие пользователи есть на компьютере? Допустим, нажать кнопку и в memo создастся список всех пользователей. [Ответить на вопрос] Вопрос #212 (автор вопроса: Владимир; вопрос отправлен: 18.12.2005 20:30): Подскажите пожалуйста, кто работал с XStringGrid, как прикрутить форму к FormCellEditor? Что-то разобраться не могу, и документации никакой на офсайте нет, или ссылку на документацию. [Ответить на вопрос] Вопрос #213 (автор вопроса: Сергей; вопрос отправлен: 19.12.2005 09:56): Каким образом узнать количество страниц в документе Word и загрузить в OleContainer страницу с нужным номером? [Ответить на вопрос] Вопрос #214 (автор вопроса: Slava; вопрос отправлен: 22.12.2005 21:11): Нужно сделать небольшую программу для обмена сообщениями в локальной сети. Программа должна сидеть в трее и реагировать на входящие собщения. Вопрос: какие компоненты будет лучше всего использовать? [Ответить на вопрос] Вопрос #215 (автор вопроса: Аркадий; вопрос отправлен: 27.12.2005 05:06): Как сделать поиск в mdb или mde, в обьектах (таблицы, запросы, макросы, модули) и изменять функции? [Ответить на вопрос]
Вопрос #205 (автор вопроса: Vitek; вопрос отправлен: 10.12.2005 21:05): У меня такой вопрос: как можно написать DLL для нормального чтения mov и avi в кодировке DivX(Xvid), mpeg4, ну и др. какие-нибудь? Или есть какие компоненты? Использую MediaPlayer из Delphi7. Просто когда открываю такой файл, то нет звука, чёрный экран, или изображение идёт по ключевым фреймам. [Ответить на вопрос] Вопрос #90 (автор вопроса: Nanny_Jagg; вопрос отправлен: 17.03.2005 07:56): Как в DBGrid из библиотеки Ehlib 3.6 добавить Lookup-поле, чтобы оно действительно работало? Поле вроде сделано, но ключевое поле, оставленное рядом для контрола не меняется, по какому событию обработчик писать? [Ответить на вопрос] Если на данный вопрос не поступит ответов, он будет удалён из данного раздела 08.01.06. Вопрос #176 (автор вопроса: Тимур; вопрос отправлен: 12.10.2005 13:58): Нужно программно узнать температуру процессора. Мать Abit NF7-S (или любая другая) с микросхемой мониторинга Winbond W83627HF. [Ответить на вопрос] Если на данный вопрос не поступит ответов, он будет удалён из данного раздела 15.01.06. Вопрос #197 (автор вопроса: EvGeny; вопрос отправлен: 14.11.2005 01:39): Я новичок в программировании. Как можно в Delphi на OpenGL загрузить .x файл? P.S. Просто этот файл удобен тем, что его можно открыть обычным текстовым блокнотом и просмотреть его структуру. А я очень хочу понять принцип - как загружать файлы 3D сцен в Delphi (как осуществлять перехот от одной координаты в другую, записанную в файле 3D модели, как отличать один объект от другого и т.д.) Буду очень благодарен за исходник с подробными объяснениями. Спасибо заранее! [Ответить на вопрос] Если на данный вопрос не поступит ответов, он будет удалён из данного раздела 20.01.06. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вопрос #181: 1. [Отвечает: Матвеев И.В., 18.12.2005 06:51]: Итак, как выдрать рисунки из Word программно я так и не узнал, хотя занимался этим серьезно, но думаю, что копать нужно в направлении TWordApplication.Selection.InlineShapes, по-видимому, эта коллекция содержит все OLE объекты, включенные в документ. Есть также программа Word2Picture (www.wordcnv.com), которая выдирает рисунки из Word документов в автоматическом режиме даже без использования сервера OLE. Но разработчики не хотят говорить как они это делают. Желаю удачи. Оценка за ответ: 4. Вопрос #200: procedure TForm1.Button2Click(Sender: TObject); var OD_acct:TOpenDialog; fn_acct:String; begin OD_acct:=TopenDialog.Create(self); OD_acct.Filter:='Файл (*.dbf)|acct_*.dbf'; OD_acct.InitialDir:='path'; if OD_acct.Execute then fn_acct := OD_acct.FileName; OD_acct.Free; end; Вопрос состоит вот в чем. Если "path" находится на сетевом диске (даже подключенном), то OpenDialog выбирает последнюю открытую папку... На локальном диске все работает отлично... Подскажите плиз, как добится подобного результата и на сетевом диске с путем типа \\server\folder\YYYY\MM\DD? Заранее благодарен. 1. [Отвечает: Ares, 18.12.2005 20:52]: Хм... Проверил твой код, но описанной тобой ситуации так и не смог добиться - всё нормально работает. Может, дело в правах доступа? P.S. Проверял на WinXP, мож, с Win9х дело обстоит иначе... Оценка за ответ: 3. 2. [Отвечает: dasha ermakova, 19.12.2005 17:19]: Думаю, дело не в том, что диск сетевой. Проверяла ваш код, все нормально работало, и с сетевыми адресами тоже. Возможно, во время работы программы, адрес открытой папки где-то присваивается. Оценка за ответ: 3. Вопрос #201: 1. [Отвечает: Садовников Владимир, 17.12.2005 20:18]: Для всех компонентов это не получится. Уж для TButton - точно. Хотя можно создать n-ое количество компонентов, в которых заменить виртуальный метод Paint, в котором и рисовать контрол, как тебе надо. Либо использовать уже созданные другими людьми компоненты. Оценка за ответ: 4. 2. [Отвечает: Dron, 17.12.2005 23:35]: Если вы имеете ввиду скины, то можно использовать специализированные компоненты: AlphaControls, SkinForm, ThemeEngine, SkinCrafter и др. У стандартных компонент изменить оформление нельзя, разве что можно изменить их свойства. Чтобы не обращаться к каждому компоненту отдельно, компоненты можно искать. Примерно вот так: For I:=0 To Form1.ComponentCount-1 Do TWinControl(FindComponent(Form1.Components[I].Name)).Visible:=False; Это скроет все контролы на форме. Думаю, что направление и способ действия понятен. Оценка за ответ: 5. 3. [Отвечает: Pavel A. Repin, 19.12.2005 08:48]: Например, вот так: var i: integer; begin for i := 0 to ComponentCount - 1 do if Components[i] is TMyComponentType then (Components[i] as TComponentType).Color := clRed; end; Оценка за ответ: 5. 4. [Отвечает: PVS, 19.12.2005 10:53]: Цвет можно - всего лишь нужно выставить ParentColor=True. С остальным труднее. Частично может помочь ParentCtl3D=True, но скорее всего часть "стилизации" придется писать руками :( Оценка за ответ: 4. Вопрос #202: 1. [Отвечает: Деревянко Евгений, 17.12.2005 22:24]: Сначала предлагаю определить, какие данные считать одинаковыми, то есть по каким полям проверять уникальность. Например: запись о двух сотрудниках с разными табельными номерами, но одинаковыми фамилиями и именами можно считать разными - просто совпадение (однофамильцы да к тому же ещё и тезки). Но разных людей с одинаковыми табельными номерами быть не может. То есть табельный номер должен быть уникальным. Для того, чтобы обеспечить уникальность по ключу (одному или несколким полям) можно прибегнуть к одному из следующих вариантов: 1) Задать ограничение (constraint) для данного поля в таблице, а в Delphi при помощи try ... except проверять на ошибку при попытке вставить/обновить запись. Что-то типа этого: with Table1 do begin insert; FieldValues['EmpNo'] := 105; // это поле определено как уникальное // и такое значение уже есть FieldValues['LastName'] := 'SomeName'; FieldValues['FirstName'] := 'SomeName'; FieldValues['PhoneExt'] := 10; FieldValues['HireDate'] := '01.01.01'; FieldValues['Salary'] := 1000; try post except on e: EDBEngineError do if e.Message = 'Key violation.' then Application.MessageBox('Ошибка в ключе!', '', MB_ICONERROR); end; end; 2) Перед тем как вставить в таблицу данные нужно поискать ключевое значение в таблице, но если таблица довольно большая, а вставлять нужно часто, то работать будет медленно: if Table1.Locate('EmpNo', 105, []) then Application.MessageBox('Ошибка в ключе!', '', MB_ICONERROR); 3) Если есть возможность, то следует ключевое поле опрелить как автоинкрементное (identity). Оценка за ответ: 5. 2. [Отвечает: Матвеев И.В., 18.12.2005 06:49]: Вариант первый: При добавлении новой записи производить поиск в таблице по добавляемому значению методом Lookup. Вот пример: if Table1.Lookup('NAME', VarArrayOf([Edit1.Text]), 'NAME') = Null then ShowMessage('Такой записи нет') else ShowMessage('Такая запись уже есть'); Метод Lookup производит поиск в таблице, но не переводит курсор на найденную запись. Поиск может производиться как по индексированным, так и по неиндексируемым полям. Недостаток в том, что не все технологии этот метод поддерживает. Параметры: Имя поля, в котором искать; искомое значение; имя поля, значение которого будет передано в Result, если запись найдется. Вариант второй: Создать индекс по тому полю, по которому требуется уникальность, с параметром Unicue и в событии OnPostError таблицы отлавтивать эту ситуацию. Желаю удачи. Оценка за ответ: 5. 3. [Отвечает: PVS, 19.12.2005 10:46]: Если надо контролировать уникальность, к примеру, полей field_1, field_2, field_3 из таблицы mytable, то проще всего прямо в базе данных один раз выполнить вот такой SQL: create unique index mytab123 on mytable(field_1, field_2, field_3); и тогда на повторяющиеся данные будет "ругаться" сама база. Если же здача в том, чтоб пользователь видел не сообщение от базы данных на английском языке, да еще и с непонятным значением, а читабельную фразу "Такие данные уже существуют", тогда надо на событиеBeforePost написать что-то вроде: CheckQuery.SQL.Text:= 'select count(*) as cnt from mytable where (field_1='+ Dataset.FieldByName('field_1').Value+') and (field_2='+ Dataset.FieldByName('field_2').Value+') and (field_3='+ Dataset.FieldByName('field_3').Value+')'; //Здесь все поля - числа. Для строк нужно больше кавычек CheckQuery.Active:=True; if CheckQuery.FieldByName('cnt').value<>0 then begin ShowMessage('Такие данные уже существуют'); DataSet.Cancel; end; Хотя и здесь лучше иметь индекс по нужным полям - быстрее ищет. Оценка за ответ: 5. 4. [Отвечает: dasha ermakova, 19.12.2005 14:00]: Перед добавлением новой записи нужно просмотреть все записи таблицы и сравнить каждую с новой. Если это таблица базы данных, то например так: procedure TForm1.Button2Click(Sender: TObject); var i: integer; fnd: bool; begin fnd:=false; with Table1 do begin DisableControls; First; for i:=1 to RecordCount-1 do begin if Table1.Fields[0].AsString = 'hello' then fnd:=true; Next; end; EnableControls; if fnd = true then MessageDlg('Такие данные уже существуют',mtWarning,[mbOK],-1); end; end; Оценка за ответ: 5. 5. [Отвечает: midav.land.ru, 21.12.2005 11:20]: Наиболее простой способ - когда проэктируете таблицу, указать что данное поле не должно содержать повторяющиеся значения. Тогда при добавлении одинаковых значений будет возникать исключение, которое нужно обработать. Вариант 2. (Я так делаю) Перед добавлением производиться запрос, а есть ли такое поле. На основании результата поиска и делается вывод. К сожалению Вы не указали как вы добавляете записи (Стандарные компоненты или как я через SQL запросы). Оценка за ответ: 5. Вопрос #203: 1. [Отвечает: Садовников Владимир, 17.12.2005 20:22]: Если ты создаёшь формы динамически - то сохраняй где-нибудь указатель на форму и сравнивай его перед следующим созданием формы с nil, а при закрытии формы - обнуляй. Либо можешь воспользоваться функцией FindWindow с соответствующим названием класса твоей формы и заголовка окна формы. Кроме этого, формы можно сделать модальными (хотя это не всегда помогает; например, когда необходимо работать сразу в нескольких формах) - это при помощи метода ShowModal класса TForm. Оценка за ответ: 5. 2. [Отвечает: Деревянко Евгений, 17.12.2005 22:30]: Все просто. Надо перед созданием формы проверить её существование: if form2 = nil then begin Application.CreateForm(TForm2, Form2); form2.Show; end; Оценка за ответ: 5. 3. [Отвечает: Матвеев И.В., 18.12.2005 06:49]: Весь вопрос заключается в том, как Вы открываете дочернюю форму из главной. Если Вы обращаетесь к существующему экземпляру формы, например, методом Show - у Вас будет появляться одна форма, а при повторном вызове Show, она просто будет выведена на передний план. Как я понял, Вы динамически создаете дочернюю форму, Вам нужно просто при первом вызове создать форму, а затем показать, а при последующих (форма <> nil) обращаться к существующей. Вот пример: if Form2 = nil then Form2 := TForm2.Create(Form1); Form2.Show; Еще одно, если дочерняя форма богата компонентами и создается долго, Вы можете убрать ее из автосоздаваетмых - убрать строку Application.CreateForm(TForm2, Form2); из файла проекта - это сэкономит некоторое время при запуске приложения. Желаю удачи. Оценка за ответ: 5. 4. [Отвечает: Ares, 18.12.2005 21:02]: Попробуй дочернюю форму вызывать вот так: if not Assigned(Form2) then Form2 := TForm2.Create(Form1); где Form2 - дочерняя форма. Оценка за ответ: 5. 5. [Отвечает: PVS, 19.12.2005 11:08]: По вопросу рискну предположить, что на Click по кнопке написан код a-la: ChildFrm:=TChildForm.Create(Self); ChildFrm.Show; А хочется чтоб было так: Оценка за ответ: 5. 6. [Отвечает: dasha ermakova, 19.12.2005 14:34]: Перед строчкой создания дочерней формы CreateMDIChild нужно поставить if MDIChildCount<1 then или не 1, а сколько форм можно максимум создать. И все. Оценка за ответ: 5. 7. [Отвечает: Feniks, 20.12.2005 12:50]: Я, например, пользуюсь следующим методом:
Пример: главная форма var bIsNotChildWindow : Boolean = False; На кнопку Button создаем Action в компоненте TActionList и вешаем два обработчика:procedure TMainForm.ButtonActionExecute(Sender: TObject); begin // тут пишем открытие дочернего окна bIsNotChildWindow := False; end; procedure TMainForm.ButtonActionUpdate(Sender: TObject); begin (Sender as TAction).Enabled := bIsNotChildWindow; end; В дочерней форме: procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction); begin bIsNotChildWindow := True; end; Таким образом твоя кнопка будет отключаться, когда ты открываешь доч. окно и опять включаться, когда ты его закрываешь. Очень удобный и быстрый метод. Оценка за ответ: 5. 8. [Отвечает: midav.land.ru, 21.12.2005 11:29]: Когда-то решал подобный вопрос. У компонента Application есть свойсво Forms, которое хранит список всех созданых (не объязательно видимых) форм. Тоесть перед созданием необходимо проверить, есть ли форма, если нет - создать. function IsFormOpen(const FormName: string): Boolean; var i: Integer; begin Result := False; for i := Screen.FormCount-1 downto 0 do if (Screen.Forms[i].Name=FormName) then begin Result := True; Break; end; end; Способ два, подсмотреный в Борланда и немного противоречаший справке, но реально работающий. Для кнопки вызова пишем: if Form2<>nil then Form2:=TForm2.create(Form1); Form2.show; (Если форма создана, то она будет появляться) в Form2 в событии Close procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; //Говорим что при закрытии формы нужно удалить все ресурсы Form2:=nil; //А здесь принудительно зануляем. Это противоречивое место, но строка нужна. Иначе при повторном нажатии кнопки показать форму будет ошибка end; Оценка за ответ: 5. 9. [Отвечает: Shutn1k, 21.12.2005 18:53]: Вы наверное используете функцию: Show Form1; А надо: ShowModal Form1; Тогда, пока не закроете дочернюю форму, не сможете получить доступ к главной. Оценка за ответ: 4. Вопрос #204: 1. [Отвечает: Dron, 17.12.2005 23:29]: Возможно, в настройка обозревателя в Windows отключены Java-скрипты, поэтому и ошибку выдаёт. Чтобы выполнялись Java-скрипты никаких дополнительных пакетов устанавливать не нужно. Попробуйте открыть в IE и посмотреть - ошибка должна быть и в нём, т.к. в Windows всё взаимосвязано. Оценка за ответ: 4. Вопрос #206: 1. [Отвечает: Садовников Владимир, 17.12.2005 20:33]: Помимо драйвера USB тебе ещё придётся писать драйвер Flash-памяти. Поэтому хорошенько подумай, а оно тебе действительно надо? Может быть, этот документ тебе поможет: http://thegercog.narod.ru/Files/Docs/windows/wdm_power_management.rar. Но помимо этого нужно ковырять ещё драйвер Flash, а это сложнее на порядок. При этом ты будешь зависеть от конкретного производителя или конкретной реализации модели Flash-памяти. Ещё один плюс к работе - это то, что нужно ковырять файловую систему. Если на Flash находится FAT, то там не так сложно спрятать кластеры, но если попадётся NTFS/Ext/Reiser - то это будет на порядок сложнее. Можешь скачать с моего сайта документацию на FAT: http://xskernel.narod.ru/documentation/software/fat.pdf Оценка за ответ: 5. Вопрос #207: 1. [Отвечает: Садовников Владимир, 17.12.2005 20:36]: Есть хорошая функция - ParamStr(Index:Integer). Index может принимать значения от 0 до ParamCount(). Функция ParamStr возвращает аргумент командной строки по его номеру. Т.е. если мы хотим получить первый параметр, переданный программе, мы должны запросить ParamStr(1). Кроме этого, нулевым параметром всегда является полный путь к запущенному приложению. Поэтому ParamStr(0) аналогично Application.ExeName, но делает программу значительно компактной, т.к. отпадает необходимость использования VCL. Оценка за ответ: 5. 2. [Отвечает: Деревянко Евгений, 17.12.2005 22:33]: Фунция ParamStr возвращает параметры командной строки. Нулевой параметр и есть название файла запущеной программы. Например: s := ParamStr(0); Оценка за ответ: 5. 3. [Отвечает: Dron, 17.12.2005 23:37]: Полный путь к exe-файлу программы, кроме Application.ExeName можно узнать, прочитав значение ParamStr(0). Согласно правилам Windows нулевой параметр - это путь к exe-файлу, а следующие параметры (1, 2 и т.д.) - это уже командные параметры. Оценка за ответ: 5. 4. [Отвечает: Матвеев И.В., 18.12.2005 06:07]: Используйте метод Windows.GetCommandLine; Он возвращает всю командную строку с которой было запущено Ваше приложение. Или другой, более надежный метод - GetModuleFileName. Вот пример: var Buffer: array[0..260] of Char; Str : string; begin SetString(Str, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer))); ShowMessage(Str); Желаю удачи. Оценка за ответ: 5. 5. [Отвечает: Pavel A. Repin, 19.12.2005 09:00]: Для этого подходит функция ParamStr(), предназначенная для определения параметров, с
которыми была запущена программма.
Paramstr(0) - содержит полный путь к программе. Оценка за ответ: 5. 6. [Отвечает: PVS, 19.12.2005 11:13]: ParamStr(0) - он в System. Оценка за ответ: 5. 7. [Отвечает: Сергей Азачем, 19.12.2005 13:07]: Использовать функцию GetModuleFileName. Оценка за ответ: 3. 8. [Отвечает: Антон Трапезников, 20.12.2005 07:27]: Здравствуйте, Alex. Для этого используется функция ExtractFilePath. Вот примеры её использования: MessageDlg('program path = ' + ExtractFilePath(Application.ExeName, mtInformation, [mbOk], 0); или function ApplicationPath: string; begin Result := ExtractFilePath(ParamStr(0)); end; Оценка за ответ: 5. 9. [Отвечает: Feniks, 20.12.2005 13:00]: Старой и доброй функцией Paramstr(0), которая вернет тебе путь и имя файла. Есть еще АПИшные функции, вот только я их не помню. Оценка за ответ: 5. 10. [Отвечает: midav.land.ru, 21.12.2005 11:35]: Программе передаются параметры командной строки. нулевой параметр как раз и хранит имя програмы с путём к нему. Так как Делфовский компилятор проводит разбор параметров, то просто пользуешься следующей конструкцией: ParamStr(0). Оценка за ответ: 5. Вопрос #208: 1. [Отвечает: Матвеев И.В., 18.12.2005 06:53]: Это очень просто и об это не раз писалось. Итак, Вам нужно поместить файл(ы) в ресурс, подключить этот ресурс к exe файлу программы, а затем сохранить эти файлы на диск. 1. Создание файла ресурсов. В Delphi за это отвечает утилита brcc32.exe, ей нужно передать файл скрипта ресурса .rc, этот файл имеет приблизительно такой вид: nameinres1 rcdata "Имя файла 1" здесь nameinres1 - имя в ресурсе, rcdata - секция, можно создавать свои, Имя файла 1 - имя файла, для добавления. Чтобы не писать это вручную, можно воспользовться утилиткой ResEd http://www.wasm.ru/baixado.php?mode=tool&id=237. Далее нужно передать этот сценарий в brcc32.exe и получаешь готовый файл ресурсов .res. Можно воспользоваться программой Resource Hacker (http://rpi.net.au/~ajohnson/resourcehacker) или ей подобной - она создает уже не сценарий, а готовый файл ресурсов. 2. Подключение файла к проекту. Осуществляется директивой R+ компилятора, например так: {$R resfile.res}, где это писать значение не имеет, хоть в проекте, хоть в .pas файле. 3. Сохранение файла из ресурсов на диск. Осуществяется с помощью класса TResourceStream: var rs: TResourceStream; a: Pointer; begin rs := TResourceStream.Create(hInstance, 'RCDATA_1', RT_RCDATA); try GetMem(a, rs.size); rs.Read(a^, rs.size); {Теперь a - динамический указатель на код} { Здесь делается все, что необходимо с кодом, используя указатель a } FreeMem(a); finally rs.Free; end; end; Желаю удачи. Оценка за ответ: 5. 2. [Отвечает: PVS, 19.12.2005 11:22]: Можно писать какие-угодно данные ПОСЛЕ кода программы. То есть в переменную надо запомнить размер программы без данных и со следующего байта читать "свою" информацию, открывая .exe-файл как внешний. Как ее туда дописать - дело техники (надежнее, конечно, другой программой). Оценка за ответ: 4. 3. [Отвечает: Feniks, 20.12.2005 13:14]: "Затолкнуть" в ЕХЕ-шник любой файл - это не проблема. "Запихивать" файлы в ЕХЕ-шник или в DLL-ку нужно следующим образом: создаешь текстовый файл с расширением .RC и пишешь в нем <имя ресурса> <тип хранимого ресурса> <имя файла> например: BackGround0 BITMAP "BackGround0.bmp" Тут перечислены стандартные типы ресурсов. Также можно использовать свои, например MYGIF. Но лучше использовать стандартные, так тогда проще их вытягивать будет. Если необходимо "затолкать" не стандартного типа ресурсов, тогда необходимо использовать RCDATA. Потом все это сохраняешь под именем myres.rc. ОЧЕНЬ ВАЖНО, чтобы все перечисленные в нем файлы и сам файл RC лежали в одной папке. Далее, компилируешь его с помощью утилиты brcc32 в файл .RES: brcc32 myres.rc. В результате получаешь myres.res Вот его потом присоединяешь в свое проект или в отдельный модуль: {$R myres.res} Тот файл RES, который сама Делфя используем по умолчания для каждого проекта, лучше не использовать, получишь много головной боли и хлопот. Я это сам на своей шкуре испытал. После присоединения его к проекту надо этот проект перебилдить (Build), а не перекомпилировать, т.к. при компиляции он не компилит файл RES в ЕХЕ. И в последующих изменениях в RC файле надо каждый раз билдить весь проект. Чтобы вытянуть эти ресурсы из ЕХЕ-файла и сохранить их в файлы: var ResStream : TResourceStream; begin ResStream := TResourceStream.Create(hInstance, <имя ресурса>, RT_RCDATA); ResStream.SaveToFile('NameFile.ext'); ResStream.Free; end; Также смотри в Хелпе: TResourceStream, LoadImage, LoadFromResourceName, LoadFromResourceID, LoadIcon, PlaySound, FindResource, FindResourceEx и т.д. и т.п. Оценка за ответ: 5. Все вопросы и ответы на них Вы всегда можете найти на нашем сайте в разделе "Эксперт": http://www.delphi.int.ru/modules.php?name=expert. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Новых статей нет. Раздел "Статьи" на сайте скоро будет переработан. Присылайте свои статьи по адресу info@delphi.int.ru с темой 'Articles' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки и на сайте. Также вы можете заполнить вот эту форму. Большая просьба: статью оформляйте в -txt или -doc формате и используйте -zip или -rar сжатие (без самораспаковки). |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Из данного раздела Вы можете скачать различные файлы: компоненты, plug-in'ы для Delphi, документацию по программированию, программы, игры, написанные на Delphi и всё остальное... Вы можете добавить свои файлы в данный раздел. Чтобы сделать это, пожалуйста, заполните форму на сайте. Новые файлы на сайте:
Чтобы перейти к разделу "Файловый архив" на сайте, нажмите на эту ссылку. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Здесь представлены ссылки на дружественные сайты нашего портала. Если вы тоже хотите стать нашим другом, разместите наш баннер на своём сайте. Подробнее о том, как это сделать, можно прочитать на странице данного раздела на нашем сайте. Узнать о всех наших друзьях более подробно вы сможете на той же странице... http://www.excode.ru/ - Статьи, исходники, компоненты, книги, кодерский магазин. http://xskernel.narod.ru/ - XSystem Kernel Project. Сайт, посвящённый написанию операционной системы. Новости, информация об XSystem Kernel Team, документация, глоссарий, исходники системы. Open Source - наше направление. http://tpascal.h15.ru/ - Сайт Злобина Евгения Сергеевича "ВСЁ О ПАСКАЛЕ". Здесь найдётся всё: исходники, программы, документация, алгоритмы, олимпиада, конкурсы, форум, уроки и многое, многое другое!!! Вступайте в сообщество ПаскALL. Сайт постоянно обновляется и развивается!!! http://www.hkdsoft.narod.ru/ - H.K.D. Soft - Программирование на Delphi, C/C++, Assembler, Pascal, Basic/VB/VBA/VBS. Компоненты, статьи, исходники, множество е-книг, форум. Бесплатный софт. Скачать программу GamesBase - базу данных по играм содержащую описания, скриншоты, коды, прохождения игр. http://infomania2004.webhost.ru/ - Этот сайт создан для того, чтобы вы могли получить интересующую вас информацию с минимальными затратами сил и времени. Если вы не нашли здесь нужной информации, вы можете оставить заявку на ее поиск. Как только информация будет найдена, она появится на сайте, а вам сообщат об этом. http://www.visualbasic.noka.ru/ - Программирование на Visual Basic & Basic. На сайте Вы найдете множество примеров, статьи, исходники, ActiveX, а также многое другое! http://www.sashook.hut1.ru/ - Игры, коллекция флешек, обои и заставки, компьютерные приколы, картинки, тосты и алкогольные присказки, смешные истории и анекдоты. http://www.ssgroup.fatal.ru/ - Delphi 39. Ресурс для программистов. Статьи, исходники, компоненты, учебники, справочники, FAQ, программы и многое другое. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Диалог между программистом и его женой вечером, после работы. :)) Анекдот прислал: Feniks. Пожалуйста, присылайте свои анекдоты по этой ссылке: info@delphi.int.ru и они обязательно будут опубликованы! Желательно на компьютерную тему.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Товарищи программисты! Проявляйте свою активность. Давайте помогать друг другу! Если вы не нашли ответа на свой вопрос, не отчаивайтесь! Количество подписчиков постоянно растёт и, наверняка, найдётся тот человек, который поможет вам! На сегодня всё. До встречи через неделю! Ведущий рассылки, Ерёмин Андрей. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вы можете оказать помощь нашему проекту через систему WebMoney: R379291065219, Z165075684614. Будем очень признательны! |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Наш сайт: http://www.delphi.int.ru/ E-mail: admin@delphi.int.ru; info@delphi.int.ru; expert@delphi.int.ru Страница рассылки: http://subscribe.ru/catalog/comp.soft.prog.delphifaq |
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphifaq Архив рассылки |
Отписаться
Вебом
Почтой
Вспомнить пароль |
В избранное | ||