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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

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

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

Выпуск № 1056
от 06.02.2008, 13:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 442, Экспертов: 60
В номере:Вопросов: 6, Ответов: 10

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 121062: Эксперты, здравствуйте! Необходима Ваша помощь, нужно решить вот эту задачку «Вводится строка S. Зашифровать строку s по таблице». ...
Вопрос № 121084: Нигде не могу найти, как можно открыть Htm-файл с закладками через внешний просмотровщик, установленный по умолчанию? Например: ShellExecute(Handle,'open',pChar('c:primer.htm#sakladka'),nil,nil,SW_SHOW) не работает в 7 Internet Explorer или...
Вопрос № 121139: Здравствуйте уважаемые эксперты! У меня такой вопрос: Пишу программу для работы с базами данных. Сервер FireBird. Программа имеет MDI интерфейс. некоторые редко вызываемы окна будут вызываться из dll-файлов. Если в вызываемой форме есть т...
Вопрос № 121156: Вопрос такого плана! // Создаём переменную и выделяем блок памяти: var P: Pointer; begin GetMem(P, 10 * SizeOf(Integer)); // ... // Освобождаем либо так: FreeMem(P, 10 * SizeOf(Integer)); // Либо как это дела...
Вопрос № 121161: Здравствуйте господа эксперты. У меня есть пара вопросов, которые меня давно уже мучают, но ответов не нахожу: 1. При использовании функции Windows.AnimateWindow с флагом blend на появление формы не прорисовываются некоторые компоненты (кнопки, в...
Вопрос № 121174: Вопрос такой! Есть блок памяти. Указатель на начало блока хранится в переменной P P: Pointer;Нужно разименовать этот блок как массив Integer'ов. Делаю так type PArray = ^TArray; TArray = array [0..MaxInt div SizeOf(Integer) ...

Вопрос № 121.062
Эксперты, здравствуйте!
Необходима Ваша помощь, нужно решить вот эту задачку «Вводится строка S. Зашифровать строку s по таблице».
Отправлен: 31.01.2008, 17:40
Вопрос задала: Alena De Lon (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Esi
Здравствуйте, Alena De Lon!
Чтобы решить Вашу задачу нужно:
1) открыть таблицу (dbf-файл, или таблица БД - этого не указано в вопросе).
2) организовать цикл выделению одного символа из строки S.
3) поиск этого символа в таблице (например table1).
4) записать полученный знак в новую строкуй (например S1).
Удачи!

Приложение:

Ответ отправил: Esi (статус: 3-ий класс)
Ответ отправлен: 31.01.2008, 18:37
Оценка за ответ: 5


Вопрос № 121.084
Нигде не могу найти, как можно открыть Htm-файл с закладками через внешний просмотровщик, установленный по умолчанию?
Например:
ShellExecute(Handle,'open',pChar('c:primer.htm#sakladka'),nil,nil,SW_SHOW) не работает в 7 Internet Explorer или в Mozilla Firefox.

Возникает ошибка ERROR_FILE_NOT_FOUND. Можно ли открыть закладку 'sakladka' в файле c:primer.htm?

Буду очень благодарен.
Отправлен: 31.01.2008, 20:34
Вопрос задал: Царев Олег Владимирович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Николай Владимирович / Н.В.
Здравствуйте, Царев Олег Владимирович!
Напрямую, по-моему, это сделать не удастся - нужно браузеру в параметрах командной строки передать путь к файлу вида file:///C:/primer.html#sakladka.
Предлагаю следующее решение:
1. в реестре находим, какое приложение должно открывать указанный тип файлов.
2. запускаем это приложение с параметром путь к файлу.
Проверил на IE и Firefox.

Удачи!

Приложение:

Ответ отправил: Николай Владимирович / Н.В. (статус: Специалист)
Ответ отправлен: 31.01.2008, 22:02
Оценка за ответ: 5


