Вопрос № 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]? Подскажите как это сделать?
Отвечает: 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 в виде квадратиков, и считываем с матрицы начиная с нижнего уровня сразу же отрисовывая трубочки в этих квадратиках. Логическая часть поиска оптимального пути с меньшими пересечениями это написать можно. Но правильно ли я мыслю, в этом ли направлении, может есть какие-нибудь более лёгкие приёмы работы с графикой?
И быстр ли вообще будет такой вывод.
Отвечает: Меркулов Алексей
Здравствуйте, Подболотов Иван Алексеевич! Посылаю вам исходник интерфейса одной проги (расчет в другой системе). Может чем-нибудь поможет.
Ответ отправил: Меркулов Алексей (статус: 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 пишешь путь к файлу и запускаешь на выполнение.
Отвечает: Ерёмин Андрей
Здравствуйте, Шишкин М.А.!
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). Я не смогла такое реализвать.
Отвечает: Сергей Т.
Здравствуйте, Анна Николаевна!
Самое простое, на мой взляд:
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.