Главная Главная страница форума Регистрация Вход
Новые сообщения Участники форума Правила форума Поиск
Страница 2 из 3«123»
Модератор форума: stalker, Ekz 
Форум » Все о Delphi » Начинающим » Подмена символов
Подмена символов
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". если все удалить после
Code
   'щ': s[i]:='о';

компилируется нормально. в чем проблема?
 
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)?
И еще одно: как сделать
Code
   'М': s[i]:='Н ';

М заменить на Н с пробелом (или на два или три символа)?


Сообщение отредактировал 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);

Подробнее некуда объяснил. smile
А вообще попробуй почитай учебник для начинающих. Может разберешься с основами. Хотя писался учебник с учетом того что читающий дожен знать хотябы основы 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;
что-то в этом духе. За тебя делать все даже нехочу (толку будет мало - лучше когда ты сам дойдеш). smile Дерзай!


Не оказываю помощь через личные сообщения и 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
 
Форум » Все о Delphi » Начинающим » Подмена символов
Страница 2 из 3«123»
Поиск:

Copyright DelphiDevelop.ru © 2008-2018
Хостинг от uCoz