Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проблема с апострофом


Автор: leha2007 9.8.2006, 21:14
В Word'е для наборки апострофа в украинской(русской) раскладке нужно нажать Ctrl+Ё+Ё. Как 

можно сделать подобную комбинацию(можно другую) в Edit, RichEdit? На вариант - 

переключайтесь на англ. раскладку и набирайте там - пользователи категорически не согласны.

Автор: Palladin 9.8.2006, 21:59
Хм, я как всегда с велосипедом smile 

Вообщем сделай так, сделай пустую невидимую кнопку в компоненте MainMenu, там поставь на неё быстрый вызов, и в обработчики нажатия этой нопки пропиши добавление в твой едит или ричедит(в зависимости от того где курсор) использую аски-код "апострофа"

P.S. Думаю можно сделать более практично, но на крайний случай сойдёт smile 

Автор: Alexeis 9.8.2006, 22:16
да зачем так сложно Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); - стандартный обработчик нажатий кловиш, в нем проверить вызвана ли комбинация, если да, то вставить нужный символ в текст.

Автор: Palladin 9.8.2006, 22:18
Во, я ж говорил что можно проще smile 

P.S. Сорри за флуд smile 

Автор: leha2007 10.8.2006, 22:17
Пишу:

procedure TForm1.cxTextEdit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if ((Key = $C0) and (ssCtrl in Shift)) then cxTextEdit1.Text:=cxTextEdit1.Text+''';
end;

Есть 2 проблемы:
1) Ругается на ''' - как это записать правильно?
2) Курсор в cxTextEdit1 оказывается в начале строки, а не в конце...

Автор: Palladin 10.8.2006, 22:25
Я ж говорил аски код юзай!

Попробуй так:


Код

procedure TForm1.cxTextEdit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if ((Key = $C0) and (ssCtrl in Shift)) then 
  begin
    p:=cxtextedit1.text;
    cxTextEdit1.Text:=p+#27;
  end;
end;

Автор: Alexeis 11.8.2006, 00:39
Ковычку нужно просто дублировать.
Код

procedure TForm1.cxTextEdit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if ((Key = $C0) and (ssCtrl in Shift)) then cxTextEdit1.Text:=cxTextEdit1.Text+'''';
end;

Для получения координаты курсора можно воспользоватся GetCursorPos
А затем после вставки символа вернуть позицию курсора при помощи SetCursorPos.
---------------------------------------------------------------------------------------
Решение ошибочное, т.к. функция  GetCursorPos дает положение курсора на экране, а не номер позиции текущего символа

Автор: leha2007 13.8.2006, 15:41
Пишу:
Код

     GetCursorPos(lpPoint);
if ((Key = $C0) and (ssCtrl in Shift)) then cxTextEdit1.Text:=cxTextEdit1.Text+'''';
    SetCursorPos(lpPoint.X,lpPoint.Y);

Вставляет апостроф, но только в конец строки, т.е. если я хочу где в средине текста вставить апостороф, то ничего не выйдет...  И курсор все-равно вначале строки.. 

Автор: Alexeis 13.8.2006, 17:14
Код

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  X : Integer;

begin
  if ((Key = $C0) and (ssCtrl in Shift))
  then
    begin
      x := Edit1.SelStart;
      Edit1.Text := Copy(Edit1.Text, 1, X) + ''''
                  + Copy(Edit1.Text, X + 1, Length(Edit1.Text) - X);
      Edit1.SelStart := x + 1;
    end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)