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

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


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


RusFAQ.ru: Программирование на C++ Builder / Delphi

Выпуск № 213
от 09.09.2003, 20:20

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 907
Отправлено ответов: 1668
Активность: 183.9 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Bob Johnson
Статус: Профессиональный
Общий рейтинг: 152.08
URL: Программирование
[Подробней >>]
Vdr
Статус: Опытный
Общий рейтинг: 110.31
[Подробней >>]
Marouder
Статус: Профессиональный
Общий рейтинг: 120.83
URL: Первый Хабаровский Форум
Телефон: (4212) 21-93-65
[Подробней >>]
 
Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 116.77
URL: Пристанище неодинокого программиста
[Подробней >>]
ART_43
Статус: Доверительный
Общий рейтинг: 120.6
[Подробней >>]
kvINT
Статус: Профессиональный
Общий рейтинг: 104.27
Телефон: (34316)2-31-45
[Подробней >>]
 
URiS
Статус: Профессиональный
Общий рейтинг: 129.67
URL: Бесплатный любительский софт, игры
[Подробней >>]
Cybernetic Creature
Статус: Опытный
Общий рейтинг: 121.19
Телефон: +99412386744
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 890. Приветствую вас, уважаемые эксперты. Не подскажите, сильно ли замедляется работа программы при испол... (ответов: 5)
Вопрос № 891. Всем привет! Подскажите пожалуйста можно ли в Delphi навигацию в форме от одного поля к другому(TEdi... (ответов: 4)
Вопрос № 892. Привет ЭкСпертам! У меня вот такакая ситуация случилась: Решил побаловаться с вордовскими документам... (ответов: 1)
Вопрос № 893. Всем привет! Подскажите пожалуйста можно ли в Delphi навигацию в форме от одного поля к другому(TEdi... (ответов: 5)
Вопрос № 894. Клавиша Shift. Есть ли у нее код, который можно присвоить переменной Key в обработчике события OnKey... (ответов: 2)

Вопросов: 5, ответов: 17


 Вопрос № 890

Приветствую вас, уважаемые эксперты.
Не подскажите, сильно ли замедляется работа программы при использовании
динамических массивов (если вообще замедляется). Например, если в
цикле, работающем с массивом, требуется многократно устанавливать
длину этого массива с помощью процедуры SetLength(ThisArray, N), то,
может быть, целесообразно использовать обычный массив размерности заведомо
большей, чем максимально возможное N, а количество реально
используемых ячеек хранить в отдельной переменной?
Заранее благодарю за море различных ответов.
Пуху пух, миру мир.
Алексей.



Вопрос отправлен: 04.09.2003, 20:57
Отправитель: Алексей (poohupooh@cityline.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Здравствуйте, Алексей!
> целесообразно использовать обычный массив размерности заведомо большей, чем максимально возможное N
Да, это точно быстрее. Скорость динамических массивов сильно зависит от реализации, а также от фрагментации памяти (которая в свою очередь зависит от частоты использования динамических массивов :).
Лучший вариант - это использовать динамический массив, но расширяемый, т.е. у тебя есть нижняя граница - это количество элементов, которые ты изначально выделяешь. Когда требуемое количество элементов в него укладывается, ты используешь его. Когда же оно превышает это значение, то увеличиваешь массив, но не уменьшаешь его впоследствии. Также, можно к этому добавить верхнюю границу, если максимальный объем массива может стать сравнимым с размером ОП (тогда возникнет своппинг, что уж точно не быстро).

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 04.09.2003, 23:19
Отправитель: Bob Johnson


Отвечает Vdr

Доброе время суток, Алексей!
А что мешает тебе хранить длинну динамического массива в отдельной переменной?
Лично я придерживаюсь того мнения, что когда размерность массива заранее неизвестна лучше использовать динамические массивы, хотя они и жрут больше памяти, но если правильно разработать алгоритмы, то медленнее работать не будут.
Удачи!

Ответ отправлен: 05.09.2003, 10:31
Отправитель: Vdr


Отвечает Marouder

Приветствую Вас, Алексей!
Ну, SetLength, конечно, замедляет работу, как и другие функции. Если замедление слишком уж заметно, используй обычный.

Ответ отправлен: 05.09.2003, 12:38
Отправитель: Marouder


Отвечает Артём Шегеда

Добрый день, Алексей!

А ты никогда не пробовал посмотреть код, генерируемый компилятором?
Я посмотрел и остался доволен - практически ничего лишнего: указатель на базу хранится в регистре, элемент массива берётся по адресу [(индекс элемента)*(размер элемента)+база]. Всё достаточно быстро. Длина массива - это двойное слово по адресу [база-4] (значит вычисление размера массива очень быстрое). Никакой дополнительной проверки индексов (за исключением той, что выставляешь в опциях проекта).
Вывод: Сама по себе работа с динамическим массивом медленной быть не может. Медленным может быть только изменение размера массива - и решение этой проблемы Bob Johnson пердложил правильное и достаточно простое: перед изменением размера проверь - а нужно ли его менять.

Ответ отправлен: 05.09.2003, 13:57
Отправитель: Артём Шегеда


Отвечает --- Нет данных ---

Приветствую Вас, Алексей!
в зависимости от конкретного случая... производительность может падать в несколько раз, но в обычных программах это обычно незаметно.
Второй вариант лучше.
Как промежуточный вариант можно и в динамическом масиве длину выделять по максимуму, или например изменять только при необходимости увеличения массива.

Ответ отправлен: 05.09.2003, 16:58
Отправитель: --- Нет данных ---


 Вопрос № 891

Всем привет!
Подскажите пожалуйста можно ли в Delphi навигацию в форме от одного поля к другому(TEdit) осуществлять не только по клавише и мышкой, но и по ? Или хотя бы только по . Может у TEdit или TForm есть какое-то свойство, отвечающее за это?



Вопрос отправлен: 05.09.2003, 11:32
Отправитель: Владимир

[Следующий вопрос >>] [Список вопросов]

Отвечает Marouder

Добрый день, Владимир!
Не понял. Что "по"?

Ответ отправлен: 05.09.2003, 12:39
Отправитель: Marouder


Отвечает Артём Шегеда

Приветствую Вас, Владимир!

Вся беда в том, что переход между контролами на форме осуществляется не средствами DelphiVCL, а самой Windows. Посему приходится изголяться - писать обработчик. В свойствах формы поставь KeyPreview := true и создай обработчик OnKeyDown
По нажатию Del или '.' будет осуществляться переход между элементами управления.

Приложение:

Ответ отправлен: 05.09.2003, 13:43
Отправитель: Артём Шегеда


Отвечает Bob Johnson

Приветствую Вас, Владимир!
Непонятно, что значит осуществлять навигацию по "?"... Если нужно просто осуществлять навигацию по какой-либо дополнительно клавише, то тогда поставь у этой формы свойство KeyPreview в true и в обработчике OnKeyPress при нажатии нужной тебе клавиши сам передавай фокус ввода (что-то.SetFocus). Список дочерних контролов можешь составить сам (только из тех, что нужны) или получить у формы.

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 05.09.2003, 14:47
Отправитель: Bob Johnson


Отвечает ART_43

Здравствуйте, Владимир!
у формы KeyPreview=true
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((Key=vk_tab) or (Key=vk_return)) and (Shift=[]) then
FindNextControl(ActiveControl, true, true, true).SetFocus;
end;
и не пиши в сообщениях знаки больше и меньше (угловатые скобки)


Ответ отправлен: 05.09.2003, 18:02
Отправитель: ART_43


 Вопрос № 892

Привет ЭкСпертам!
У меня вот такакая ситуация случилась:
Решил побаловаться с вордовскими документами. Думал что все будет как в VBA: открыл файл, записали сделал все что хотел, а затем зыкрыл его.
Но вот в Дельфях как оказалось все не так: нашел какую-то вкдадку Servers, поставил на форму компонент TWordDocument а дальше ничего не пойму. Вроде как там надо сначало приконнектиться, что-то сделать и отконнектиться.
Объясните пожалуйста как там что делать.....



Вопрос отправлен: 05.09.2003, 12:29
Отправитель: D.M.

[Следующий вопрос >>] [Список вопросов]

Отвечает kvINT

Добрый день, D.M.!
Посмотри в приложении текст двух моих процедур. Они для Excel, но у тебя будет, наверно, аналогично.
Ex - переменная типа TExelApplication,
ExC - TExelChart (здесь не используется, но процедуру дисконнекта я сделал для всех процедур, соединяющихся с Excel)
ExB - TExcelWorkbook,
ExS - TExcelWorksheet.
Ну и начинка тебе не нужна, видимо, если ты просто хочешь вызвать, здесь заполняется из IBQuery.

Приложение:

Ответ отправлен: 05.09.2003, 16:50
Отправитель: kvINT


 Вопрос № 893

Всем привет!
Подскажите пожалуйста можно ли в Delphi навигацию в форме от одного поля к другому(TEdit) осуществлять не только по клавише Tab и мышкой, но и по Enter? Или хотя бы только по Enter. Может у TEdit или TForm есть какое-то свойство, отвечающее за это?



Вопрос отправлен: 05.09.2003, 12:48
Отправитель: Владимир

[Следующий вопрос >>] [Список вопросов]

Отвечает URiS

Здравствуйте, Владимир!
Конкретно такого события нет, но есть событие формы - OnKeyDown, там можно при нажатии клавиши Enter (key=13) эмулировать нажатие Tab (9).

Oxota 2 (Скачать! 803Кб)


Ответ отправлен: 06.09.2003, 13:03
Отправитель: URiS


Отвечает Cybernetic Creature

Приветствую Вас, Владимир!
pishite v OnKeyPress ili OnKeyDown ili OnKeyUp
procedure TForm1.Edit1KeyPress(Sender: TObject;Key: Char);
begin
if Key=#13 then Edit2.SetFocus
end;

Ответ отправлен: 06.09.2003, 10:03
Отправитель: Cybernetic Creature


Отвечает Vdr

Добрый день, Владимир!
Можешь обробатывать сообщение OnKeyDown. И проверять - если нажат Enter то меняешь ActiveControl формы.
Удачи!

Ответ отправлен: 05.09.2003, 15:19
Отправитель: Vdr


Отвечает --- Нет данных ---

Доброе время суток, Владимир!
Своства нету такого.
Надо обрабатывать событие при нажатии клавиши и по "Энтэру" менять фокус ввода.

Ответ отправлен: 05.09.2003, 16:45
Отправитель: --- Нет данных ---


Отвечает kvINT

Здравствуйте, Владимир!
По вопросу 891 - наверно, можно как-нибудь телепатически.
По этому вопросу - попробуй использовать событие OnKeyPress и если Enter нажат передавать фокус (не проверял, но ничего больше в голову не пришло).

Ответ отправлен: 05.09.2003, 16:50
Отправитель: kvINT


 Вопрос № 894

Клавиша Shift. Есть ли у нее код, который можно присвоить переменной Key в обработчике события OnKeyPress?
Теперь здравствуйте, ув. эксперты.
Пожелание администраторам - чтобы в кратком перечне вопросов пропускалась 1-я строка, если она содержит слова типа "Здравствуйте", думаю, это несложно будет сделать.
К вопросу. Для чего нужно - DBGrid заполняется значениями из IBQuery. Требуется нек-рым строкам сделать update (флаг поменять), чтобы только эти строки были видны в другом гриде. Не проблема, если делать по одной строке. Хочу же, чтобы можно было выделить диапазон строк - допустим, нажата клавиша Shift - выделяется первая строка, затем нажатие на Shift на другой строке - выделяется все, что между ними. Короче, как в экселе и др. программах.
Если это можно сделать каким-то другим способом, а не в OnKeyPress - плиз, поделитесь.



Вопрос отправлен: 05.09.2003, 19:54
Отправитель: Loko

[Следующий вопрос >>] [Список вопросов]

Отвечает Cybernetic Creature

Здравствуйте, Loko!
pishite v OnKeyDown ili OnKeyUp
if (ssCtrl in Shift)and (Key='D') then ShowMessage('You press "Ctrl+D"')
ssShift - Shift
ssCtrl - Ctrl
ssAlt - Alt

Ответ отправлен: 06.09.2003, 10:03
Отправитель: Cybernetic Creature


Отвечает --- Нет данных ---

Добрый день, Loko!
Хм... ну там одном из обработчиков событий есть специальный параметр в который передается состояние функциональных клавиш, в том числе и шифта. поищи хорошенько (сорри, под рукой делфи просто нету)


Ответ отправлен: 09.09.2003, 17:30
Отправитель: --- Нет данных ---



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (35)
C / C++ (29)
Perl (6)
Builder / Delphi (17)
Pascal (20)
Basic / VBA (8)
Java / JavaScript (12)
PHP (11)
Криптография (9)
WinAPI (16)
Пользователю
Windows 95/98/Me (48)
Windows NT/2000/XP (64)
"Железо" (41)
Поиск информации (24)
Администратору
Windows NT/2000/XP (29)
Linux / Unix (11)
Юристу
Гражданское право (9)
Семейное право (6)
Трудовое право (7)
КоАП (6)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное