Как сделать свой сайт на delphi

  • Закрыть ... [X]

       Компонент Delphi Edit представляет собой однострочное текстовое поле, служащее для ввода данных пользователем. Основным свойством компонента Delphi Edit, передающим введённую информацию, является свойство Edit1.Text типа String. При изучении работы с Delphi Edit советую посетить страничку работа со строками Delphi, так как там описываются функции Delphi для работы с данными, представленными в текстовой форме. Например,чаще всего, судя по поисковым запросам, посетители хотят знать, как работать с числами, введёнными в компонент Edit:

    с целыми   X:=StrToInt(Edit1.Text);
    с дробными X:=StrToFloat(Edit1.Text);

       Теперь рассмотрим события компонента Delphi Edit. В момент изменения свойства Text происходит событие OnChange. Причём не имеет значения, каким способом было произведено это изменение, вручную с клавиатуры или присвоением в программе. Новое значение Edit1.Text можно сразу присвоить переменной и использовать. Нужно только учитывать такой нюанс. По событию OnChange нельзя менять значение самого свойства Text этого компонента. Это естественно, ведь при этом изменении опять произойдёт событие OnChange, которое вызовет следующее, и так далее. То есть, программа зациклится и зависнет. А если без этого не обойтись, в обработчике события OnChange необходимо предусмотреть условие, при выполнении которого изменения свойства Text уже не будет.

       Далее, рассмотрим события, происходящие при вводе с клавиатуры. При нажатии кнопки последовательно происходят события:

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure  TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

       Специально подчёркнуто отличие: в обработчике KeyDown переменная Key имеет тип Word, то есть это число, а в обработчике KeyPress эта переменная имеет тип Char, то есть это символ. Отсюда следует, что обработчик KeyPress обрабатывает нажатия только клавиш клавиатуры с символами букв и цифр, а обработчик KeyDown также и остальных клавиш.
       То есть, зная коды клавиш клавиатуры, можно в обработчике KeyDown присвоить переменной Key код нужной клавиши, а в обработчике KeyPress присвоить нужный символ, и это будет имитация нажатия соответствующей клавиши клавиатуры.

       Возникает вопрос, как же узнать код клавиши клавиатуры, если под рукой нет справочника. Это очень просто. Нужно в обработчике события OnKeyDown значение переменной Key вывести на Форму, например, в заголовок:

    procedure  TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
      Caption:=IntToStr(Key);
    end;

       Ну вот, и не нужно в справочники лезть, чтобы узнать код клавиши клавиатуры! Например, код клавиши Enter равен 13, а код клавиши Esc равен 27.

       В обработчике KeyPress можно написать процедуру ввода пароля. Обычно при вводе пароля вместо нажатого символа выводится символ ' '. Для достижения такого эффекта сначала переменную Key сохраняем в глобальной переменной Pass, а затем переопределяем её, заменяя на звёздочку. Для наглядности пароль, равный слову "пароль" :), я выведу в заголовок Формы:

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    const Digit: Set of Char=['0' .. '9'];
    begin
    if not (Key in Digit) then
     Key:=#0;
    end;

       А вот здесь текст модуля, который для компонента Delphi edit обеспечивает все операции по вводу и удалению только чисел, в том числе дробных. В нём используется всего две процедуры. Одна обеспечивает ввод только допустимых символов, а вторая корректирует получившееся число, приводя его к привычному нам, общеупотребительному виду.

       Что касается обработчика KeyUp, то его использование аналогично использованию обработчика KeyDown, только принимая во внимание, что событие OnKeyUp происходит в момент отпускания клавиши.

       Напоследок о возможности программного управления курсором и выделения текста в компоненте Delphi Edit. Для реализации этих задач служат свойства

    begin
      Edit1.SetFocus;
      Edit1.SelStart:=1;
      Edit1.SelLength:=1;
    end;

       Если пропустить первый оператор, то свойство SelText всё равно будет содержать в себе второй символ, но на экране заметно этого не будет, если, конечно, фокус ввода не был перемещён туда ранее.

    Евгений, добавлено 20.03.10, 16:39:03 
    Добрый день. Отличный сайт,почти все понятно!
    Но есть и вопросы. Где надо писать:var S: String;
    begin
      Edit1.Text:='Присваиваем текст';
      S:=Edit1.Text;
    end;
    Можно для примера написать всю страничку кода? А то я тут зациклился не понимаю смысла.
    При компиляции просто объекта "Edit" все работает - текст вводится,но когда пытаюсь объявить переменную - выдается ошибка. Автор, добавлено 20.03.10, 18:16:48 
    Это пишется в обработчике какого-нибудь события. Например, щёлкните по Форме, зайдите на страничку Events Инспектора объектов, найдите событие OnCreate, щелкните дважды в нём и там поместите. Вот что должно получиться:
    procedure TForm1.FormCreate(Sender: TObject);
    var S: String;
    begin
      Edit1.Text:='Присваиваем текст';
      S:=Edit1.Text;
    end;
    Теперь при появлении Формы текст будет в поле компонента Edit.
    Насчёт ошибки - просто посмотрите, где нужно объявлять переменные. Евгений, добавлено 20.03.10, 18:20:16 
    Въехал!!!
    Без обработчика событий ничего не работает! Евгений, добавлено 20.03.10, 18:25:47 
    А так можно? В чем разница?

    var
      Form1: TForm1;
      S: String;

    implementation
    {$R .dfm}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     ShowMessage('В Edit1 написан текст: '+Edit1.Text);
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
     Edit1.Text:='Текст изменился';
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    begin
     Edit1.Text:='Присваиваем текст';
     S:=Edit1.Text;
    end;
    end.

    Автор, добавлено 20.03.10, 18:29:07 
    Это просто пример. И так можно! :) Евгений, добавлено 20.03.10, 18:29:20 
    В коком месте правильно присваивать(объявлять) переменную "S" Автор, добавлено 20.03.10, 18:33:54 
    Вне логической скобки begin/end. Если между procedure и begin - будет локальная переменная. Если после Form1 - глобальная. Евгений, добавлено 20.03.10, 18:43:53 
    Огромное спасибо.
    А то ну просто камень приткновения и полный глюк,а теперь живу и изучаю дальше, без понимания тяжело. Иван, добавлено 8.04.10, 09:58:19 
    Можно ли сделать так, чтобы при работе программы
    клавиша эмблема Widows или Win и функциональные клавиши не работали.
    СПАСИБО! Автор, добавлено 8.04.10, 10:55:45 
    В программировании всё мыслимое возможно. Но описание всего не входит в планы сайта для начинающих. Иван, добавлено 21.04.10, 16:02:29 
    Привет. Я хочу сделать так, чтобы при вводе так сказать пароля в окно edit, выводились звездочки, но звездочками не значились. Т.е. ввел 50, при нажатии "Ок" к примеру, у меня все было нормально. Как бы пароль принят. Я пробовал пример и мне интересно, за что отвечает "Pass:=Pass+Key;" Что это действие выполняет. И где и каким типом объявлена переменная Pass. Иван, добавлено 21.04.10, 16:05:39 
    И еще забыл, что при вводе к примеру пароля так называемого, после нажатия OK, выводит ошибку мол что-то со звездочками, хотя я хочу чтобы они значились тем символом, цифрами или сочетанием каким-то, но при вводе заместо вводимого появлялись звездочки
    И еще, делая пример, я хотел удалить то что ввел, а вместо этого, печатался символ. Автор, добавлено 21.04.10, 19:07:11 
    Ответы на эти вопросы я решил вынести в отдельный урок о переопределении символов при вводе текста на примере создания формы для ввода пароля. Андрей, добавлено 25.09.10, 02:40:41 
    Подскажите,пожалуйста.
    Мне необходимо ввести в компонент Edit любую функцию (допустим Xx-ln(5+x)) и необходимо,чтоб через введённое заранее пользователем значение х,рассчитывалась сама функция.
    Как это можно реализовать? Автор, добавлено 25.09.10, 05:46:22 
    Андрей, это очень нетривиальная задача. Выделение в тексте определённых фрагментов называется парсингом. То есть вам сначала надо разделить текст в edit на фрагменты, соответствующие отдельным операциям, затем определить, что за операция или какая функция, а ведь их немало. Ну а там дело техники подсчитать результат. Сможете реализовать? Я, наверное, нет... Андрей, добавлено 25.09.10, 11:06:09 
    Ну чтож...как говорится,глаза боятся,а руки делают)
    Спасибо за подсказку,теперь понял,куда копать) Сергей, добавлено 26.09.10, 10:37:25 
    Подскажите пожайлуста !
    Можно на примере Если например Есть компонент Edit1,2,3. Текст введенный в них чтобы отбражался в одну строчку в компоненте Memo1, и с каждым вводом получался вроде как списка в Memo Автор, добавлено 26.09.10, 12:07:45 
    Сергей, в 2 чём сложность? Нет бы написали, вот задачка, не получается то-то и то-то. А так с нуля - значит думать не хотите. Ну, поставьте кнопку, в её обработчике напишите memo1.text=memo1.text+edit1.text+edit2.text+edit3.text; Весь текст будет в одну строчку. И только визуально будет переходить на другие. Сергей, добавлено 26.09.10, 13:08:50 
    В том то и проблема что я в этом деле совсем зелень, и действительно не получается, прошу извенения если не так задал вопрос,
    но всеж а безкнопки обойтись не как , что бы автоматом записывало.
    Заранее спасиб. Сергей, добавлено 26.09.10, 13:20:40 
    Большое пасиб, вроде получается. Но вот вторая строка никак не хочет начинаться со второй строки и т.д если не сложно научите. Автор, добавлено 26.09.10, 16:49:49 
    Ну вот, сказали всё в одну строку... Memo1.Add(edit1.text+edit2.text+edit3.text); дополнительно можно очистить edit\'ы для последующего ввода. Автор, добавлено 26.09.10, 16:56:38 
    А насчёт без кнопки - это можно. Просто тогда сами выберите по какому событию записывать. Без события, само по себе ничего не будет. То было нажатие на кнопку, определите другое. Сергей, добавлено 2.10.10, 16:24:04 
    У меня еще вопрос: есть такой компанент RichEdit, возможно ли вставить Вордовский документ в него, если да то как. Автор, добавлено 2.10.10, 16:50:57 
    Проведите сами эксперимент:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      RichEdit1.Lines.LoadFromFile('c:\Doc1.docx');
    end;

    С вордовскими (и другими офисными) документами умеют работать компоненты со страницы Servers. Но они открывают сам Word и вставляют в него документ.

    Алексей, добавлено 5.10.10, 22:03:20 
    Как сделать так чтобы вводить в edit только цифры сказано, а как сделать так чтобы их можно было удалять вackspase? Автор, добавлено 6.10.10, 09:13:17 
    А нужно внимательнее почитать урок и подумать. В обработчике KeyPress обрабатываются только клавиши с символами. Служебные клавиши, в том числе backspace, обрабатываются в обработчике KeyDown. Нужно узнать код этой клавиши (выше написано как, и это 8), и при её нажатии копировать в edit его содержимое без последнего символа. После копирования курсор будет оказываться в начале, перед первым символом. Ну что же, сместите его в конец. Итак:
    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
    if Key=8 then
      begin
        Edit1.Text:=copy(Edit1.Text, 1, Length(Edit1.Text)-1);
        Edit1.SelStart:=Length(Edit1.Text);
      end;
    end;
    Правда, возникает ещё одна закавыка. Если удалять не последний символ, а где-то в середине, то курсор всё равно будет перепрыгивать в конец. Ну что же, запоминайте его положение перед копированием, и возвращайте не в конец, а на это место. Сергей , добавлено 6.10.10, 11:38:52 
    Пожалуйста! Как сделать так чтобы содержимое ScrollBox распечатывалось? Автор, добавлено 6.10.10, 14:09:38 
    А чего у вас там? Сам же ScrollBox размещает только компоненты, а уже они содержат то, что можно распечатывать. Печать - это работа с канвой (холстом) Canvas объекта, например принтера. На сайте про это пока ничего нет. Хорошо, давайте к вечеру здесь ссылку поставлю на урок про графику в Delphi. Аноним, добавлено 6.10.10, 14:23:26 
    Огромное спасибо, с утра еще прочитал и за сегодняшний день довольно таки далеко продвинулся. Буду внимательней читать и пытаться думать. Аноним, добавлено 6.10.10, 15:29:36 
    Последний Аноним это я-Алексей Автор, добавлено 6.10.10, 15:57:46 
    Да, спасибо, я понял ))). Алексей, добавлено 6.10.10, 20:41:00 
    Столкнулся с тем, что нужны дробные числа мне, чтобы из edita мне их забрать это g:=StrToFloat, а вот как мне разрешить вводить точку не могу догнать, не засунуть мне ее в множество. Автор, добавлено 7.10.10, 07:15:48 
    А почему нет? Ну, про типы данных бы тоже почитали, как множества описываются. Delphi понимает последовательности, поэтому числа и указаны как '1'..'9', а можно ведь было и так: '1', '2', '3', '4', '5', '6', '7', '8', '9'. И точка прекрасно добавляется, через запятую, в кавычках естественно: ['1'..'9', '.']. Один нюанс. Ведь может в качестве разделителя использоваться не точка, а запятая. Это можно настроить в Windows. Поэтому в множество лучше записать не '.', а встроенную в Delphi константу DecimalSeparator. Она тоже имеет тип Char и равна символу разделителю целой и дробной частей. Алексей, добавлено 7.10.10, 10:19:08 
    Спасибо. Я как раз таки и пытался сделать ['1' .. '9' , '.'] (только не с единицей а с нулем, так как он тоже нужен, чтобы ввести любое число ['0' .. '9' , '.']) но ничего не получилось. Буду пробывать предложенную вами константу. Алексей, добавлено 7.10.10, 10:22:47 
    Я с мини оперы сдесь пишу и почему-то после отправки комментария пробелы в квадратных скобках заменились на \ Автор, добавлено 7.10.10, 12:32:21 
    Точку, запятую или константу - лишь бы работало. А насчёт нуля - попробуйте 1..9, а ноль добавить через запятую.
    Что касается замены некоторых символов - это требование безопасности сервера. Некоторые символы заменяются на безопасные, а то хакеры не дремлют, вот и кавычка предваряется слешем, что отменяет её действие в серверных скриптах. Аноним, добавлено 7.10.10, 13:00:16 
    И с нулем всё работает, как в примере написано, а вот ни точка ни запятая не вставляется, даже так как вы показали парой постов выше Автор, добавлено 7.10.10, 13:53:22 
    Да нет, всё работает. Просто обращайте внимание, какую именно точку вы вводите. Если раскладка русская, а вы тыкаете в белую точку - латинскую, то она интерпретируется как ю, вот и не проходит. То же самое, если пользуетесь расширенной клавиатурой - проходит не точка а запятая. Аноним, добавлено 7.10.10, 14:57:27 
    Буду вечером разбираться значит. Спасибо. Алексей, добавлено 8.10.10, 08:25:30 
    Вчера разобрался со всем, большое спасибо. Жду урока про TChart, нужно график строить. Артём, добавлено 6.11.10, 17:49:55 
    А как сделать курсор "невидимым"? Как в стандартном калькуляторе Windows, его вообще нельзя установить. Автор, добавлено 6.11.10, 18:21:32 
    В вы по событию OnEnter edit-a выполняйте Form1.SetFocus. И ввод в edit делайте по событию нажатия кнопок на Форме (как вариант). Николай, добавлено 8.12.10, 17:24:57 
    Скажите, пожалуйста, можно ли как-то в конец текста в Edit подписать еще символы? Автор, добавлено 8.12.10, 17:34:33 
    Странный вопрос.
      Edit1.Text:=Edit1.Text+'то, что хотим добавить';
    Или я вас неправильно понял. Вера, добавлено 10.12.10, 14:38:52 
    Скажите, пожалуйста, а как в Edit выделить сразу несколько символов? вот дана строка "введите строку". надо выделить все буквы Т. сам поиск я организовала, но как сделать чтобы он выделял не последнее вхождение, а сразу 2 буквы. вот пока мой код: 
    Edit1.SetFocus;
    for i:=1 to length(s) do
        if s[i]='c' then begin  
                          Edit1.SelStart:=i-1;
                          Edit1.SelLength:=1;
                       end;
    Автор, добавлено 10.12.10, 16:04:29 
    А вот попробуйте сделать это вручную, выделить в адресной строке вашего браузера все буквы 'с', например. Я себе этого не могу представить.
    К сожалению, выделение возможно только непрерывной последовательности. Как вариант, предлагаю сделать как в поиске браузера, кстати. Сначала выделяется первое вхождение, затем при нажатии кнопки - следующее, и так далее. Просто нужно искать не с i=1 а с положения i=Edit1.SelStart+1 и при нахождении выполнять break - выход из цикла. Вера, добавлено 10.12.10, 16:46:41 
    да, я как раз и пробовала реализовать в программе что-то вроде "поиск по странице" только не знала, как это сделать. спасибо за подсказку,обязательно попробую. А можно это реализовать с помощью изменения цвета найденных букв, как вариант? Или в edit цвет не меняется? Вера, добавлено 10.12.10, 16:51:55 
    сама ответила на свой вопрос. достаточно было всего лишь заглянуть в свойства компонента, и всё стало ясным, относительно изменения цвета. но всё равно спасибо за создание такого сайта и помощь. Александр, добавлено 22.02.11, 12:19:01 
    Добрый день.
    скажите как можно организовать так чтобы при нажатии энтер в едит1 курсор перешол в едит7 Автор, добавлено 22.02.11, 15:54:35 
    Нужно отследить это нажатие и дать команду Edit7.SetFocus;
    Как отследить нажатие Enter, вы спрашиваете? В тексте урока
    дан на это ответ: код Enter равен 13, в обработчике Edit1KeyDown
    ловим if Key=13 ну и так далее. Владимир, добавлено 27.04.11, 12:45:29 
    Подскажите, можно ли в окне Edit сделать расположение вносимых символов выровняное по правому краю? Если можно то как? Автор, добавлено 27.04.11, 14:32:31 
    Один из моих читателей прислал вариант. Нужно создать новый объект на основе TEdit, наделить его такой возможностью, а затем наш компонент Edit сделать указателем на экземпляр объекта этого типа:
    implementation
    {$R .dfm}
    type
      TMEdit = class(TEdit)
      procedure CreateParams(var Params: TCreateParams); override;
      end;
    { TMEdit }
    procedure TMEdit.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      Params.Style := Params.Style or ES_RIGHT;
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      PPointer(Edit1)^ := TMEdit;
    end; Таня, добавлено 4.05.11, 00:49:50 
    Спасибо, всё понятно))) Полина, добавлено 24.05.11, 09:38:13 
    подскажите как очистить содержимое Edit, кнопкой очистить. Делаю так не выходит. может там другой метод используется не Clear. и как его записать
    procedure TForm6.Button3Click(Sender: TObject);
    begin
    Edit5.Text.Clear;
    end; Автор, добавлено 24.05.11, 10:39:49 
    Полина, Text не нужно! Просто Edit5.Clear;
    Ну или присваивается пустая строка: Edit5.Text:=''; Фариза, добавлено 30.05.11, 07:40:58 
    Здраствуйте хорошая статья у мя есть вопрос я делаю поиск с едитом ну ввожу в едит "слово " и если оно то выходит стрингрид(из 9 штук)
    If edit1.Text:='слово' then stringgrid1.Visible:=true;
    но у меня выходит ошибка заранее спс элеонора, добавлено 2.06.11, 05:34:30 
    У полей для ввода текста в свойстве passwordChar ставите . Вот вам и поле для ввода пароля. Автор, добавлено 2.06.11, 06:52:49 
    Фариза, нужно указать, что за ошибка.
    Элеонора, хорошая мысль. Но у меня задача показать сам принцип. Фариза, добавлено 20.06.11, 21:04:29 
    If edit1.Text='слово' then stringgrid1.Visible:=true;
    stringgrid2.Visible:=false;
    If edit1.Text='лоko' then stringgrid2.Visible:=true;
    stringgrid1.Visible:=false;
    поиск не выходит ,всмысле если я "слово" не введу первым то не работает.
     
    stringgrid1.Visible:=false; Автор, добавлено 20.06.11, 21:24:23 
    Фариза, вам про begin/end кто-нибудь говорил? После then нужно писать
    begin
      И вот сюда те несколько операторов, которые должны работать при выполнении условия.
    end;
    Иначе действие оператора if распространяется только на первый оператор, а второй выполняется всегда. Фариза, добавлено 21.06.11, 16:51:55 
    с бегином и ендом писала но не вышло Автор, добавлено 21.06.11, 19:43:50 
    Имеющееся в настоящее время описание проблемы не позволяет вам помочь... Человек, добавлено 18.07.11, 06:22:09 
    Подскажите, пожалуйста, как очистить edit при нажатии на него? Автор, добавлено 18.07.11, 09:05:13 
    Честное слово, очень хочется пообщаться с Человеком, задающим подобный вопрос, чтобы выяснить, что неясного... Это надо вообще ничего не знать, чтобы спрашивать такое (вариант: издеваетесь). Встречные вопросы:
     А как вообще нажать на Edit? Использовать соответствующий обработчик.
     А как вообще очистить Edit? Так же как и записать текст, только текст "пустой".
    Комбинируя ответы, получите решение:
    В Инспекторе Объектов есть вкладка Events. Там собраны обработчики событий, на которые может реагировать компонент. Выбираем OnClick, осуществляем двойной клик - попадаем в сформированную в редакторе заготовку обработчика и прям пишем:
     Edit1.Text:=''; //Ну или Edit1.Clear; без разницы
    Человек, добавлено 19.07.11, 02:59:21 
    ))), спасибо! Моя ошибка была в том, что я это же самое (оба варианта) на OnChange прописывал. Простите за такой вопрос). Автор, добавлено 19.07.11, 05:45:57 
    Ну ладно! А то сразу не поймёшь, поэтому, задавая вопрос, пишите ваш вариант и что именно не получается. Так принято. А то похоже что на халяву пролезть кто-то хочет... И я долго уговориваю себя отвечать. Андрей, добавлено 23.11.11, 15:19:08 
    доброе время суток!у меня тоже проблема с вводом дробных чисел в edit,перепробывал все.неполучается.можете объяснить желательно на примере.зарание спасибо! Автор, добавлено 23.11.11, 15:32:08 
    В чём проблема-то? Может быть только одна - что запятая не вставляется. Посмотрите, какие символы могут быть введены при нажатии на запятую, и вместо них вставляйте символ DecimalSeparator. Как это сделано в статье Ввод чисел в Edit. Андрей, добавлено 23.11.11, 16:04:50 
    как я понял надо еще 2 обработчика событий создать.я правильно понял ваш ответ? Автор, добавлено 23.11.11, 16:18:32 
    Если вы просто скопируете мои обработчики и ПОДКЛЮЧИТЕ их к своим компонентам, то этого будет достаточно, если не хотите разбираться, как это работает. Андрей, добавлено 23.11.11, 16:26:41 
    скопировать можно все,но я хочу понять и разобратся,как оно работает.но у меня не получается.я совсем новичок в этом. АНДРЕЙ, добавлено 23.11.11, 21:30:18 
    спасибо вам огромное!разобрался я как вводить дробные числа в эдит.теперь у меня появилась новая проблема как при двойном щелчке мыши на значение из выпадающего списка переносить его в эдит. Спасибо! Ваня, добавлено 5.01.12, 18:17:41 
    А как можно сделать что бы текст который появился в edit'е на одной форме показывался в другом edit'е на другой форме... Автор, добавлено 6.01.12, 06:06:22 
    Form2.Edit1.Text:=Form1.Edit1.Text; Гость, добавлено 19.01.12, 08:42:20 
    Уважаемый автор! напишите пожалуйста как мне правильно округлить числа выводимые в Edit правильно 22,55 = 23 и 22,45 = 22. (в большую и меньшую сторону) буду благодарен... не смог решить эту проблему.... Автор, добавлено 19.01.12, 10:41:05 
    Точно так же, как это делается и без компьютера. Нужно оценить число после запятой. А вот сделать это можно по разному. Я думаю, проще всего так: вычисляем Х-Round(X). Если меньше 0,5 то Round(X), а если больше, то прибавляем 1. Естественно, пишем для этого функцию. Глеб, добавлено 5.05.12, 14:06:51 
    Почта разобрался со своей проблемой, но есть одна просьба. Сейчас мой программный код добавляет/удаляет символы, но эти действия происходят в конце компонента, как сделать так что бы можно было в любой позиции это делать? Вот код
     procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
      var n : integer;
      s : string;
      begin
      if Key=8 then begin
      Edit1.Text:=copy(Edit1.Text,0, Length(Edit1.Text)-3);
      Edit1.SelStart:=Length(Edit1.Text);
      end;
      end;
     procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
      const
      mask : set of char =['0'..'9' , 'a'..'z' , 'A'..'Z'];
      begin
      if not (Key in mask) then Key:=#0
      else begin
      Edit1.Text:=Edit1.Text + ' ,';
      Edit1.SelStart:=Length(Edit1.Text) - 2;
      end;
      end; Автор, добавлено 5.05.12, 14:22:53 
    Это происходит потому что вы копируете весь текст, за исключением последнего символа. Если у вас курсор в середине слова, то нужно найти это положение, и копировать первую часть за один символ до курсора, а вторую от курсора и дальше. И положение курсора в окончательном слове должно уменьшиться на 1. И ещё,
    copy(Edit1.Text,0, Length(Edit1.Text)-3); - неправильно.
    Текст в строках типа String индексируется с 1. Глеб, добавлено 5.05.12, 21:24:29 
    Автор, я уже голову сломал над этим компонентом, как мартышка с гранатой кручу SelStart, но не могу добиться нужного результата. Если можете помочь то прошу это сделать. Автор, добавлено 5.05.12, 22:05:12 
    Странно, вы же использовали SelStsrt правильно, помещая курсор в конец слова.
    S:=Edit1.Text;
    n:=Edit1.SelStart;
    Edit1.Text:=copy(S, 1, n-1)+copy(S, n+1, Length(S)-n);
    Edit1.SetFocus;
    Edit1.SelStart:=n-1;
    Возможно, в вашем случае SetFocus не требуется.
    Глеб, добавлено 5.05.12, 22:27:34 
    ваша версия Edit1.Text:=copy(S, 1, n-1)+copy(S, n+1, Length(S)-n);
    моя версия Edit1.Text:=copy(S, 1, n-3)+copy(S, n+1, Length(S)-n);
    мне нужно: если пользователь нажал на бэкспей или дел, что бы удалялся символ + пробел + запятая. Если сделать, как я отписал то все очень приятно получается. Спасибо за идею и помощь Глеб, добавлено 5.05.12, 22:34:51 
    Автор во избежания таких ляпов, как у меня было - рекомендую занести мой пример удаления символов к вам на сайт. Я могу скинуть всю процедура удаления + к ней коменты моего понимая происходящего
    Согласны? Автор, добавлено 5.05.12, 22:52:32 
    Давайте, посмотрим. Глеб, добавлено 5.05.12, 22:54:17 
    procedure TForm3.Edit1KeyDown(Sender: TObject; var Key: Word; //служебные клавиши типа бэкспейс работую в СТРОГО в этом событии
     Shift: TShiftState);
      var n : integer; //переменная начала строки
      s : string; //переменная самой строки
      begin
      if Key=8 or 46 then begin //условия нажатия клавишь 8-бекспейс 46-дел
      S:=Edit1.Text; //загоняем весь текст эдита в переменную
      n:=Edit1.SelStart; //загоняем адрес начала записи в переменную
      Edit1.Text:=copy(S, 1, n-3)+copy(S, n+1, Length(S)-n); //команда редактирования записи
      Edit1.SetFocus; //установка фокуса
      Edit1.SelStart:=n-1; //возвращаем значения
      end;
      end; Глеб, добавлено 5.05.12, 22:55:08 
    Коменты я делал для себя, поэтому их могут не понять другие( Глеб, добавлено 5.05.12, 23:09:49 
    Автор, подкорректировать бы меня еще в процедуре добавления.
     
    procedure TForm1.edit1KeyPress(Sender: TObject; var Key: Char);
    begin
     edit1.Tag := edit1.SelStart;
    end;
    procedure TForm1.edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    var
     s : string;
    begin
     s := edit1.Text;
     Insert(' ,', s, edit1.Tag + 2);
     edit1.Text := s;
     edit1.selstart := edit1.Tag + 3;
     edit1.SelLength := 0;
    end;
    но есть нюанс. если скажем набрать 1245, то программа ответит 1 ,2 ,4 ,5 , вроде хорошо и даже можно вставить 3 между 2 и 4 программа ответит 1 ,2 ,3 ,4 ,5 , редактирование есть в любой позиции, НО если поставить курсор мыши в компоненте эдит сразу после цифры 2 то получиться 1 , 22, ,3 ,4 ,5 , надо сделать проверку на область добавления
    Сам не знаю как, поможете мне? Автор, добавлено 6.05.12, 05:24:29 
    Сейчас некогда - уезжаю. Вечером посмотрю. Глеб, добавлено 6.05.12, 22:39:12 
    Автор, я сам так и не разобрался с этой проблемой. Если есть мысли то прошу помочь Автор, добавлено 7.05.12, 05:49:54 
    Пока я буду "посмотреть" - а вы не хотите всё переделать? Ведь в Русском Языке по правилам пунктуации запятая ставится сразу после символа или слова, а за ней обязательно пробел. А у вас наоборот - смотрю и "уши вянут". Автор, добавлено 7.05.12, 09:20:17 
    И ещё, если вы вместо пользователя добавляете запятую и пробел, и удалять тоже за него хотите, то обеспечьте ещё чтобы он не мог поставить курсор в неправильное положение - курсор всегда должен быть после побела. А если его нужно сдвинуть? Нужно после любого нажатия на стрелки курсора сдвигать его так, чтобы он оказывался после пробела, т.е. на 3 символа. Глеб, добавлено 7.05.12, 13:03:59 
    Автор, это специальный эдит, который предназначен доя ввода символа пробела запятой, к русскому языку он не относиться, да и к анг так же. Как проводить проверку на корректный ввод, я не знаю. Поэтому и пишу сюда и надеюсь на помощь Автор, добавлено 7.05.12, 13:57:35 
    Получается, что мы решаем разные задачи. Я вашей не знаю, и выдумываю свои условия. Сформулируйте точную задачу, и не с последней части, а целиком, ибо есть взаимовлияние. Глеб, добавлено 7.05.12, 14:24:13 
    Я с вами согласен. Мне нужно в компонент эдит вводить символы: 0..9, A..Z, a..z. Если происходит нажатия любого из символов выше, то программа должна вставить пробел + запятую. К примеру пользователь вводит символ "1", программа отвечает
    "1 ,". Данный ввод символов, должен быть ВЕЗДЕ т.е. редактировать запись надо в начале, в середине, в конце. При этом не должны быть каши ввода типа "11 ,,", а "1 ,1 ,". Я смог добиться ввода символа пробел запятая и редактирования в любой позиции, но к сожалению есть та самая каша, которую я не могу исправить. Вот код программы
    procedure TForm1.edit1KeyPress(Sender: TObject; var Key: Char);
    begin
     edit1.Tag := edit1.SelStart;
    end;
    procedure TForm1.edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    var
     s : string;
    begin
     s := edit1.Text;
     Insert(' ,', s, edit1.Tag + 2);
     edit1.Text := s;
     edit1.selstart := edit1.Tag + 3;
     edit1.SelLength := 0;
    end; Автор, добавлено 7.05.12, 17:33:27 
    Я понял. Думаю, каша из-за того, что допустимо редактирование в любой позиции. Позиция для пользователя не должна быть произвольной. ТО есть курсор ВСЕГДА должен быть на строго определённой позиции, и это должна отслеживать программа. При движении курсора она должна подвигать его ещё, на нужную позицию. Опять - завтра сам посмотрю... Глеб, добавлено 7.05.12, 20:06:49 
    Автор, я с вами согласен, но увы я асемблерщик, а не специалист по дельфи - трудно разобраться в этих интерфейсных командах. Надеюсь решение моей проблемы будет найдено. Автор, добавлено 8.05.12, 09:53:31 
    Ассемблерщик! Уважаю! А я вот пытаюсь развивать объектное мышление. Посему возник объектный метод решения: так как мы имеем дело не с отдельными символами, а с объектом типа (Х пробел запятая), то и оперировать нужно с целым объектом а не с его частями. ТО есть, при вводе симолов 0..9, A..Z, a..z программа создаёт новый объект, добавляя пробел и запятую и хранит его отдельно, в массиве. Но в данном случае лучше подходит список типа StringList, т.к. он имеет методы Вставить и Удалить. Таким образом, алгоритм такой:
    1. При вводе - определить позицию в строке - номер объекта (SelStart div 3)
    2. В соответствующую строку StringList вставить новый объект
    3. Построчно записать StringList в едит
    При стирании аналогично. Попробую сделать. Но тут у меня возник вопрос. При нажатии BackSpace обычно удаляется предыдущий символ, Del - последующий. Можно сделать так же, или по-любому удалять тот на котором находится курсор? Автор, добавлено 8.05.12, 10:45:56 
    Вот так получилось: скачать проект. Глеб, добавлено 8.05.12, 13:36:20 
    Автор, спасибо тебе за помощь. Программа отлично работает на ввод/удаление. Этого мне достаточно. Сейчас пытаюсь разобраться в твоем коде, все таки интересно постичь великие догматы дельфи)
    Еще раз спасибо. Глеб, добавлено 8.05.12, 17:34:17 
    Автор, а это из-за события получается, что сначала вставляется малая буква, а потом она переходит в заглавную.
     procedure TForm2.Edit3KeyPress(Sender: TObject; var Key: Char);
      const
      mask : set of char =['A'..'Z', 'a'..'z'];
      begin
      if not (Key in mask) then Key:=#0
      else begin
      Edit3.Text:=AnsiLowerCase(Edit3.Text);
      Edit3.SelStart:=Length(Edit3.Text);
      end;
      end; Автор, добавлено 8.05.12, 17:46:41 
    Это происходит из-за очерёдности событий. Сначала происходит KeyPress и текущее содержимое (ещё до получения нового символа) преобразуется в нижний регистр. А затем добавляется новый символ, ведь компонент работает, писать можно, символы появляются, по-любому - вы же блокируете только то что вне маски. Автор, добавлено 8.05.12, 17:51:45 
    Нужно так:
    Edit3.Text:=AnsiLowerCase(Edit3.Text+Key);
    Edit3.SelStart:=Length(Edit3.Text);
    Key:=#0; Автор, добавлено 8.05.12, 17:53:27 
    Или даже так:
    if(Key in mask) then
      begin
      Edit3.Text:=AnsiLowerCase(Edit3.Text+Key);
      Edit3.SelStart:=Length(Edit3.Text);
      end;
    Key:=#0; Глеб, добавлено 8.05.12, 18:15:33 
    Действительно, все работает. Спасибо за помощь, классный сайт. Глеб, добавлено 9.05.12, 22:24:37 
    Автор, мне снова нужна ваша помощь, вы в дельфях компетентнее меня.
    В моей программе есть один эдит куда пользователь вводит расширение файла, ну скажем "txt.", "exe." и так далее.
    Необходимо. если пользователь набрал три символа "exe" программа ответила в эдите "exe. ". Я кручу процедуру, которая была в программе, вы мне её давали, но так и не понимаю, как реализовать ввод трех символов и после них точку
    Прошу в этом мне помочь
     
    Автор, добавлено 9.05.12, 22:33:12 
    if Lenght(Edit.Text)=3 then Edit.Txt:=Edit.Text+'.'; Глеб, добавлено 9.05.12, 22:45:27 
    Автор, не пойму куда вставлять эту надпись. Так как там, где она должна быть по логике дельфи выдает ошибку. Я вам исходный код приведу ниже
    function Position: Integer;
    begin
    Result:=(Form1.Edit1.SelStart div 3);
    end;
    procedure Adding(Key: Char);
    var i, n: Integer;
    begin
    n:=Position;
    Form1.Edit1.Text:='';
    with Form1.Edit1 do
      for i:=0 to List.Count-1 do
      Text:=Text+List[i];
    Form1.Edit1.SelStart:=(n+1)3;
    end;
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    const Legal=['0'..'9', 'A'..'Z', 'a'..'z'];
    begin
    if Key in Legal then Adding(Key);
    Key:=#0;
    end; Автор, добавлено 9.05.12, 23:32:56 
    Манную кашу есть пробовали? Отдельные крупинки различали? Я - нет.
     
    Так и у вас. То что вы сейчас скопировали, это добавление пробела и точки. При чём здесь 'exe.'? Вы же сами написали, что это другой Edit... Это должно быть событие ввода символа в этом едите, например, OnKeyUp:
    procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
    if Length(Edit1.Text)=3 then Edit1.Text:=Edit1.Text+'.';
    end;
    Глеб, добавлено 9.05.12, 23:55:29 
    if Length(Edit1.Text)=3 then Edit1.Text:=Edit1.Text+'.'; вроде эта надпись позволит только один раз ввести 3 символа с этим я сам справился, а мне нужно несколько раз, как в цикле. "exe. txt. rar." Приблизительно вот так, а код я вам отправил. Думал, что не узнали меня) Автор, добавлено 10.05.12, 05:42:42 
    Ясно. Вечером посмотрю - уезжаю. Автор, добавлено 11.05.12, 07:50:19 
    Как вам такой вариант:
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    const Legal=['a'..'z'];
    var n: Integer;
    begin
    if (not (Key in Legal)) then
      begin
      Key:=#0;
      exit;
      end;
    if ((Edit1.SelStart<>Length(Edit1.Text))and((Length(Edit1.Text) mod 5)=0)) then
      begin
      Key:=#0;
      exit;
      end;
    if (Length(Edit1.Text) mod 5)=2 then
      begin
      Edit1.Text:=Edit1.Text+Key+'. ';
      Edit1.SelStart:=Length(Edit1.Text);
      Key:=#0;
      end;
    end;
    Вариант допускает редактирование в любой позиции. Для этого нужно кнопкой Del стереть неправильный символ, вместо него ввести другой. Пока не удалишь - новый не введёшь. А новые сочетания можно вводить только в конец. Глеб, добавлено 11.05.12, 13:11:13 
    Автор удаление немного барахлило в коде поэтому я добавил его совоими глупыми мыслями и получилось так
     procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
      var
      n : integer;
      s : string;
      begin
      if (Key=8) or (Key=46) then begin
      if ((Length(Edit1.Text) mod 5)=0) then
      begin
      S:=Edit1.Text;
      n:=Edit1.SelStart;
      Edit1.Text:=copy(S, 1, n-5)+copy(S, n+1, Length(S)-n);
      Edit1.SetFocus;
      Edit1.SelStart:=n-1;
      end
      else
      begin
      S:=Edit1.Text;
      n:=Edit1.SelStart;
      Edit1.Text:=copy(S, 1, n-1)+copy(S, n+1, Length(S)-n);
      Edit1.SetFocus;
      Edit1.SelStart:=n-1;
      end
      end;
      end; Глеб, добавлено 11.05.12, 13:21:08 
    Автор, спасибо за помощь. Вы очень мне помогли.
    Хотел поинтересоваться, а если скажем я хочу не (txt.) а (.txt), это как надо надпись (Edit1.Text:=Edit1.Text+Key+'. ';) перекрутить до нужной кондиции Автор, добавлено 11.05.12, 13:24:16 
    И тоже барахлит. Уж лучше без умствований. Работает - и идите дальше, а то ничего не сделаете... Автор, добавлено 11.05.12, 13:27:12 
    Так:
      Edit1.Text:='.'+Edit1.Text+Key+' '; Глеб, добавлено 11.05.12, 13:28:11 
    Автор, а где барахлит я сейчас тестирую удаление и не вижу тупиковых ситуаций, Глеб, добавлено 11.05.12, 13:45:18 
    Автор, выявилось одно затруднение с добавлением. если набрать с клавы три символа, а потом поставить фокус ввода между, введенных символов, и попытаться вести новые символы, то он еще добавит символы в уже сущ запись, а не позади их.
    к примеру ввели с клавы (aaa), программа ответит (ааа.), поставили фокус между двумя первыми (a) и ввели любые символы. Получиться (ахаа. а. аа. аа. и т.д). Можно ли сделать так чтобы не было этой ситуации? Что то на подобие лексемы Автор, добавлено 11.05.12, 13:47:45 
    Например:
    qwe. qwe.
    Ставим курсор перед вторым qwe. Получаем:
    qwe. - без пробела. И пробел уже не вводится. Нужно удалять и это qwe и заново всё вводить. И попытки как-то исправить ситуацию - курсор туда-сюда, ввести что-то выявляют ещё странное поведение программы. Автор, добавлено 11.05.12, 13:52:55 
    А зачем вводить что-то внутрь готовых сочетаний??? Если исправить, то да, а портить??? Или клиент дебил? Он же увидит, что неправильно ввёл - удалит лишнее. Мы ему жизнь облегчаем вводя вместо него точку и пробел. Или нужно вообще запретить редактирование - только удаление сочетания целиком - и курсор в конец. Глеб, добавлено 11.05.12, 13:55:15 
    Да вы правы удаление тупит у меня, надо будет подумать Автор, добавлено 11.05.12, 13:56:50 
    Цитата: "к примеру ввели с клавы (aaa), программа ответит (ааа.), поставили фокус между двумя первыми (a) и ввели любые символы"
    Откуда это у вас??? Программа не допускает ввода в готовые сочетания. Автор, добавлено 11.05.12, 14:00:24 
    В общем, пока я вижу что достаточно только моей OnKeyPress. Ввели 3 символа, точка и пробел добавились. Нужно исправить - стёрли символ -вставили другой. А введение новых сочетаний - только в конец. Автор, добавлено 11.05.12, 14:02:08 
    Делайте программу дальше, бросьте это, не теряйте времени. Глеб, добавлено 11.05.12, 16:56:16 
    Автор, не подскажите мне: почему идет ерунда с удаление. если ввести (qwerty) программа ответит (qwe, rty, )потом поставить фокус сразу после первой запятой и её удалить то получиться ( rty, ) вот этот пробел мне жить не дает. Mожно его принудительно удалить? Такая ситуация происходит только в начали записи в edit
    код ниже
     procedure TForm2.Edit3KeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
      var
      n : integer;
      s : string;
      begin
      if (Key=8) or (Key=46) then begin
      if ((Length(Edit3.Text) mod 5)=0) then
      begin
      S:=Edit3.Text;
      n:=Edit3.SelStart;
      Edit3.Text:=copy(S, 1, n-5)+copy(S, n+1, Length(S)-n);
      Edit3.SelStart:=n-1;
      edit3.SetFocus;
      Edit3.SelStart:=Length(S)
      end
      else
      begin
      S:=Edit3.Text;
      n:=Edit3.SelStart;
      Edit3.Text:=copy(S, 1, n-1)+copy(S, n+1, Length(S)-n);
      Edit3.SelStart:=n-1;
      edit3.SetFocus;
      Edit3.SelStart:=Length(S);
      end
      end;
      end; Автор, добавлено 11.05.12, 17:41:17 
    Завтра, всё завтра... Глеб, добавлено 20.05.12, 20:12:47 
    Добрый день
    procedure TForm4.Button1Click(Sender: TObject);
      begin
      if OpenDialog1.Execute then Edit2.Text := OpenDialog1.FileName;
      end;
    end.
    +
    filter все файлы (.)|.
    Такая процедура отлично работает, с этим я сам справился, а вот как сделать так чтобы только (имя файла.расширение), а не весь путь + (имя файла.расширение) Автор, добавлено 20.05.12, 21:17:00 
    Нужно из полной строки удалить папку. Папка возвращается функцией ExtractFilePath(FileName). А удалить можно Delete. Тима, добавлено 12.09.12, 21:32:17 
    Цитата "с дробными X:=FloatToStr(Edit1.Text);" НЕТ!!! с дробными X:=StrToFloat(Edit1.Text); Автор, добавлено 12.09.12, 23:22:44 
    Пасиба! Исправлю. георгий, добавлено 22.09.12, 21:06:17 
    у меня вопрос как с него задать переменной действительное число
    Автор, добавлено 22.09.12, 21:50:47 
    Действительное - это число с запятой:
    X:=StrToFloat(Edit1.Text); егор, добавлено 23.03.13, 12:16:29 
    Добрый день. Подскажите пожалуйста. Я перемножаю 2 матрицы, их размер меняется динамически, в Edit, но если удалять число размерности вылетает. Подскажите как многократно вводить размерность матриц вод что в edit я записал
    procedure TForm1.Edit1Change(Sender: TObject);
      var i :integer;
    begin
      i:=StrToInt(Edit1.Text);
      if i>0 then
      begin
      a.ColCount:=i; a.rowCount:=i;
      b.ColCount:=i; b.rowcount:=i;
      c.ColCount:=i; c.rowCount:=i;
      end
     
      Else ShowMessage('неправельный ввод');
      end;
      Автор, добавлено 23.03.13, 12:50:40 
    Смотрите, вы пишете
     i:=StrToInt(Edit1.Text);
    и затем анализируете на положительность, с выводом "неправильный ввод". Но ведь для этого пользователь должен ввести число с минусом, вероятность чего очень мала, скорее он брякнет что-нибудь типа "довалоылцу" - текстовую абракадабру и будет ошибка преобразования. То же самое будет если в Edit будет пусто. Так лучше пользоваться операторами контроля чрезвычайных ситуаций try/except:
    procedure TForm1.Edit1Change(Sender: TObject);
      var i :integer;
    begin
      try
      i:=StrToInt(Edit1.Text);
      a.ColCount:=i; a.rowCount:=i;
      b.ColCount:=i; b.rowcount:=i;
      c.ColCount:=i; c.rowCount:=i;
      except
      ShowMessage('неправИльный ввод');//и кстати это лишнеее, мешать будет- уберите, пусть тут пусто будет
      end;
    end;
    Кристина, добавлено 10.06.13, 20:33:19 
    Здравствуйте, такой вопрос. У меня в edit пользователь записывает имя файла, с которым потом происходит работа. Мне необходимо, учесть случай, когда в edit ничего не введено, а файл открыть пытаются. Не подскажите, как обработать данную ситуацию? Автор, добавлено 10.06.13, 22:16:24 
    Кристина, можно просто проверить наличие файла, который ввёл пользователь, это кстати нужно делать по-любому. Проверяется файл функцией FileExists(Имя_Файла), возвращающей True или False.
    Также, попытка открыть несуществующий файл вызовет исключительную ситуацию,которую можно контролировать в блоке
    try
    //попытка открыть файл
    except
    //эти операторы срабатывают если произошла ошибка:
     ShowMessage('Файл не существует');
    end;
    Наконец, можно просто проанализировать, не пуст ли Edit. Максим, добавлено 2.08.13, 18:44:53 
    Здравствуйте, интересует вопрос о том, чтобы написанная первоначальная информация в Edit1, например 'Login', при нажатии на Edit1 исчезала, но последующая информация при нажатии на сам Edit1 не исчезала, буду очень благодарен за помощь! Автор, добавлено 3.08.13, 11:17:33 
    А в чём проблема? Так и пишите:
    if Edit1.Text='Login'
      then Edit1.Text:=''; Максим, добавлено 3.08.13, 18:51:22 
    Все супер, спасибо большое! катя, добавлено 6.10.13, 14:40:36 
    Добрый день.у меня такая проблема- есть цикл,к примеру от 1 до 10, в нем нужно считать данные из edit-ов,причем эти данные для каждого цикла разные.например,для 1-го цикла данные равны 1,3,4;для второго - 3,6,15 и т.д. Как и где нужно поставить считывание данных из edit)ов?
    заранее благодарна. Автор, добавлено 6.10.13, 14:53:08 
    Здравствуйте, Катя. Вам нужно считать числа 1,3,4 или всё же данные из Edit'ов? Не совсем понятно в чём проблема. Или перед каждым циклом предварительно нужно изменить значения в Edit'ах? Пишите точнее. катя, добавлено 6.10.13, 15:23:01 
    Перед каждым циклом значения эдитов должны вводиться заново и считываться.не знаю как записать цикл,чтобы это работало. Аноним, добавлено 6.10.13, 15:25:22 
    Данные из эдитов считываются отдельной процедурой. Автор, добавлено 6.10.13, 15:31:26 
    Ну так что, цикл должен ждать ввода новых данных. Данные вводятся вручную? Как цикл узнает что данные введены?
    Если данные вводятся вручную, то зачем цикл? Просто вводим переменную-счётчик, инициируем нулём. Вводим данные, нажимаем кнопку - считываем данные и увеличиваем счётчик, и так пока счётчик не вырастет до 10.
    В общем, пока не понял вашей задачи, гадать приходится. гость 94, добавлено 9.10.13, 17:35:56 
    как сохранить текст на русском языке в формате .txt . У меня, если пишу текст на русском языке, и сохраняю его, то оно выводит этот текст в блокноте( гость 94, добавлено 9.10.13, 17:36:37 
    т.е. не выводит Автор, добавлено 9.10.13, 17:44:26 
    Ну да пишите вы точнее!!!!!!!!!!
    Как вы сохраняете? Насколько я знаю, Edit не имеет средств сохранения данных в файл. Что выделаете для сохранения?
    Но отвечать только завтра смогу - уезжаю сейчас. гость 94, добавлено 9.10.13, 18:42:41 
    procedure TForm1.LoadClick(Sender: TObject);
    begin

      if OpenDialog1.execute=True then RichEdit1.Lines.loadFromFile(OpenDialog1.FileName);
    end;

    procedure TForm1.SaveClick(Sender: TObject);
    begin

      if SaveDialog1.Execute=true then RichEdit1.Lines.SaveToFile(SaveDialog1.FileName);
     
    end;

    гость 94, добавлено 9.10.13, 19:41:38 
    я делаю текстовой редактор)и вот создал кнопку сохранения, чтобы сохранить в формате .txt, и когда открываю сохранившийся док.там не показывает текст на русском((и вообще что-то не то показывает( Автор, добавлено 10.10.13, 10:39:00 
    Итак, мне всё ясно. Это проблема форматов. Сохраняете в РичЕдит, а читать пытаетесь блокнотом, эти форматы несовместимы. Прочитайте WordPad'ом. Или работайте с Memo - Memo читается блокнотом. Аноним, добавлено 10.10.13, 15:45:17 
    даа я разобрался с этим)))и все же спасибо за ответ!:))) Ильнур, добавлено 3.01.14, 17:36:24 
    у меня 4 едит, а вот на 4 едит как назвать?
    edit1.Text:=floattostr(vpr);
    edit2.Text:=floattostr(vstm);
    edit3.Text:=floattostr(vchsl);
    edit4.Text:=floattostr(??...)
    и ещё на едит6 что на писать там должно быть fond...:
    fondv:=pr/stm;
    edit4.Text:=floattostrf(fondv,ffFixed,6,1);
    fondotd:=(pr/stm)chsl;
    edit5.Text:=floattostrf(fondotd,ffFixed,6,1);
    edit6.Text:=floattostrf(?????.....) Автор, добавлено 3.01.14, 18:11:20 
    Прошу меня великодушно извинить, но НИЧЁ не понял. Вообще. То есть абсолютно.


    Поделись с друзьями



    Рекомендуем посмотреть ещё:



    Выберите свой курс в «Специалистe» при МГТУ им. Баумана Как сделать ферментированную кукурузу для ловли

    Как сделать свой сайт на delphi Как сделать свой сайт на delphi Как сделать свой сайт на delphi Как сделать свой сайт на delphi Как сделать свой сайт на delphi Как сделать свой сайт на delphi

    ШОКИРУЮЩИЕ НОВОСТИ