Подмена символов |
Admin | Дата: Вторник, 03.02.2009, 21:30 | Сообщение # 16 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Незашто
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
Liade | Дата: Вторник, 03.02.2009, 23:06 | Сообщение # 17 |
Ранг 1
Группа: Проверенные
Сообщений: 16
Награды: 0
Репутация: 0
Статус: Offline
| при попытке скомпиллировать Code begin s:=memo1.Text; //записываем содержимое Edit'а в переменную For i:=1 to length(memo1.text) do //цикл от 1 до длины Edit'а begin case s[i] of //В завасимости от того, какая буква будет в i'йном элементе строки s делаем 'й': s[i]:='ъ'; 'ц': s[i]:='л'; 'г': s[i]:='в'; 'ш': s[i]:='ш'; 'щ': s[i]:='о'; 'з': s[i]:='г'; 'г': s[i]:='з'; 'ш': s[i]:='ш'; 'щ': s[i]:='Э'; 'з': s[i]:='м'; 'х': s[i]:='Ш'; 'в': s[i]:='а'; 'л': s[i]:='е'; 'ж': s[i]:='д'; 'м': s[i]:='з'; 'т': s[i]:='и'; 'ь': s[i]:='п'; 'б': s[i]:='б'; 'Й': s[i]:='Ц'; 'Ц': s[i]:='Я'; 'У': s[i]:='К'; 'Д': s[i]:='З'; 'г': s[i]:='з'; 'Ж': s[i]:='ц'; 'Я': s[i]:='ь'; end; end; memo2.Text:=s; // Полученную строку записываем в Edit2 end; в логе выводит ошибку "Dublicate case label". если все удалить после компилируется нормально. в чем проблема?
|
|
| |
|
Ekz | Дата: Вторник, 03.02.2009, 23:15 | Сообщение # 18 |
Ранг 10
Группа: Пользователи
Сообщений: 164
Награды: 2
Репутация: 1
Статус: Offline
| 'й': s[i]:='ъ'; 'ц': s[i]:='л'; 'г': s[i]:='в'; 'ш': s[i]:='ш'; 'щ': s[i]:='о'; 'з': s[i]:='г'; 'г': s[i]:='з'; ты вариант с буквой "г" два раза написал, первый раз заменяешь на "в", второй на "з", убери один вариант
|
|
| |
|
Liade | Дата: Среда, 04.02.2009, 18:32 | Сообщение # 19 |
Ранг 1
Группа: Проверенные
Сообщений: 16
Награды: 0
Репутация: 0
Статус: Offline
| как можно осуществить импользование этого Button'a по нажатию комбинации клавиш (например Ctrl+Enter)? И еще одно: как сделать М заменить на Н с пробелом (или на два или три символа)?
Сообщение отредактировал Liade - Среда, 04.02.2009, 18:48 |
|
| |
|
Admin | Дата: Среда, 04.02.2009, 18:54 | Сообщение # 20 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Можно. Самый простой способ это использование события onKeyDown. Это событие есть практически у каждого визуального компонента (кнопки, memo, Edit...) и формы. Как раз форма нам и нужна. Во вкладке events при фокусе на форме ищем это событие. Кликаем по пустому полю два раза, переходим в редактор кода, с уже готовой процедурой, которая будет выполняться когда происходит нажатие на кнопку клавиатуры, если фокус на форме. Там пишем: Code procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Shift = [ssCtrl]) and (key = VK_RETURN) then Button1.Click; end; ssCtrl - зажат Ctrl VK_RETURN - нажат Enter Если это все нажато враз то выполняется Button1.Click. При этом нажмется кнопка Button1. Если же фокус на Button1 или другом компоненте, то процедура не выполнится. В этом случае можно назначить эту процедуру другим компонентам, либо делать по другому, но там посложнее (функция GetAsyncKeyState). Code 'М': Begin s[i]:='Н'; s[i+1]:=' '; end; может так. Но не совсем понятно пробел должен добавиться или замениться следующий символ?
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
Liade | Дата: Среда, 04.02.2009, 19:04 | Сообщение # 21 |
Ранг 1
Группа: Проверенные
Сообщений: 16
Награды: 0
Репутация: 0
Статус: Offline
| должен добавиться
|
|
| |
|
Admin | Дата: Среда, 04.02.2009, 19:34 | Сообщение # 22 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Тогда нужно использовать процедуру insert. Вот какие параметры: insert('что вставить - строка', куда - переменная строкового типа, в какую позицию - целочисленная переменная); Пример: Code var s:string; ... s:='123'; insert('007', s, 1); showmessage(s); Подробнее некуда объяснил. А вообще попробуй почитай учебник для начинающих. Может разберешься с основами. Хотя писался учебник с учетом того что читающий дожен знать хотябы основы Pascal.
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
Liade | Дата: Среда, 04.02.2009, 23:08 | Сообщение # 23 |
Ранг 1
Группа: Проверенные
Сообщений: 16
Награды: 0
Репутация: 0
Статус: Offline
| вроде понял... но не компилится(((( не мог бы ты добавить в код его? Code unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus, XPMan;
type TForm1 = class(TForm) Button1: TButton; Memo2: TMemo; Memo1: TMemo; Label1: TLabel; Label2: TLabel; Label3: TLabel; XPManifest1: TXPManifest; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var i:integer; s:string; begin s:=memo1.Text; For i:=1 to length(memo1.text) do begin case s[i] of 'А': s[i]:='А'; 'Б': s[i]:='Б'; 'В': s[i]:='B'; 'Г': s[i]:='Г'; 'Д': s[i]:='Т'; 'Е': s[i]:='E'; 'Ж': s[i]:='Ж'; 'З': s[i]:='3'; 'И': s[i]:='И'; 'К': s[i]:='К'; 'Л': s[i]:='Л';
end; end; memo2.Text:=s; end;
end. и про ctrl+enter, что-то не действует, при нажатии на ctrl+enter переходит на следущую строчку Code procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Shift = [ssCtrl]) and (key = VK_RETURN) then Button1.Click; end;
end.
|
|
| |
|
Admin | Дата: Четверг, 05.02.2009, 09:29 | Сообщение # 24 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Quote (Liade) и про ctrl+enter, что-то не действует, при нажатии на ctrl+enter переходит на следущую строчку я же говорю должна быть в фокусе форма, а не memo. Добавь такое же на memo и должно заработать. например: 'А': begin s[i]:='А'; insert(' ',s,i+1); end; что-то в этом духе. За тебя делать все даже нехочу (толку будет мало - лучше когда ты сам дойдеш). Дерзай!
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
Liade | Дата: Среда, 20.05.2009, 17:59 | Сообщение # 25 |
Ранг 1
Группа: Проверенные
Сообщений: 16
Награды: 0
Репутация: 0
Статус: Offline
| Благодарствую! у меня все получилось! спасибо огромное! Добавлено (20.05.2009, 17:59) --------------------------------------------- Снова здравствуйте. Проблема вот в чем: нужно, чтобы при нажатии на кнопку запускалась программа (путь к этой программе хранится в реестре). К примеру: "HKEY_LOCAL_MACHINE\SOFTWARE\Prog" в нем хранится параметр "Install Path" со значением "C:\Program Files\Prog". Нужно, чтобы при нажатии на кнопку открывался екзешник проги (путь считывался через реестр). спасибо.
|
|
| |
|
Admin | Дата: Среда, 20.05.2009, 18:08 | Сообщение # 26 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Впредь создавайте отдельную тему. Один вопрос - одна тема. Другим будет легче найти помощь. А запуск программы и копания в реестре уже не относится к подмене символов. Теперь к вопросу. Не можете считать из реестра или запустить программу? Насчет первого можно разобраться из вот этой статьи. Насчет запуска программы читаем тут
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
LeBlank | Дата: Понедельник, 25.05.2009, 18:53 | Сообщение # 27 |
Ранг 1
Группа: Пользователи
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Offline
| Нужно чтобы еще несколько комбинаций клавиш нажимали на кнопки.
|
|
| |
|
Admin | Дата: Вторник, 26.05.2009, 12:49 | Сообщение # 28 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Всмысле на разные кнопки или на одну??? Ну на разные то легко, длетать точно также как в 23 посте, только для другой кнопки. Если для одной и той же то Code if ((Shift = [ssCtrl]) and (key = VK_RETURN))or((Shift = [ssCtrl]) and (key = нужная клавиша)) then Button1.Click;
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
LeBlank | Дата: Вторник, 26.05.2009, 13:22 | Сообщение # 29 |
Ранг 1
Группа: Пользователи
Сообщений: 4
Награды: 0
Репутация: 0
Статус: Offline
| На memo я комбинацию поставил, а на форме уже стоит от предыдущей комбинация. ничего не действует.
|
|
| |
|
Admin | Дата: Вторник, 26.05.2009, 16:05 | Сообщение # 30 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Я ничего не понимаю, можно толково подробно и внятно объяснить что требуется, и что не получается, и что делаете вы
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|