Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2010, 01:57   #1
Yagamy Liet
Пользователь
 
Регистрация: 15.08.2010
Сообщений: 16
По умолчанию Кусок кода не хочет работать.

Это часть блокнота, в котором можно будет писать русские буквы - у меня на
XP Pro x64 не работает русская кодировка и все сообщения приходиться писaть на
Гугл клавиатуре
Код:
 if Ord(Edit1.Text[1]) = 91 then Memo1.Text := Memo1.Text + 'x';
Если код буквы в Edit1 равен 91 тогда в Memo1 дописываем х.
Вроде все идеально, да вот только стоит нажать любую кравишу, как программа вылетает.

Последний раз редактировалось artemavd; 16.08.2010 в 04:28.
Yagamy Liet вне форума Ответить с цитированием
Старый 16.08.2010, 02:14   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Ошибка в 13-й строке.

P.S. Даже ник не смог правильно написать, что уж говорить про программу.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.08.2010, 02:41   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

короче, весь код выкладывайте, а то хз когда у вас код выполняется, вообще есть событие OnKeyPress и в нем параметр Key это символ нажатый.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2010, 03:59   #4
Yagamy Liet
Пользователь
 
Регистрация: 15.08.2010
Сообщений: 16
По умолчанию

To GunSmoker
Ха-ха, надо же, даже не знал что про него в Wiki статья есть. Имя писал - как на слух оно звучит в английских
буквах. Жалко только имя профиля исправить нельзя. Пасибо. :-)

Собственно программа:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    procedure FormActivate(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R  .dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
Memo1.Text := '';//Сбоку на Object Inspector нет значения, что бы очистить поле Memo1.Text от его имени. Я уже понял, что попытки
//отыскать эту, в общем-то мелочь опять приведут к многочасовой, бесполезной трате времени и поступил проще.
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If Edit1.Text = 'q' then Memo1.Text := Memo1.Text + 'й';
//...//Здесь у меня, в общем повторяется один и тот же код 20 с лишним раз для разных букв
If Edit1.Text = 'm' then Memo1.Text := Memo1.Text + 'ь';
if Ord(Edit1.Text[1]) = 91 then Memo1.Text := Memo1.Text + 'x';//здесь уже посложнее: поскольку в кавычки поставить,
//к примеру ']' нельзя - приходится изощрятся.
Edit1.Text := '';//Очищает поле Edit1.Text. Конечно же лучше сделать прогу с одним только Memo1.Text - я и сделаю, но 
// пока я ее пишу - мне так проще.
end;
end.
Вообще изначально я планировал вместо тупого повторения одного-и-того же оператора сделать подбор букв через два массива,
но после долгого и безполезного поиска: как же пишется забытая мной команда 'lenght(Edit2.Text);' (конечно после того,
как все было сделано, я как видите чисто случайно нашел его) я сделал по другому - как есть.

Последний раз редактировалось artemavd; 16.08.2010 в 04:31.
Yagamy Liet вне форума Ответить с цитированием
Старый 16.08.2010, 04:16   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

"Вылетает" - это что конкретно значит? Потому что этот код нормальный, за исключением Edit1.Text[1], которая будет давать исключение при пустом Edit1.

P.S. В чём проблема написать Edit1.Text = '[', я не понял. Также не понял, в чём проблема выделить свойство Lines у Memo в Object Inspector и щёлкнуть по кнопке "...", после чего удалить текст. Равно как и написать (проверки на ошибки убраны):
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  Src = 'qm[';
  Dst = 'йьх';
begin
  Memo1.Text := Memo1.Text + Dst[Pos(Edit1.Text, Src)];
  Edit1.Clear;
end;
P.P.S. Сюда ещё гляньте.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось artemavd; 16.08.2010 в 04:32.
GunSmoker вне форума Ответить с цитированием
Старый 16.08.2010, 04:19   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

предложу такой вариант.
берем у мемо событие OnKeyPress
пишем(использую ваш метод перевода, его измените если что сами)
Код:
if Key='q' then Key:='й';
и тд, вот и весь сказ.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2010, 05:47   #7
Yagamy Liet
Пользователь
 
Регистрация: 15.08.2010
Сообщений: 16
По умолчанию

Цитата:
Потому что этот код нормальный, за исключением Edit1.Text[1], которая будет давать исключение при пустом Edit1.
Странно - попробовал заполнить заранее - теперь все работает.
Странно потому, что сравнение происходит после нажатой клавиши (собственно, когда программа и выдает ошибку),
а ведь в этот момент поле Text занято буквой нажатой клавиши. Или я неправ?
Цитата:
В чём проблема написать Edit1.Text = '[', я не понял
Я же написал к 'примеру'. Ведь кавычку в кавычки поставить не получится.
Цитата:
Также не понял, в чём проблема выделить свойство Lines у Memo
Ну неужели по тому, что я написал трудно было понять, что я не знаю об этом свойстве
(Кстати спасибо, теперь буду знать).
Цитата:
P.P.S. Сюда ещё гляньте.
Вот за это отдельная благодарность.Не буду изобретать велосипед.:-)
Цитата:
предложу такой вариант.
Спасибо, буду знать.
Yagamy Liet вне форума Ответить с цитированием
Старый 16.08.2010, 06:03   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в момент события OnKeyPress символ еще не добавлен.

кавычка это ''''(4 кавычки)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2010, 20:15   #9
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от Yagamy Liet Посмотреть сообщение
Это часть блокнота, в котором можно будет писать русские буквы - у меня на
XP Pro x64 не работает русская кодировка и все сообщения приходиться писaть на
Гугл клавиатуре
Код:
 if Ord(Edit1.Text[1]) = 91 then Memo1.Text := Memo1.Text + 'x';
Если код буквы в Edit1 равен 91 тогда в Memo1 дописываем х.
Вроде все идеально, да вот только стоит нажать любую кравишу, как программа вылетает.
Я только не могу понять, как может не работать кодировка? в Unicode есть все языки.... причем и русский.
Может тебе раскладку русской поставить?
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 16.08.2010, 21:52   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Yagamy Liet Посмотреть сообщение
Ведь кавычку в кавычки поставить не получится.
Отчего же:

Цитата:
If Edit1.Text = '''' then Memo1.Text := Memo1.Text + 'э';
Цитата:
Сообщение от Yagamy Liet Посмотреть сообщение
Ну неужели по тому, что я написал трудно было понять, что я не знаю об этом свойстве.
Можно было. Но вот почему вы считаете нормальным при этом ругать "кривую среду", "тупых разработчиков" - не понятно совершенно. Сами ведь не удосужились ни книжку открыть, ни справку.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен ли данный кусок кода? iankov PHP 4 23.04.2009 20:49
Переведите кусок кода на понятный язык НЕпрограммисту grenkoff Помощь студентам 4 11.07.2008 17:33
кусок кода считать не из тестового файла а из Tmemo Stanislav Общие вопросы Delphi 8 07.01.2008 22:12
помогите понять кусок кода Arteom БД в Delphi 7 31.08.2007 08:51
Есть кусок кода komarevsky Общие вопросы Delphi 7 19.07.2007 17:43