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

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


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

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

Выпуск № 453
от 24.04.2006, 16:05

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


Вопрос № 40670: Как програмно создать/удалить Partition и как отформатировать логический диск....
Вопрос № 40681: Здравия Желаю, Товарищи Эксперты (сегодня год как дембельнулся)! Вопросы по клавиятуре: 1. Как избежать повторного выполнения события FormKeyPress при длительном удержании клавиши? 2. if (key='q')or(key= 'Q')or(key='й')or(key= 'Й') then n...
Вопрос № 40684: Добрый вечер. я хотел бы сослаться на вопрос № 40323 и спросить: Поиск в memo осуществляется: Var n: integer; begin for n:=1 to memo1.Lines.Count do if Pos(edit1.Text, memo1.Lines[n-1])>0 then application....
Вопрос № 40731: Как я могу изменить шрифт MainMenu....

Вопрос № 40.670
Как програмно создать/удалить Partition и как отформатировать логический диск.
Отправлен: 18.04.2006, 21:14
Вопрос задал: George soselia (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mo-skin
Здравствуйте, George soselia!
Форматировать диск
Winexec('cmd /c format c:',SW_HIDE);
Сам не пропробовал (жалко че-то диск свой форматировать ;)) ),но должно работать (с другими ДОС-командами все ОК было).
Если надо сам допиши параметры после format c: (как в командной строке).

---------
Чем больше женщину мы меньше,- тем меньше больше мы ее!
Ответ отправил: Mo-skin (статус: 1-ый класс)
Ответ отправлен: 18.04.2006, 22:49


Вопрос № 40.681
Здравия Желаю, Товарищи Эксперты (сегодня год как дембельнулся)!
Вопросы по клавиятуре:
1. Как избежать повторного выполнения события FormKeyPress при длительном удержании клавиши?
2. if (key='q')or(key= 'Q')or(key='й')or(key= 'Й') then no:=61
Есть ли что-нибудь попроще? Обрабатывать четыре символа тяжко... (собираюсь использовать почти всю клаву), и вьетнамские пользователи вдяд-ли меня поймут (у них буквы Й нетути)!
Отправлен: 18.04.2006, 23:09
Вопрос задал: Mo-skin (статус: 1-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгения
Здравствуйте, Mo-skin!
2. Виртуальные коды клавиш: http://program.rin.ru/razdel/html/1016.html
---------
Я не волшебник, я только учусь... А разве кто-то обещал, что будет легко?
Ответ отправила: Евгения (статус: 4-ый класс)
Ответ отправлен: 18.04.2006, 23:28
Оценка за ответ: 5
Комментарий оценки:
Все понял GOOD!

Отвечает: Злоумышленник
Вольно, товарищ солдат.
1. Заведи глобальную переменную типа TDateTime которую вычисляй в своём событии FormKeyPress и сравнивай с некоторой величиной задержки, которую определишь по своему вкусу. Если меньше, то Exit.
Ответ отправил: Злоумышленник (статус: 6-ой класс)
Ответ отправлен: 18.04.2006, 23:44

Отвечает: Denisss

Здравствуйте, Mo-skin!

Предлагаю воспользоваться вместо события Form.OnKeyPress событием Form.OnKeyUp. Это решит сразу две Ваши проблемы:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if
(Key = ord('Q')) then
  no:= 61;
end;

Примечания:
- Событие OnKeyUp происходит только один раз - при отпускании клавиши
- ord(Char); - Char в ВЕРХНЕМ регистре, латинскими буквами возвращает код клавиши. В Вашем случае, это 'Q'.
- В отличие от OnKeyPress, в OnKeyUp, вместо символа выдается код клавиши (Key), который одинаков как для 'Q' и 'q', так и для 'Й' с 'й'.

Удачи!
Ответ отправил: Denisss (статус: Специалист)
Ответ отправлен: 18.04.2006, 23:59
Оценка за ответ: 3
Комментарий оценки:
Спасибо, конечно, но мне надо обрабатывать именн НАЖАТИЕ клавиши, а не отпускание(хотя и его я таже буду обрабатывать) .

Отвечает: Ерёмин Андрей
Здравствуйте, Mo-skin!
1) Используйте связку OnKeyDown() + OnKeyUp().
2) А вы по коду проверяйте клавиши, а не по буквам. Для начала вычислите ord('й') например и далее if key = ord('й') then - тогда проблем не будет (естественно, подставить следует не эту конструкцию, а прямо реальный код - 60 например). Коды везде одинаковые, хотя буквы разные.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 19.04.2006, 07:16
Оценка за ответ: 5
Комментарий оценки:
не совсем то, но наталкнуло меня на определенные мысли.


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

я хотел бы сослаться на вопрос № 40323 и спросить:

Поиск в memo осуществляется:
Var
n: integer;
begin
for n:=1 to memo1.Lines.Count do
if Pos(edit1.Text, memo1.Lines[n-1])>0
then application.messageBox('"'+edit1.Text+'" найдено в memo1'), 'Ура !');
end;

Так вот, при таком поиске ищется только точное название. А мне нужно чтобы не было разницы в каких регистрах написан текст. В memo написано Andrey, а я в поиске пишу ANDREY или AndReY или andreY и чтобы всеравно находило.

Вот такая вот проблема.

С Уважением, Максим
Отправлен: 18.04.2006, 23:42
Вопрос задал: Maximus (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгения
Здравствуйте, Maximus!
UpCase Возвращает переданный символ в верхнем регистре.

UpperCase Конвертирует все 7-ми битные ASCII символы строки, лежащие в диапазоне от 'a' до 'z', в прописные (верхний регистр).

Pos(UpperCase(edit1.Text),UpperCase(memo1.Lines[n-1]))>0

---------
Я не волшебник, я только учусь... А разве кто-то обещал, что будет легко?
Ответ отправила: Евгения (статус: 4-ый класс)
Ответ отправлен: 19.04.2006, 00:10

Отвечает: Denisss
Здравствуйте, Maximus!
А если так:

var
  n: integer;
  strFind: String;
begin
  strFind:= AnsiUpperCase(Edit1.Text);
  for n:= 0 to pred(Memo1.Lines.Count) do
    if (Pos(strFind, AnsiUpperCase(Memo1.Lines[n])) > 0) then
    begin

      Application.messageBox('"' + Edit1.Text + '" найдено в Memo1'), 'Ура, Товарищи!');
      Exit; // Или Break - чтобы закончить поиск
    end;
end;


AnsiUpperCase возвращает строку в верхнем регистре. UpperCase переводит в верхний регистр только латинские буквы.

Удачи!
Ответ отправил: Denisss (статус: Специалист)
Ответ отправлен: 19.04.2006, 10:43
Оценка за ответ: 5
Комментарий оценки:
то что нужно

Отвечает: Дмитриев Алексей Иванович
Здравствуйте, Maximus!
Чтобы найти слово в строке(или в Мемо) не зависимо от регистра достаточно преобразовать и слово и строку в верхний (UpperCase) либо нижний (LowerCase) регистр.
А для поддерки великого и могучего русского языка нужно использовать AnsiUpperCase или AnsiLowerCase соответственно.

В общем так:

Var
n: integer;
begin
for n:=1 to memo1.Lines.Count do
if Pos(AnsiUpperCase(edit1.Text), AnsiUpperCase(memo1.Lines[n-1]))>0
then application.messageBox('"'+edit1.Text+'" найдено в memo1'), 'Ура !');
end;
Ответ отправил: Дмитриев Алексей Иванович (статус: 1-ый класс)
Ответ отправлен: 19.04.2006, 23:55
Оценка за ответ: 5
Комментарий оценки:
Отлично, то что мне нужно. Спасибо


Вопрос № 40.731
Как я могу изменить шрифт MainMenu.
Отправлен: 19.04.2006, 11:53
Вопрос задал: Aslanov Ceyhun Yusif (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Рубан Николай Николаевич
Здравствуйте, Aslanov Ceyhun Yusif!

Шрифт Меню изменяет глобально для все ОС
Панель управления ->Экран->Оформление -> Дополнительно -> Строка меню
---------
Мыслю - значит существую (Декарт)
Ответ отправил: Рубан Николай Николаевич (статус: 3-ий класс)
Ответ отправлен: 19.04.2006, 12:11
Оценка за ответ: 2

Отвечает: nimoid
Здравствуйте, Aslanov Ceyhun Yusif!
Посмотри вот тут - http://www.delphikingdom.com/asp/viewitem.asp?catalogid=511
Надеюсь, разберешся в коде компонента, там не сложно.
---------
Пишем баги на любые патчи :-]
Ответ отправил: nimoid (статус: 7-ой класс)
Ответ отправлен: 19.04.2006, 13:13


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

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

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

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

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


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


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

В избранное