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

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


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

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

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

Выпуск № 369
от 29.01.2006, 03:12

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


Вопрос № 33882: Зравствуйте уважаемые эксперты у меня проблемма с массивами незнаю как найти максимальное число и минимальное число из получившегося массива и вывести во второй массив эти числа то есть Stringgrid2.cells[i,j]? Подскажите как это сделать?...
Вопрос № 33886: Здравствуйте, Программисты! У меня вопрос чисто конструктивный, то есть приблизительное описание движка будущей программы. Суть вопроса: Я хочу создать программу по Пневматике. Интерфейс программы заверен главным руководителем п...
Вопрос № 33908: Здравствуйте! 1. Каким образом вызывается диалоговое окно выбора ДИРЕКТОРИИ, не файла (что черезSaveDialog)? 2. При отрисовке в компонент Image появляется мерцание. Это можно устранить путём отрисовки в памяти (TBitmap.Create... ...Assign(бит...
Вопрос № 33916: Здравствуйте Уважаемые Эксперты! Как можно в Delpni 8 создать компонент XPManifest, и как сделать, чтобы в Delphi 8 или 2005 компоненты NET брались не из пакета Net Framework 1.1, а из Framework 2.0. И еще как можно программно запустить приложение. Н...
Вопрос № 33931: Добрый вечер. Возникла проблема защиты информации скрываемой в Edit за звездочками с помощью PasswordChar. Как можно защититься от программ с помощью которых просмотривают эту информацию (Астерикс, Ariskkey, Pwdcrack). Я не смогла такое реал...

Вопрос № 33.882
Зравствуйте уважаемые эксперты у меня проблемма с массивами незнаю как найти максимальное число и минимальное число из получившегося массива и вывести во второй массив эти числа то есть Stringgrid2.cells[i,j]? Подскажите как это сделать?

Приложение:

Отправлен: 23.01.2006, 13:43
Вопрос задал: Иванов Анатолий Петрович (статус: 1-ый класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Kazakh
Здравствуйте, Иванов Анатолий Петрович!
procedure TForm1.Button1Click(Sender: TObject);
Var I,J,min,max: Integer;
begin
min:=MaxInt; // больше не MaxInt integer'a нету
max:=-1; // меньше не м.б. так как рандомизируете положительные числа
// в любом случае можно использовать -MaxInt
For I:=0 To StringGrid1.ColCount-1 Do
For J:=0 To StringGrid1.RowCount-1 Do
Begin
// проще всего сразу здесь опредлять мин и макс значения
StringGrid1.Cells[I,J] :=IntToStr(Random(100));//созданный масив
if StringGrid1.Cells[I,J]>max then max:=StringGrid1.Cells[I,J];
if StringGrid1.Cells[I,J]<min then min:=StringGrid1.Cells[I,J];
End;
// отбражаем полученные max и min
StringGrid1.Cells[1,1] :=min;
StringGrid1.Cells[1,2] :=max
end;
Ответ отправил: Kazakh (статус: 2-ой класс)
Отправлен: 23.01.2006, 13:54
Оценка за ответ: 4
Комментарий оценки:
Хорошо, а как в Stringgrid2.cells[i,j] вывести?

Отвечает: Schmak
Здравствуйте, Иванов Анатолий Петрович!
1)Если у Вас проблемы с массивами, то зачем Вы работаете с двухмерынми массивами, да ещё и массивами строк, а не чисел. Попрактикуйтесь сначала на обычных массивах, напрмер a:array [1..100] of integer. Если Вы научитесь работать с линейными массивами, то работа с многомерными массивами не вызовет затруднений, ну впрочем к делу. Работать со StringGridom ещё неудобно потому что приходится переводить числа в строку и обратно во время каждого сравнения.

2)В приложении привожу поиск для таблицы StringGrid (хотя, вновь повторюсь, лучше практиковаться на обычных массивах). Результат выводится в первые две ячейки 2-ого StringGrid

Приложение:

---------
Не всё то Windows, что висит!

Ответ отправил: Schmak (статус: Практикант)
Отправлен: 23.01.2006, 14:59

Отвечает: Ерёмин Андрей
Здравствуйте, Иванов Анатолий Петрович!
Смотрите пример в прикреплённом фaйле.

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Работа - не волк, а произведение силы на расстояние!

Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 23.01.2006, 15:01
Оценка за ответ: 5

Отвечает: Diman_A
Здравствуйте, Иванов Анатолий Петрович!
После заполнения StringGrid находим минимальный и максимальный элемент и выводим его на экран.
Процедура inttostr(chislo) - превращает число в строку (123 -> '123')
Процедура strtoint(stroka) - превращает строку в число ('123' -> 123)

Приложение:

Ответ отправил: Diman_A (статус: 4-ый класс)
Отправлен: 23.01.2006, 17:21

Отвечает: Меркулов Алексей
Здравствуйте, Иванов Анатолий Петрович!
вначале присваиваете max и min значения первого члена массива а дальше в цикле перебирайте значения, примерно так:
max:=StringGrid1.Cells[I,J];
For I:=0 To StringGrid1.ColCount-1 Do
For J:=0 To StringGrid1.RowCount-1 Do
begin
if StrToInt(StringGrid1.Cells[I,J]) >max then max:=StringGrid1.Cells[I,J];
end;
Удачи.
Ответ отправил: Меркулов Алексей (статус: 4-ый класс)
Отправлен: 23.01.2006, 22:16
Оценка за ответ: 5
Комментарий оценки:
Молодец!


Вопрос № 33.886
Здравствуйте, Программисты!

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

Суть вопроса:
Я хочу создать программу по Пневматике. Интерфейс программы заверен главным руководителем проекта. Кто играл в Incredible Machine (любую часть), тот меня поймёт быстро!
На форме есть 2 панели. Одна находиться слева (занимает большую часть формы, на неё будут наноситься элементы пневматики), а справой стороны 2 панелька в виде контейнера с элементами.
Далее. Нажимаем, например, на элемент Дроссельный сумматор. Этот элемент стационарно устанавливается в левой панели на определённое место, исчезая из правой панельки. После чего нажимаем на следующий элемент, называемый Повторитель-усилитель мощности. Он появляется на левой панельки, тоже стационарно.

Эту часть я проработал, всё работает хорошо, но хочу улучшить, то есть разбить как в игре Command & Conquer или в Dune 2 местность на квадратики и после того как нажать мышкой в конейнере на элемент, и начать передвигать мышкой на первой панельке, то определённые квадратики будут загораться другим цветом, например зелёным, что можно сюда поставить элемент.

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

Далее пользователь должен взять из контейнера соединяющий элемент, в виде постоянного дросселя (трубочка пластмассовая, в виде капельницы; а также есть разветвитель (тройник), к которому можно подключить до трёх трубочек) и соединить между выходами и входами повторителя-усилителя мощности и дроссельного сумматора. Если пользователь подключит всё правильно, то после запуска системы, появляется анимация воздуха в трубочке в виде движущейся змейки по центру постоянного дросселя.
Ну и конечно же это всё нужно поключить к манометрам и пусковому элементу, которые располагаются над панелью 1.

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

Чтобы реализовать соединение трубочки между двумя элементами (особенно когда их будет много этих трубочек и элементов). Я придумал подход, который заключается в использовании кубической матрицы, то есть для каждого пути постоянного дросселя отведена одна матрица (размер соответствует квадратикам на панели 1, и так по возрастающей мы строим оптимальные дорожки для каждой трубочки, и учитываем наименьшие пересечения.
Далее на панели 1, которая разделена на квадратики, мы создаём компоненты TImage в виде квадратиков, и считываем с матрицы начиная с нижнего уровня сразу же отрисовывая трубочки в этих квадратиках. Логическая часть поиска оптимального пути с меньшими пересечениями это написать можно. Но правильно ли я мыслю, в этом ли направлении, может есть какие-нибудь более лёгкие приёмы работы с графикой?
И быстр ли вообще будет такой вывод.

Огромное всем спасибо.

Мой e-mail: general4@online.ru
Отправлен: 23.01.2006, 14:40
Вопрос задал: Подболотов Иван Алексеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Меркулов Алексей
Здравствуйте, Подболотов Иван Алексеевич! Посылаю вам исходник интерфейса одной проги (расчет в другой системе). Может чем-нибудь поможет.
Ответ отправил: Меркулов Алексей (статус: 4-ый класс)
Отправлен: 23.01.2006, 22:27
Оценка за ответ: 5
Комментарий оценки:
Спасибо!


Вопрос № 33.908
Здравствуйте!
1. Каким образом вызывается диалоговое окно выбора ДИРЕКТОРИИ, не файла (что черезSaveDialog)?
2. При отрисовке в компонент Image появляется мерцание. Это можно устранить путём отрисовки в памяти (TBitmap.Create... ...Assign(битмап)). Как то же самое можно сделать с компонент Paint?
3. Хочу сделать что-то вроде WYSYVIG-редактора (или как это пишется). Буду использовать компонент RichEdit. Вопрос: каким образом при нажатии на како-то определённом тексте в нём вызывать какое-либо диалоговое окно? Примерно как ссылка, при нажатии на которую происходит переход, а мне нужно чтобы открывалось окно.
4. Раскрасил к примеру в RichEdit текст. Надо сохранить в HTML. Каким образом определить какая часть текста какого цвета?
Я так понимаю нужно разобрать RTF-код? Каким образом до него добраться?
Спасибо.
Отправлен: 23.01.2006, 18:30
Вопрос задал: 3BEPEK (статус: 3-ий класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Schmak
Здравствуйте, 3BEPEK!
1)Если я не ошибаюсь, то такой диалог не является стандартным, и поэтому его надо делать вручную. Есть два варианта.
1)Старый вид: на форму кидаете компоненты DirectoryListBox, DriveComboBox со вкладки Win 3.1 и прописываете в их свойствах друг друга. Выглядитнекрасиов, по-старому.
2)Новый вид: на форму кидаете компонент ShellTreeView со вкладки Samples. В свойстве Root указываете корневой каталог (по умолчанию Рабочий стол), в свойстве ObjectTypes указываете otHidden (если необходимо показывать скрытые папки). Выбранная папка хранится в свойстве Path
---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 24.01.2006, 06:25

Отвечает: D.M.
Здравствуйте, 3BEPEK!
1.
Есть 2 способа вывода дерева каталогов:
а) Можно использовать компонент Microsoft Shell Controls & Automation Type Library.
В меню Project..Import Type Library
Выберите Microsoft Shell Controls & Automation (version 1.0).
Нажмите Install...
На панели компонентов, в закладке ActiveX появится несколько компонентов. Перетащите на форму компонент TShell.
Использование:
Temp:=Shell1.BrowseForFolder(0,'Название диалога', 0, 'Путь с которого выводить дерево(можно оставить пустым)');

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

Приложение:

---------
Зёзики руллллят :)

Ответ отправил: D.M. (статус: 2-ой класс)
Отправлен: 24.01.2006, 07:58

Отвечает: Diman_A
Здравствуйте, 3BEPEK!
Диалог для выбора папки в приложении.
Требует подключения в uses модуля ShlObj.
Если пользователь выбрал не корневую папку, то к ее пути добавляется косая черта.

Приложение:

Ответ отправил: Diman_A (статус: 4-ый класс)
Отправлен: 24.01.2006, 11:09


Вопрос № 33.916
Здравствуйте Уважаемые Эксперты! Как можно в Delpni 8 создать компонент XPManifest, и как сделать, чтобы в Delphi 8 или 2005 компоненты NET брались не из пакета Net Framework 1.1, а из Framework 2.0. И еще как можно программно запустить приложение. Например в TextBox пишешь путь к файлу и запускаешь на выполнение.
Отправлен: 23.01.2006, 20:27
Вопрос задал: Шишкин М.А. (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Шишкин М.А.!
1) Просто подключите файл WindowsXP.res к программе: {$R WindowsXP.res} и приложение примет вид Windows XP.
3) WinExec(PChar(Edit1.Text),1);

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Работа - не волк, а произведение силы на расстояние!

Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 23.01.2006, 20:49

Отвечает: sir henry
Здравствуйте, Шишкин М.А.!
1. А Вы не пробовали стандартный компонент ХР на форму бросить? Или может быть я не понял Ваш вопрос?
2. Чтобы Делфи брал классы из FrameWork 2.0 необходимо обновить SDK FrameWork до 2.0. Скачивать с www.microsoft.com. Конкретной ссылки не знаю, попробуйте на этом сайте с помощью поиска поискать.
3. Хапустить любую программу можно так:
а) Присоеденить к Вашему модулю модулб ShellAPI$
б) Вызвать функцию ShellExecute(0, 'open', PChar(TextBox), NIL, NIL, SW_Show);
Ответ отправил: sir henry (статус: Академик)
Отправлен: 24.01.2006, 05:51

Отвечает: Schmak
Здравствуйте, Шишкин М.А.!
Запустить приложение можно так:
WinExec(Pchar(Edit1.text),sw_normal)
Или вот так (при этом надо прописать модуль ShellApi в uses):
ShellExecute(form1.Handle,'open',pchar(edit1.Text),nil,nil,sw_normal)
---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 24.01.2006, 06:07


Вопрос № 33.931
Добрый вечер.

Возникла проблема защиты информации скрываемой в Edit за звездочками с помощью PasswordChar. Как можно защититься от программ с помощью которых просмотривают эту информацию (Астерикс, Ariskkey, Pwdcrack). Я не смогла такое реализвать.

Если возможно, код пожалуйста или пример.

С Уважением, Анна

Отправлен: 24.01.2006, 00:26
Вопрос задала: Анна Николаевна (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сергей Т.
Здравствуйте, Анна Николаевна!
Самое простое, на мой взляд:
1 Ставите процедуру на изменение Edit'а.text
2 Считываете первый символ-заносите в переменную (например - string)
3 Пользователь нажал еще клавишу - добавляем ее в переменную
4 А в это время отображаем в Edit'е звездочки самостоятельно.
В принципе все.
Ответ отправил: Сергей Т. (статус: 2-ой класс)
Отправлен: 24.01.2006, 00:38
Оценка за ответ: 4

Отвечает: One
Здравствуйте, Анна Николаевна! Не пытайтесь защищаться от клавиатурных шпионов, это задача антивирусов. Иначе Ваша прога сама антивирусом станет :)

---------
Компьютер должен работать, а человек - DOOMать.
Ответ отправил: One (статус: 2-ой класс)
Отправлен: 24.01.2006, 19:44

Отвечает: Меркулов Алексей
Здравствуйте, Анна Николаевна! вообще-то никак, но попробуйте использовать шифрование типа:
создаете переменную S, и при нажатии Enter'а d Edit'е присваиваете s:=Edit.Text
а сам Edit.Text заполняете какой - либо фразой
Ответ отправил: Меркулов Алексей (статус: 4-ый класс)
Отправлен: 24.01.2006, 22:39

Отвечает: Лучников Юрий Владимирович
Здравствуйте, Анна Николаевна!
Для этого я вижу выход в написании собственной компоненты с такими возможностями.. Ибо все вышеперечисленные программы стандартный объект Windows CEdit.
Ответ отправил: Лучников Юрий Владимирович (статус: Студент)
Отправлен: 25.01.2006, 01:35


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100

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

В избранное