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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2012, 21:02   #1
Erlotaza
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 37
По умолчанию Как привязать вводимый символ к строке?

Например, когда хочу сказать программе, что str - строка в строке Edit2, то:
str:=edit2.Text;
А вот когда с символом, то пишет о несовмест.. типов. Как правильно записать?
Хочу чтобы переменная ch (типа char, так как это символ) отвечала за вводимый в будущем символ в строку Edit2.
Erlotaza вне форума Ответить с цитированием
Старый 19.02.2012, 22:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var ch:char;
begin
 ch:=key // Это символ который должен попасть в свойство Text.
end;
Событие OnKeyPress
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.02.2012, 23:41   #3
Erlotaza
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 37
По умолчанию

Спасибо.
Я сейчас делаю ДЗ по текстовым файлам в Делфи, и мне нужно чтобы осуществлялся поиск введенного символа по файлу. Но тут такой нюанс: когда я копирую слово и нажимаю "поиск", то находит, а когда вручную, то нет)
Вот код:
Код:
procedure TForm2.Button2Click(Sender: TObject);
var str:string; i,n:integer; ch:char;
begin
str:=edit2.Text;
n:=Memo1.Lines.Count;
for i:=0 to (n-1) do
begin
if memo1.Lines[i]=str then
begin
Memo1.SelText; Memo1.SetFocus;      end;
if ch=memo1.Lines[i] then
Memo1.SelStart:=i; Memo1.SelLength:=length(str); Memo1.SetFocus;
end;
end;

procedure TForm2.Edit2KeyPress(Sender: TObject; var Key: Char);
var ch:char;
begin
ch:=key;   
end;

end.
Что не так?

Последний раз редактировалось Stilet; 20.02.2012 в 08:38.
Erlotaza вне форума Ответить с цитированием
Старый 20.02.2012, 08:20   #4
Прячущая Хвост
 
Регистрация: 20.10.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Erlotaza Посмотреть сообщение
Спасибо.
Я сейчас делаю ДЗ по текстовым файлам в Делфи, и мне нужно чтобы осуществлялся поиск введенного символа по файлу. Но тут такой нюанс: когда я копирую слово и нажимаю "поиск", то находит, а когда вручную, то нет)
Вот код:
procedure TForm2.Button2Click(Sender: TObject);
var str:string; i,n:integer; ch:char;
begin
str:=edit2.Text;
n:=Memo1.Lines.Count;
for i:=0 to (n-1) do
begin
if memo1.Lines[i]=str then
begin
Memo1.SelText; Memo1.SetFocus; end;
if ch=memo1.Lines[i] then
Memo1.SelStart:=i; Memo1.SelLength:=length(str); Memo1.SetFocus;
end;
end;

procedure TForm2.Edit2KeyPress(Sender: TObject; var Key: Char);
var ch:char;
begin
ch:=key;
end;

end.

Что не так?
Сначала увлеклась, написала нахождение слова. С символом проще. Не понимаю, правда, зачем вы находите длину текста в edit'e, если найти нужно символ. Мне переменные понадобились только для счётчика.

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  i, j, k, m: byte;
begin
  for i:= 0 to Memo1.Lines.Count-1 do
      for j:= 1 to Length(Memo1.Lines[i]) do
        if Memo1.Lines[i][j] = Edit1.Text[1] then
          begin
            m:= 0;
            if i > 0 then // т.к. SelStart отсчитывает количество символов от начала, то их нужно посчитать
              for k:= 0 to i-1 do
                m:= m + Length(Memo1.Lines[k]) + 2;
            Memo1.SelStart:= m+j-1;
            Memo1.SelLength:= 1;
            Memo1.SetFocus;
            exit; // если искомых символов больше одного, найдёт первый, елси убрать exit, будет находить последний искомый символ
          end;
Memo1.SelText - это свойство, а не процедура, поэтому строка кода

Код:
if memo1.Lines[i] = str then
begin Memo1.SelText; Memo1.SetFocus; end;
на мой взгляд, ничего кроме фокуса на memo Вам не принесёт. И зачем Вы сравнивали строку memo и содержание edit? Предполагается, что в каждой строке по одному символу?
Прячущая Хвост вне форума Ответить с цитированием
Старый 20.02.2012, 08:44   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
чтобы осуществлялся поиск введенного символа по файлу.
Ты зачем в кнопку упихнула код поиска?
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 // Говорим что в наш эдит можно ввести только один смвол
 Edit1.MaxLength:=1;
//Загружаем файл в Мемо
 Memo1.Lines.LoadFromFile(файл);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 with Memo1 do begin
// Находим введенный символ
   SelStart:=pos(key,Lines.Text)-1;
   SelLength:=1;
// И типа подсвечивая перескакиваем на него.
   SetFocus;
 end;
end;

end.
Направление понятно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.02.2012, 17:23   #6
Erlotaza
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ты зачем в кнопку упихнула код поиска?
Так я тоже в кнопку, чтобы нажимаешь на "поиск" и тогда ищет, а не сразу...
Вообщем, спасибо большое за ответы. Но я сморозил и сразу не написал, что мне таки надо слово искать а не символ..)
Erlotaza вне форума Ответить с цитированием
Старый 20.02.2012, 20:10   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
мне таки надо слово искать а не символ..)
Значит обработка должна быть в событии OnChange, и мой код будет выгдялеть чуть по другому:
Код:
 with Memo1 do begin
// Находим введенный символ
   SelStart:=pos(TEdit(Sender).Text,Lines.Text)-1;
   SelLength:=length(TEdit(Sender).Text);
// И типа подсвечивая перескакиваем на него.
   SetFocus;
 end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.02.2012, 21:55   #8
Erlotaza
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 37
По умолчанию

Подскажите пожалуйста ПОЛЕЗНУЮ литературу по Делфи, а то я плохо знаю, не знаю например что такое POS... (ну я то гляну уже), а книгу какую лучше почитать потому что их очень много. Какая проверенная?
Erlotaza вне форума Ответить с цитированием
Старый 20.02.2012, 22:04   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не бывает такого чтоб в одной книге были все ответы.
Нужно обязательно изучать несколько видов литературы.
И дружить с хелпом.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.02.2012, 22:50   #10
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

В событии OnChange
Код:
S := Edit1.Text
Данную строку можно обрабатывать как массив char-ов
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удвоить символ в строке Alexander1205 Общие вопросы C/C++ 1 01.04.2011 00:56
Как задать колличество символ в строке Linore Общие вопросы .NET 5 10.03.2010 15:57
Как подсчитать сколько раз встречается символ в строке? zver777 Общие вопросы Delphi 10 10.01.2010 00:57
заменить символ в строке felmor Паскаль, Turbo Pascal, PascalABC.NET 1 25.12.2008 18:38
Как в паскале добавить к строке символ: " ' " NexusN Паскаль, Turbo Pascal, PascalABC.NET 4 22.04.2008 19:58