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

Программирование на Delphi

  Все выпуски  

Программирование на Delphi (выпуск 53)


Программирование на DELPHI
Выпуск #53 (19 августа 2006 г.)

Разделы сайта:

Новости сайта
Delphi.int.ru Expert
Файловый архив
Статьи
Компоненты
Plug-in's
Документация
Исходники
Изображения
Игры
Программы
Форум
F.A.Q.
Архив рассылки
Каталог сайтов
Обратная связь

Доброго времени суток, уважаемые читатели!

Со времени последнего выпуска рассылки в системе Delphi.int.ru Expert произошли некоторые изменения:

Версия 1.54 (24.07.2006):
- Добавлены индикаторы онлайн-состояния участников на сайте;
- В "Информацию об участнике" добавлена информация о времени последнего посещения сайта данным участником;
- Создано поле "Лучшие эксперты".

Версия 1.6 (01.08.2006):
- Выделен отдельный домен на сайте для системы;
- Изменены адреса ссылок системы для более быстрого набора и запоминания;
- Небольшие изменения в письмах вопросов, ответов, отчётов о доставке вопросов и сообщений форумов;
- Исправлена ошибка с загрузкой файлов на сервер участниками портала;
- Исправлены мелкие недочёты.

Версия 1.61 (14.08.2006):
- Добавлена возможность использовать специальные теги (>>) в текстах вопросов;
- Лимит объёма файлов, загружаемых участниками на сервер, увеличен до 2 Мб;
- Исправлены мелкие ошибки.

В настоящий момент ведётся разработка модификаций для системы. Условные статусы экспертов будут реорганизованы, а также будут добавлены дополнительные возможности, использовать которые эксперты смогут, получая каждый следующий статус.

Обо всех замеченных ошибках пишите, пожалуйста, на expert@delphi.int.ru.

Приятного чтения и до скорой встречи!

Разделы рассылки:

Авторское слово
Delphi.int.ru Expert
Статья по Delphi
Файловый архив
Друзья
Юмор

Количество читателей рассылки: 5302.

Delphi.int.ru Expert

Задать вопрос экспертам >> Стать экспертом или уйти из состава экспертов >>Эксперты системы >>

Delphi.int.ru Expert  – вопросы и ответы (#48 - #60)
Вопрос № 48

Текст вопроса:

Уважаемые эксперты.
Первый раз пытаюсь использовать docking технологию. Попытки изучить этот вопрос по хелпам и по сторонним статьям многого не дали. Вопросы в следующем:

Прложение MDI. Внем создается Child форма, основное пространство которой занимает рисунок по Canvac. Чтобы пристыковать к ней другое окно (также с рисунком по Canvac) я положил на форму компотент типа TPanel и уже ему назначил свойства DockSite := True, DragKind := dkDock, DragMode := dmAutomatic. Окно, которое должно стыковаться с панелью, соответственно имеет DockSite := False, DragKind := dkDock, DragMode := dmAutomatic.
При создании Child окна, я сразу пристыковываю к панели необходимое окно при помощи методов Dock и DockManager.InsertControl. Получаю требуемую картинку. До сих пор все хорошо. Теперь вопросы
1. Каким образом, при отстыковке, я могу задать размеры отстыковываемой формы?
2. Как запретить отстыковываться самой панели по DblClick в отдельное окно, когда я уже отстыковал мою форму?
3. Можно ли управлять размером панели на основной (Child форме), кроме как установкой Splitter'а?
4. Почему ClientHeight и ClientWidth у Child формы не подстраиваются с учетом размеров DockSite панели?

Заранее благодарен, всем кто проявит внимание

Автор вопроса: Мартынов Михаил (статус: Посетитель)
Дата и время отправки вопроса: 20.06.2006, 20:17
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 13
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Косолапов Дмитрий Юрьевич (статус: 1-ый класс), 21.06.2006, 09:12]:

В двух словах и не объяснишь... Для начала я бы посоветовал внимательнейшим образом изучить демо Docking.
1. Присвой необходимые размеры в событии OnUnDock формы.
2. Странно, что панель у тебя отстыковывается, вроде бы не должно быть так... Кстати, может быть делать Dock не на Child-форму, а на главную?
3. Вероятно, нет.
4. Странно это... Может быть, в этот момент как раз сама панель отстыковалась???