Вопрос № 121.139
Здравствуйте уважаемые эксперты!
У меня такой вопрос: Пишу программу для работы с базами данных. Сервер FireBird.
Программа имеет MDI интерфейс. некоторые редко вызываемы окна будут вызываться из
dll-файлов. Если в вызываемой форме есть таблица, как мне нужно сделать передать как параметр
сам DataBase или достаточно объявить в разделе uses глобальный Data-модуль в котором лежит TpFIBDatabase?

Приложение:

Отправлен: 01.02.2008, 08:00
Вопрос задал: Дадаев Заур Мусаевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: BlackRaider
Здравствуйте, Дадаев Заур Мусаевич!
Не совсем так.
вот реализация формы в DLL в приложении.

т.е. процедура которая вызывается из DLL как раз и открывает саму форму. в вашем примере я не понял каким образом она загружается из ДЛЛ?

Параметр fHw -передается для того чтоб форма принадлежала тому же приложению.
ADO это сам адоконнекшен. т.е. практически что и IBConnect.

Ниже вызов данной формы из ДЛЛ.

Приложение:

Ответ отправил: BlackRaider (статус: 2-ой класс)
Ответ отправлен: 01.02.2008, 09:17
Оценка за ответ: 3
Комментарий оценки:
В моем примере помоему не трудно догадаться, что форму открывает та процедура которую я привел в примере. То что я показал и что Вы мне далт практически одно и тоже > метод один!

Отвечает: Selya
Здравствуйте, Дадаев Заур Мусаевич!
В dll Database передавать нельзя. В лучшем случае можно передать строку (лучше PChar) с алиасом или путём к базе данных на диске.
Ответ отправил: Selya (статус: 5-ый класс)
Ответ отправлен: 01.02.2008, 10:40
Оценка за ответ: 3
Комментарий оценки:
Как понять нельзя? не рекомендуется или это невозможно (в моем примере я это сделал)


Вопрос № 121.156
Вопрос такого плана!
// Создаём переменную и выделяем блок памяти:
var
P: Pointer;
begin
GetMem(P, 10 * SizeOf(Integer));
// ...
// Освобождаем либо так:
FreeMem(P, 10 * SizeOf(Integer));
// Либо как это делают C++'ники
FreeMem(P);
end;
Теперь вопрос! Как ОС во втором случае знает, что нужно освободить именно 10 * SizeOf(Integer) байтов памяти, а не 1 байт или не 4 байта!
Отправлен: 01.02.2008, 10:23
Вопрос задал: Игнатьев Максим Викторович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Игнатьев Максим Викторович!

Этим занимается не ОС, а менеджер памяти Delphi.
Менеджер (в упрощенном виде) работает так:
1) при запросе выделить память (GetMem) запрашивает у ОС выделить приложениюпамять размером кратным 4к, но не менее запрошенного
2) записывает во внуетренней структуре соответствие указателя на выделенный блок памяти, его размер и некоторую служебную информацию
3) возвращает указатель
4) при вызове FreeMem менеджер памяти находит по указателю необходимые данные о пямяти и овобюождает ее.
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 10-ый класс)
Ответ отправлен: 01.02.2008, 10:34
Оценка за ответ: 5

Отвечает: Selya
Здравствуйте, Игнатьев Максим Викторович!
Цитата из "Delphi 5. Руководство разработчика" (С.Текстейра и К.Пачеко):
Таблица 2.6. Функции выделения и освобождения памяти
Функция выделения памяти Функция освобождения памяти
AllocMem() FreeMem()
GlobalAlloc() GlobalFree()
GetMem() FreeMem()
New() Dispose()
StrAlloc() StrDispose()
StrNew() StrDispose()
VirtualAlloc() VirtualFree()

И собственно ответ. Какая разница. Просто прими это как должное. А если серьёзно, то компилятор при создании переменной и выделении преременной памяти (GetMem) запоминает её размер.
Ответ отправил: Selya (статус: 5-ый класс)
Ответ отправлен: 01.02.2008, 10:36
Оценка за ответ: 5