Оценка за ответ: 2.
Комментарий: В демо Docking на поставленные вопросы ответов нет, также как нет их в явном виде и вHelp'ах D7, D2005. 1. Первый вопрос снят. При перекапывании исходников найдены два соответствующих свойства: UndockHeight и UndockWidth. А в событии OnUnDock формы простым присвоением размеров ничего сделать нельзя. Так что совет бесполезный. 2. Эффект наблюдается еще более интересный: по DblClick на Docking zone, еще при не отстыкованном окне появляются вообще два окна- одно мое, а другое с DockSite панелью. А Dock на Child форму обязательное в данном случае условие 3. Непонятно, каким образом все таки изменяются размеры панелей у Марко Кенту в примерах на его сайте. Никаких сплиттеров он не применяет 4. Этот эффект происходит в любые моменты, которые я мог отследить в отладчике. При этом панель постоянно присутствует на форме



Вопрос № 49

Текст вопроса:

Здравствуйте, уважаемые эксперты!
Я начал работать с 3D движком DGLEngine.
Делаю "строитель" сцен.
В общем мне нужна фишка такая: мне нужно из моей процедуры перехватить нажатие кнопки и если кнопка нажата, то сделать кое какое действие (например, нажимаю кнопку - рисуется шар).
Понимаю, вопрос не из разряда сложных. Просто ниразу конкретно этим не занимался.
_______________
С уважением, Евгений!

Автор вопроса: Евгений В (статус: 1-ый класс)
Дата и время отправки вопроса: 20.06.2006, 20:36
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 1
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Виталий Лещенко (статус: 2-ой класс), 20.06.2006, 22:42]:

Слелай лучше так:
Объяви булевский массив keys от #0 до #255
В обработчике события OnKeyDown пометь нужную клавишу "нажатой". В OnKeyUp - "отпущенной".
Иогда ты в любой момент сможешь проверить нажата ли клавиша... сам так делаю в своем движке - работает на ура.

Оценка за ответ: 5.

2. [Отвечает: Злоумышленник (статус: 1-ый класс), 20.06.2006, 23:17]:

Как пример проверки, нажаты ли кнопки Ctrl и Alt:
if (getasynckeystate(vk_Control)<>0) and (getasynckeystate(vk_Menu)<>0) then
{что-то делаем}

Оценка за ответ: 5.



Вопрос № 50

Текст вопроса:

Я работаю на Дельфи5.
Работаю с базами *.dbf с помощью компонента
TDBF.
Компонент TDBF предназначен для непосредственного доступа (без
использования BDE, ODBC и т.п.) к файлам формата dbf версий
dBase III+, dBase IV, dBase V, dBase for Windows.

Мне нужно сортировать записи в *.dbf файле
по полю, которое укажет пользователь (есть поля таких типов - числовой, символьный/строковый/,дата).
Подскажите, как мне это сделать и с помощь чего (желательно TDBF,чтоб без
использования BDE, ODBC и т.п. )????
ПОМОГИТЕ!!!!!!!

Автор вопроса: Игорь Середюк (статус: Посетитель)
Дата и время отправки вопроса: 21.06.2006, 11:17
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 6
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Вадим К (статус: 7-ой класс), 21.06.2006, 11:30]:

Этот компонент предоставляет прямой доступ и соответственно записи выдаются в таком порядке, в котором они находятся в файле. Сортировать компонент кажеться не может. Но кто мешает сортировать ручками! Предлагаю два метода.
Первый)заводим массив записей, закачиваем в него базу и делаем, что наша душа желает.
Два)Читаем первую запись и добавляем её в список. Читаем вторую и сравниваем с первой. Решаем, добавить выше или ниже. И так далее.
Правда есть ещё один вариант - использовать EhLib - этот грид позволяет делать локальную сортировку, вот только позволяет ли он с TDBF соединиться, не знаю, но точно скажу, если стандартный DBGrid подключается, то EhLib тоже заработает.

Оценка за ответ: 4.



Вопрос № 51

Текст вопроса:

Я работаю на Дельфи5.
Работаю с базами *.dbf с помощью компонента
TDBF.
Компонент TDBF предназначен для непосредственного доступа (без
использования BDE, ODBC и т.п.) к файлам формата dbf версий
dBase III+, dBase IV, dBase V, dBase for Windows.

Мне нужно сортировать записи в *.dbf файле
по полю, которое укажет пользователь (есть поля таких типов - числовой, символьный/строковый/,дата).
Подскажите, как мне это сделать и с помощь чего (желательно TDBF,чтоб без
использования BDE, ODBC и т.п. )????
ПОМОГИТЕ!!!!!!!

Автор вопроса: Игорь Середюк (статус: Посетитель)
Дата и время отправки вопроса: 21.06.2006, 11:17
Получено ответов на вопрос: 0
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

К сожалению, ответов на данный вопрос не поступило...



Вопрос № 52

Текст вопроса:

Как послать звук через динамик компа????????
Работаю в Delphi5 в ОС Windows2000.
Пробовал BEEP - посылает через звуковую плату
Пробовал BEEP(37, 1000) - Не компилирует.

Как послать звук на динамик компа? Хочу задавать разную тональность.
Но надо, чтобы была возможность настроить, посылать этот звук через динамик или звуковую карту (это для разных машин).
Спасибо!!!!!!!!

Автор вопроса: Игорь Середюк (статус: Посетитель)
Дата и время отправки вопроса: 21.06.2006, 11:25
Получено ответов на вопрос: 3
Сообщений в форуме вопроса: 1
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: bruder (статус: 3-ий класс), 21.06.2006, 11:46]:

Здравствуйте, Игорь.
Эта процедура Вам поможет.

Приложение:

2. [Отвечает: Darya Ermakova (статус: 8-ой класс), 21.06.2006, 11:59]:

Дело в том, что по умолчанию используется SysUtils.Beep, он без параметров. Чтобы указать длительность и частоту, нужно указать Windows.Beep. Правда при этом звук тоже посылается на звуковую плату.
Может, вам помогут стандартные звуки Винды, они звучат в динамике и вызываются функцией MessageBeep.

Оценка за ответ: 5.

3. [Отвечает: min@y™ (статус: 2-ой класс), 21.06.2006, 14:44]:

Покопался в тырнете и нашёл, пожалуй, то, что надо:

TSpeaker v.1.3.11.05.2005 FWS 14 Kb 12 Jul 2005
By MacroSoftware Public Area. Control your PC speaker in Delphi in design- and run-time mode.


TSpeaker features:


* works in design- and run-time mode;
* full Object Inspector control (i e. frequency and duration for sound);
* can play single sounds and sound-sequences;
* event with handled parameter;
* works under Windows 9x and NT family.

Fully functional
Source: Included

Сцыла на скачивание вот: http://www.torry.net/vcl/sound/pcspeaker/Speaker.zip

Скачал себе, вдруг пригодицца?



Вопрос № 53

Текст вопроса:

Уважаемые эксперты! Из справочника DelphiWorld пытаюсь использовать фрагмент кода (Установка компонентов в TBGrid-статья Николая)Задача-выбор в TBGrid поля записи, в которую выбор из справочника из другой таблицы с использованием TDBLOOKUPCOMBO.
"Прикрученный" компонент не реагирует на события OnDrawDataCell и OnColExit.
В чем дело? Поясните, пожалуйста.

Приложение:

Автор вопроса: Федоненко Владимир Викторович (статус: Посетитель)
Дата и время отправки вопроса: 21.06.2006, 12:48
Получено ответов на вопрос: 0
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

К сожалению, ответов на данный вопрос не поступило...



Вопрос № 54

Текст вопроса:

У меня через определенное пользователем время
в RichEdit записіваются кое-какие строки (допустим имена найденых файлов)
Хочу, чтобы форма при сворачивании отображалась отображалась в СистемТрее а не на панели задач (желательно выбрать, как удобнее для пользователя).
И когда форма в Трее или на панеле задач,
строки, которие записываются в РичЭдит в какое то момент (через заданое время, или после заполнения РичЭдита) Отображались так, как в WinХР отображается информация о только что найденых устройствах, или о подключении к сети. И чтобы это уведомление задерживалось на заданое время.

Помогите!!

Спасибо.

Автор вопроса: Игорь Середюк (статус: Посетитель)
Дата и время отправки вопроса: 21.06.2006, 17:59
Получено ответов на вопрос: 3
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Евгений Козаченко (статус: 1-ый класс), 21.06.2006, 18:49]:

Юзай компонент CoolTrayIcon.
Брать тут - www.delphi32.com/vcl/5086/

В нём есть отдельные функции для сворачивания в Трей, Скрытия из панели задач, вывода сообщений. У них простые параметры, легко разберёшься в использовании.

P.S. Вообще там два компонента (один - обычная иконка в трее, а другой - спец. для вывода текста в трей (проценты копирования например)).

2. [Отвечает: Darya Ermakova (статус: 8-ой класс), 21.06.2006, 19:10]:

Для сворачивания в трей на сайте есть компонент Cool Tray Icon.
Для уведомления можно оформить соответствующим образом форму, показать ее, а потом закрыть:
Form1.Show;
Sleep(5000); //отображается 5 секунд
Form1.Close;

3. [Отвечает: feenords (статус: 1-ый класс), 22.06.2006, 00:55]:

Бери CoolTrayIcon. Самый лучший компонент для работы с треем!

К ответам добавлю:
Как осуществить натройку (чтобы пользователь выбирал):
1) Ставь на форму (где будут настройки) 3 RadioButton (Отображение "И в трее и на панели задач","Только на панели задач","Только в трее" - соответственно каждое - для Caption RadioButton1-3) и кнопку (Button1). Я полагаю, что настройка будет на другой форме (например, Form2). А на главную форму CoolTrayIcon1 (с ним проведи настройу как хочешь):
2) В OnClick RadioButton1 пиши:
Form1.CoolTrayIcon1.IconVisible:=True;
Form1.CoolTrayIcon1.ShowTaskbarIcon;
3) В OnClick RadioButton2 пиши:
Form1.CoolTrayIcon1.IconVisible:=False;
Form1.CoolTrayIcon1.ShowTaskbarIcon;
4) В OnClick RadioButton3 пиши:
Form1.CoolTrayIcon1.IconVisible:=True;
Form1.CoolTrayIcon1.HideTaskbarIcon;
5) В OnClick Button пиши:
IniFile:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'Settings.ini'); IniFile.WriteBool('Tray','Visible1',RadioButton1.Checked); IniFile.WriteBool('Tray','Visible2',RadioButton2.Checked);
IniFile.WriteBool('Tray','Visible3',RadioButton3.Checked);
IniFile.Free;
//Сохранение настроек в ini-файл, предварительно добавь в uses IniFiles, а затем, где:
var
Form1: TForm1; //у тебя это уже есть
IniFile: TIniFile; //а вот это добавь
6) В OnCreate формы пиши (Загрузка значений):
IniFile:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'Settings.ini');
RadioButton1.Checked:=IniFile.ReadBool('Tray','Visible1',RadioButton1.Checked);
RadioButton2.Checked:=IniFile.ReadBool('Tray','Visible2',RadioButton2.Checked);
RadioButton3.Checked:=IniFile.ReadBool('Tray','Visible3',RadioButton3.Checked);
IniFile.Free;
7) Вроде бы всё... но можно поэксперементировать с отображением кнопки Button.Enable:=True или False;
Например, когда значения RadioButton1-3 стоят так как надо и их никто не изменял, то Button.Enable:=False;
А при изменении (при переключении между RadioButton)
Button.Enable:=True;
А затем при принятии настроек
Button.Enable:=False;
И так далее... эксперементировать можно бесконечно...



Вопрос № 55

Текст вопроса:

Люди! Скажите как програмно запустить другую программу и передать ей какие-либо параметры (с помощью ShellExecute) причём параметры заключенв в переменную perem : string (Delphi 2005)?

Автор вопроса: Жучков С. (статус: Посетитель)
Дата и время отправки вопроса: 22.06.2006, 11:28
Получено ответов на вопрос: 4
Сообщений в форуме вопроса: 8
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Помфюк Владимир Степанович (статус: 6-ой класс), 22.06.2006, 11:53]:

prg:='c:\otherprog.exe';
params:='/param1 /param2';
ShellExecute(Form1.Handle,"open" ,PChar(prg), PChar(params),nil,SW_SHOWMAXIMIZED);

Оценка за ответ: 5.

2. [Отвечает: Виталий Лещенко (статус: 2-ой класс), 22.06.2006, 17:01]:

Тебе нужно именно с помошью ShellExecute?
imho это не самый лучший способ запуска программ, хотя бы потому, что эта функция предназначена немного для другого...
Вот пример как реализовать нужную тебе функциональность, но с помощью CreateProcess.

Приложение:

Оценка за ответ: 5.
Комментарий: Ещё бы пояснения в коде...

3. [Отвечает: Щекочихина Татьяна Николаевна (статус: 1-ый класс), 23.06.2006, 07:35]:

ShellExecute(0, 'open', PChar(perem1),PChar(perem2), nil, SW_SHOW);
где perem1 - сама программа(ее имя),
а perem2 - парамтры к этой программе.
Если параметров нет, то вместо PChar(perem2) надо поставить nil.
Например: perem2:='-b -role admim -user sysdba -password zz GRS.GDB d:\work\arch\grs01.gbk';
perem1:='d:\util\gbak.exe';

Оценка за ответ: 5.

4. [Отвечает: min@y™ (статус: 2-ой класс), 23.06.2006, 08:20]:

Вот пример запуска Internet Explorer с заданным URL'ом:

Приложение:

Оценка за ответ: 5.



Вопрос № 56

Текст вопроса:

Доброе время суток! :) Продолжаю изучать функции и компоненты Delphi :). Вот функции FloatToStrF передаётся 4 параметра: (выражение, формат, точность, количество_цифр). Меня интересует параметр формат. Обьясните какую функцию он выполняет, какие может принемать значения и хотелось бы услышать по подробнее о этих значениях.

Автор вопроса: Жучков С. (статус: Посетитель)
Дата и время отправки вопроса: 22.06.2006, 11:28
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 1
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: mvp (статус: 4-ый класс), 22.06.2006, 12:12]:

type TFloatFormat = (ffGeneral, ffExponent, ffFixed, ffNumber, ffCurrency);
Описание с http://www.program.rin.ru/razdel/html/1060-1.html
ffExponent - Научная форма представления с множителем ехх ("умножить на 10 в степени XX"). precision задает общее количество десятичных цифр мантиссы, Digits - количество цифр в десятичном порядке хх. Число округляется с учетом первой отбрасываемой цифры:3,1416Е+00
ffFixed - Формат с фиксированным положением разделителя целой и дробной частей, precision задает общее количество десятичных цифр в представлении числа. Digits - количество цифр в дробной части. Число округляется с учетом первой отбрасываемой цифры:3,14
ffGeneral - Универсальный формат, использующий наиболее удобную для чтения форму представления вещественного числа. Соответствует формату ff Fixed, если количество цифр в целой части меньше или равно precision, а само число - больше или равно 0,00001, в противном случае соответствует формату ff Exponent: 3,1416
ffNumber - Отличается от ffFixed использованием символа-разделителя тысяч при выводе больших чисел (для русифицированной версии Windows таким разделителем является пробел). Для value = П *1000 получим 3 141,60
ffCurrency - Денежный формат. Соответствует ffNumber, но в конце строки ставится символ денежной единицы (для русифицированной версии Windows - символы "р."). Для value = П*1000 получим 3 141,60р.


Ещё могут пригодится переменные:
CurrencyString: String - Символ или символы денежной единицы; для русифицированной Windows ими являются символы "р."
CurrencyFormat: Byte - Определяет положение символов денежной единицы: 0 - $1; 1 - 1$; 2 - $ 1; 3 - 1 $; в русифицированной Windows используется формат 1 (1р.)
NegCurrFormat: Byte - Определяет формат отрицательной суммы: 0 = ($1); 1 = -$1; 2 = S-1; 3 = $1-; 4 = (1$); 5 = -1$; 6 = 1-$; 7 =1$-; 8=-!$; 9=-$!; 10=1 $-; 11 =$1-; 12=$-!; 13= 1- $; 14 = (S 1); 15 = (1 $); в русифицированной Windows используется формат 5 (-lp.)
ThousandSeparator: Char - Разделитель тысяч; в русифицированной Windows используется символ #166
DecimalSeparator: Char - Разделитель дробной и целой частей числа (', ')
CurrencyDecimals: Byte - Количество цифр после запятой в денежном формате. Обычно содержит 0, что блокирует вывод мелкой денежной единицы. Чтобы в сумме присут ствовали не только рубли, но и копейки, в переменную следует установить значение 2

P. S. Последние 4 переменные необходимо сохранять перед изменением, а потом возвращать на место во избежания проблем на разных машинах

Оценка за ответ: 5.

2. [Отвечает: Darya Ermakova (статус: 8-ой класс), 22.06.2006, 12:54]:

А в хелп все же стоит иногда заглядывать :) Переводчика под рукой не было, присылаю как есть:

ffGeneral
General number format. The value is converted to the shortest possible decimal string using fixed or scientific format. Trailing zeros are removed from the resulting string, and a decimal point appears only if necessary. The resulting string uses fixed point format if the number of digits to the left of the decimal point in the value is less than or equal to the specified precision, and if the value is greater than or equal to 0.00001. Otherwise the resulting string uses scientific format, and the Digits parameter specifies the minimum number of digits in the exponent (between 0 and 4).

ffExponent
Scientific format. The value is converted to a string of the form "-d.ddd...E+dddd". The resulting string starts with a minus sign if the number is negative, and one digit always precedes the decimal point. The total number of digits before the exponent in the resulting string (including the one before the decimal point) is given by the Precision parameter. The "E" exponent character in the resulting string is always followed by a plus or minus sign and up to four digits. The Digits parameter specifies the minimum number of digits in the exponent (between 0 and 4).

ffFixed
Fixed point format. The value is converted to a string of the form "-ddd.ddd...". The resulting string starts with a minus sign if the number is negative, and at least one digit always precedes the decimal point. The number of digits after the decimal point is given by the Digits parameter--it must be between 0 and 18. If the number of digits to the left of the decimal point is greater than the specified precision, the resulting value will use scientific format.

ffNumber
Number format. The value is converted to a string of the form "-d,ddd,ddd.ddd...". The ffNumber format corresponds to the ffFixed format, except that the resulting string contains thousand separators.

ffCurrency
Currency format. The value is converted to a string that represents a currency amount. The conversion is controlled by the CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, and DecimalSeparator global variables, all of which are initialized from the Currency Format in the International section of the Windows Control Panel. The number of digits after the decimal point is given by the Digits parameter--it must be between 0 and 18.

Оценка за ответ: 2.
Комментарий: В хелпе я смотрел. Мне нужно русское описание.



Вопрос № 57

Текст вопроса:

Здравствуйте уважаемые эксперты!
Как известно, есть 2 типа окон с полосами прокрутки.
1) Когда при создании окна были указаны стили WS_HSCROLL и/или WS_VSCROLL (как в Блокноте).
2) Когда окно было создано без вышеуказанных стилей, но к нему "прикручены" отдельные скроллы (напр. MS Word). В этом случае окно, горизонтальный и вертикальный ScrollBar имеют каждый свой хендл.
Вопросы касаются второго случая:
1) Как определить хендлы горизонтального и вертикального скролла, если известен хендл связанного с ними окна?
2) Как определить хендл окна, если известен хендл связанного с этим окном горизонтального или вертикального скролла?
Заранее спасибо за любую оказанную помощь!

Автор вопроса: Yurchik (статус: 3-ий класс)
Дата и время отправки вопроса: 22.06.2006, 15:45
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Вадим К (статус: 7-ой класс), 23.06.2006, 11:00]:

Прямого способа скорее всего нет. Но можно сделать хитрей.
Вначале в цикле перебираем дочерние компоненты. Если вы рассматриваете чужое приложение, то с помощью API функций, если свою - то можно с помощью свойства Controls.
Каждый найденый элемент проверяем на то, скролл это или нет. Так как может быть, что в программе несколько скроллов, то необходимо также проверять их координаты и сравнивать с координатами окна.
Если вы не знаете, как сделать, какоее-то с перечисленых действий, почитайте это
www.DelphiWorld.narod.ru\base\chg_first_edit_text.html
www.DelphiWorld.narod.ru\base\other_windows.html
www.DelphiWorld.narod.ru\base\other_windows2.html



Вопрос № 58

Текст вопроса:

Здравствуйте. Никогда не занимался написанием каких либо компонентов. Но теперь возникла необходимость в расширении возможностей 1С. Все готовые компоненты не устраивают по причине элементарного не доверия к большенству. Вопрос заключается в возможной литературе которая поможет в этом вопросе.

Автор вопроса: Свистунов Вячеслав Викторович (статус: Посетитель)
Дата и время отправки вопроса: 22.06.2006, 21:08
Получено ответов на вопрос: 0
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

К сожалению, ответов на данный вопрос не поступило...



Вопрос № 59

Текст вопроса:

Уважаемые эксперты! Существуют ли компоненты для отображения web-страниц в приложении кроме стандартного TWebBrowser на движке IE?

Автор вопроса: Dron (статус: 7-ой класс)
Дата и время отправки вопроса: 24.06.2006, 10:36
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Евгений Козаченко (статус: 1-ый класс), 24.06.2006, 18:14]:

безусловно.
HTML Components (там есть свой аналог веб-браузера.
eldos v2.5 full sources delphi bcb - там почти все визуальные компоненты могут представоять текст форматированный хтмл-ем.

Оценка за ответ: 4.
Комментарий: Если не трудно, дайте пожалуйста ссылки на них. Просто так найти не удалось.

2. [Отвечает: bruder (статус: 3-ий класс), 25.06.2006, 10:52]:

Здравствуйте, [b]Dron[/b].
1.Запускаем один экземпляр Delphi.
2.В меню-баре выбираем пункт "Component", затем "Import ActiveX Control".
3.В появившемся окне, в списке зарегестрированных ActiveX Control'ов находим строку "DHTML Edit Control..." и выделяем ее (я не обещаю что у всех она будет, но если вдруг не будет попробуйте нажать кнопку "Add" и найти файл "C:\Program Files\Common Files\Microsoft Shared\Triedit\DHTMLED.OCX").
Этот компонент можно использовать и как html-editor, и как html-viewer.

Оценка за ответ: 5.
Комментарий: Хорошая вещь :-)



Вопрос № 60

Текст вопроса:

Подскажите, пожалуйста, как програмно можно узнать установлен ли пароль на документ Word?

Автор вопроса: Евгений (статус: Посетитель)
Дата и время отправки вопроса: 25.06.2006, 22:16
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: bruder (статус: 3-ий класс), 26.06.2006, 13:26]:

Средства безопасности Word включают:

Пароль на открытие документа: смысл ясен из названия. Пароль, который надо ввести при ручном или программном открытии документа.
Пароль на разрешение записи: Пароль, который надо ввести, чтобы получить возможность записать сделанные изменения.
Пароль на изменения (редактирование):
поля формы: запрещает внесение в документ изменений, кроме как в поля формы. Для тех, кто не сталкивался с электронными формами, поясняю - документ можно оформить в виде шаблона, где надо ввести текст в несколько полей. Например, так часто оформляют бланки стандартных договоров, где остается только забить реквизиты. Так вот, этот пароль запрещает изменение самого "тела" бланка.
комментарии: этот пароль запрещает внесение в документ изменений, иных, кроме добавления комментариев. Это используется при рецензировании документов - рецензент может написать свои комментарии к любому куску текста, но сам текст исказить не может.
запись исправлений: Запрещает внесение в документ изменений кроме как в режиме записи исправлений. Это используется также при рецензировании документов - сразу видите, какие изменения внесены.
Рекомендовать открытие только для чтения: документ будет открыт только для чтения, поскольку записать его под своим именем Word уже не даст.
Пароль может иметь длину до 15 знаков, содержать буквы, цифры, специальные символы (скобки и т.д.), имеет значение регистр символов пароля. На первый взгляд, много чего есть чтобы сделать жизнь спокойнее:)

Теперь поговорим об эффективности всего этого хозяйства...

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

Пароль на запись - это, в общем-то, то же самое, только с паролем. Пароль этот нахально хранится в документе в явном виде, можно найти HEX-смотрелкой. Так что про этот пункт защиты тоже можно благополучно забыть.
Пароль на изменения (поля формы, комментарии, исправления) - уже лучше, но остановит только совсем уж начинающего взломщика. Простой пример из жизни (под 2000, под другими версиями офиса должно быть то же самое): мне нужен был текст документа, который защищен паролем на изменения/поля формы. Word не дает скопировать текст, при попытке снять защиту нахально требует пароль. Пересохраняю документ в RTF. Открываю - на первый взгляд ничего не изменилось. Однако при попытке снять защиту эта самая защита молча снимается без запроса пароля:) Может, в каких-то патчах к офису это исправлено, но случай все равно показательный. К тому же тут есть еще один неприятный момент - благодаря особенностям реализации пароля на изменения к запароленному документу подходит не только введенный вами пароль, но и некоторые другие сочетания символов. Так что довольно условная защита.
Пароль на открытие документа - а вот это уже получше. Пароли хранятся в зашифрованном виде, единственным надежным способом взлома является перебор вариантов, дело долгое и нудное. Хотя специалисты по защите информации и не особо высокого мнения о применяемой в этом случае защите, ничего лучше у нас все равно нет:)
Отсюда делаем вывод: единственная относительно надежная защита, которая может заставить злоумышленника потратить сутки и недели на взлом - пароль на открытие документа, все остальное можно рассматривать только как средства борьбы с непреднамеренными искажениями документа.

Оценка за ответ: 5.




Статьи  >>

Любой из читателей может присылать свои статьи по адресу info@delphi.int.ru и они будут опубликованы в ближайших выпусках рассылки и на сайте.


Файловый архив  >>

Название
Описание
Категория
Объём
Ссылки
Cgi Scan
Сканер скриптов. Скрипты находятся в файле cgi.lst. В базе около 700 скриптов.
186 Кб
SHA1
Реализация алгоритма хеширования SHA-1 на Delphi.
10.4 Кб
MailCheck
Программа для проверки почты через указанный промежуток времени.
14.6 Кб

Screenshots
CgiScan Screenshot
Cgi Scan

Отправить файл »   

Ссылки  >>

Обмен ссылками и баннерами приветствуется для сайтов схожей тематики.

Romodos Software - Лучшие бесплатные программы, игры, музыка, рассылки, анекдоты, статьи, учебники по Delphi, HTML, JavaScript, Windows.
http://xskernel.excode.ru/
Сайт, посвящённый написанию операционной системы. Новости, информация об XSystem Kernel Team, документация, глоссарий, исходники системы. Open Source - наше направление.
http://www.visualbasic.noka.ru/ Программирование на Visual Basic & Basic. Статьи, контролы, исходники, примеры, игры, ActiveX, форум по VB, а также многое другое на одном сайте!
 
Рассылки Subscribe.Ru
Интернет для Delphi-программиста
Visual Basic для новичков и профессионалов
Программирование на Delphi
   
 

Юмор.

Буря в пустыне-2 или WinWars (часть 3)
Ведущий раздела: Bruder

Синяя полоска показывала уже 99%... вот, наконец, и 100. Фолкон с недоумением глядел на землю: пустыня внизу совершенно не походила на изученные им спутниковые фотографии ядерного центра. Похоже, понимала это и система, потому что следом за числом 100% появилось 101... потом 102...
На 106 экран залила синева, и появилась надпись: "Ошибка 000000e, вызванная модулем VXD0000(0) из модуля VXD0000(0). Возможно нормальное продолжение полета. Вы можете нажать Eject для катапультирования, или любую другую клавишу для продолжения. Внимание: при катапультировании вы потеряете весь несохраненный самолет."
Катапультироваться Фолкон пока что не собирался, тем более что впереди, наконец, показался ядерный центр. Поняв, что на Microsoft полагаться больше не стоит, лейтенант приготовился провести бомбометание вручную. Он повел самолет на снижение, дожидаясь, пока отметка системы наведения наложится на цель. Есть!
Фолкон вдавил кнопку.
Что-то проскрежетало, и выскочило новое сообщение: "Бомболюк выполнил недопустимую операцию и будет закрыт." С проклятием Фолкон потянул ручку на себя, чтобы вновь направить машину вверх. Но самолет продолжал быстро снижаться.
Лейтенант лихорадочно шарил мышкой по менюшкам, выискивая причину. "Джойстик не определяется", - прочитал он наконец. Поняв, что вернуть систему в рабочее состояние может только перезапуск, Фолкон выключил и включил питание пульта.
"Прошлый полет был завершен некорректно, - сообщила ему система. -Нажмите любую клавишу, чтобы начать проверку целостности самолета". "К черту!" - рявкнул Фолкон, нажимая "Отмена". Появилась заставка Winwars 2002; система неспешно начала грузиться. До земли оставались уже считанные сотни метров.
"Система загружена в безопасном режиме, - наконец поведал экран. -В этом режиме отключены функции полета и использования оружия, вы можете только ездить по аэродрому."
Поняв, что больше он уже ничего сделать не успеет, Фолкон долбанул "Eject", ожидая, что сейчас будет отстрелен колпак кабины, а затем могучий удар снизу выбросит его в воздух. Но вместо этого на экране появился очередной вопрос:
"Вы уверены, что действительно хотите катапультироваться?"
"ДА!!!" - истошно заорал Фолкон, глядя на мчавшуюся навстречу землю.
"Подождите, идет подготовка к катапультированию", - невозмутимо проинформировала система и погрузилась в задумчивость...

2.04.2002, 13:20. Багдад. Дворец Саддама Хусейна.

-Таким образом, - бодро докладывал генерал, - благодаря самоотверженным усилиям наших летчиков, вступивших в неравную схватку с американским агрессором, удалось отстоять безопасность ядерного центра, и был уничтожен новейший секретный самолет противника...
-Да? - тяжелый взгляд диктатора уперся в лицо докладчика, и тот поспешно опустил взор. -В самом деле, неравную. Трое против одного, и их счастье, что они не выжили, поскольку он все равно долетел до центра. Если центр что и спасло, то только милость Аллаха.
Генерал покрылся холодным потом. Он понимал, что его-то теперь никакая милость Аллаха не спасет.
-У тебя 30 секунд, чтобы оправдаться, - лениво бросил Саддам.
-Вот! - воскликнул генерал, вынимая из опечатанного контейнера блестящий компакт-диск. -Это нашли среди обломков самолета. Вершина американских компьютерных технологий! Новейшие программы управления боевой техникой!
-Ну что ж, у тебя появился маленький шанс, - диктатор откинулся в кресле. - За три недели это должно быть установлено на все боевые машины нашей армии.
-Будет исполнено, господин президент! - воскликнул генерал...
Через три недели и один день Ирак безоговорочно капитулировал.

:))

Присылайте компьютерные анекдоты, рассказы и истории по этой ссылке и они обязательно будут опубликованы.
Ведущий рассылки, Ерёмин Андрей.

В избранное