Вопрос № 121.161
Здравствуйте господа эксперты. У меня есть пара вопросов, которые меня давно уже мучают, но ответов не нахожу:
1. При использовании функции Windows.AnimateWindow с флагом blend на появление формы не прорисовываются некоторые компоненты (кнопки, в редакторах текста нет), кто - нибудь с этим боролся успешно?
2. С помощью каком проги можно наиболее полно просмотреть файлы dcu.
Отправлен: 01.02.2008, 11:09
Вопрос задал: Genia007 (статус: 5-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Selya
Здравствуйте, Genia007!
1. Попробуйте в обработчике FormCreate()
DoubleBuffered := True;

2. DCU - Delphi Compiled Unit - предкомпилированный pas, из них собирается exe-шник. Просматривать их не к чему. Предполагаю, что у вас какой то коммерческий компонент с .dcu и без .pas, и в них вы что-то хотите посмотреть. Ничего там не увидите.
Ответ отправил: Selya (статус: 5-ый класс)
Ответ отправлен: 01.02.2008, 11:50
Оценка за ответ: 4
Комментарий оценки:
1. Не хочет работать, кроме того ещё и меняет цвет формы. 2. Чо такое файлы dcu я знаю, и мне действительно нужно посмотреть dcu файлы коммерческих компонентов, с которыми не шли pas, ну очень нужно разобраться с их кодом.

Отвечает: Николай Владимирович / Н.В.
Здравствуйте, Genia007!
DCU, как уже правильно ответили, это откомпилированный модуль Delphi.
Посмотреть его в виде кода никак не получится.
Конечно, возможность взлома dcu. Точнее даже не взлома, а корректирования в нем каких-либо частей. Не буду описывать как это делается, т.к. Вы хотите изменить чей-то чужой коммерческий компонент, который не распространяется в исходных кодах - а это будет нарушение лицензии.

Вообще, dcu можно сравнить в программами (exe): из откомпилированной программы нельзя получить исходники на delphi (ну только если некоторое подобие, которое реально все равно использовать не получится) - только ассемблерный код. В лицензионном соглашении большинства программ, распространяющих только в виде exe, сказано что их запрещается декомпилировать и т.п. Аналогично dcu - их изменение будет нарушением лицензии.

Удачи!
Ответ отправил: Николай Владимирович / Н.В. (статус: Специалист)
Ответ отправлен: 01.02.2008, 17:03
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ. Менять в коде я не чего не собираюсь, просто мне нужно разобраться как он работает, или хотя бы узнать процедуры, которые использовались при его написании, чисто профессиональный интерес.


Вопрос № 121.174
Вопрос такой!
Есть блок памяти. Указатель на начало блока хранится в переменной P
P: Pointer;Нужно разименовать этот блок как массив Integer'ов.
Делаю так
type
PArray = ^TArray;
TArray = array [0..MaxInt div SizeOf(Integer) - 1] of Integer;
далее
PArray(P)^[I] := Value;

Но если у меня значений больше, чем MaxInt div SizeOf(Integer), то фсё!
Ругается!!!

Порылся в инете и увидел такую инструкцию:
PArray = ^TArray;
TArray = array [0..0] of Integer;
и т.д.
Говорят у них всё работает. А у меня...????
Отправлен: 01.02.2008, 12:48
Вопрос задал: Игнатьев Максим Викторович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Игнатьев Максим Викторович!

Работать "array [0..0] of Integer;" будет, если Вы в опциях компилятора выключите контроль границ ("Range checking")

В качестве альтернативы Вы можете использовать описанный в Delphi тип PIntegerArray:

PIntegerArray(P)^[I] := Value;
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 10-ый класс)
Ответ отправлен: 01.02.2008, 12:57

Отвечает: Selya
Здравствуйте, Игнатьев Максим Викторович!
перед использованием TArray = array [0..0] of Integer;
отключайте проверку диапазона {$R-}
не забудьте в конце восстановить {$R+}
Ответ отправил: Selya (статус: 5-ый класс)
Ответ отправлен: 01.02.2008, 14:22


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

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

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

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

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

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


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


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.70 от 17.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное