Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 504

/ вопрос решён /

Здравствуйте!
- Memo3 переводит строку после каждого знака. А надо просто в строку написать.
- Теряются данные посланные в AfComPort1.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Примечание #1 (23 декабря 2013, 23:34):
Form1.Memo3.Lines.Add(ASCIIsimvol); // Только построчно? Методами Add() или Insert()?

zvygin1964 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: zvygin1964 (статус: Посетитель)
Вопрос отправлен: 22 декабря 2013, 16:03
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 27; последнее сообщение — 31 января 2014, 21:59; участников в обсуждении: 4.

Страницы: [1] [2] [Следующая »]

dmistand

dmistand (статус: 1-ый класс), 24 декабря 2013, 17:48 [#1]:

Form1.Memo3.Lines[i] := Form1.Memo3.Lines[i] + str;
нет?

А вообще - было бы неплохо и *.dfm файл прикреплять...
zvygin1964

zvygin1964 (статус: Посетитель), 25 декабря 2013, 16:05 [#2]:

*.dfm файл прикрепить на expert.delphi.int.ru уже не получается.
Попробовал ваше предложение (если я его понял правильно):
Form1.Memo3.Lines[data]:=Form1.Memo3.Lines[data]+dat;
//в окно Memo3 ничего не вывелось.
Ещё предложения? Буду рад всему...
Далее Unit1.dfm :
zvygin1964

zvygin1964 (статус: Посетитель), 25 декабря 2013, 17:30 [#3]:

object Form1: TForm1
  Left = 1036
  Top = -14
  Width = 1036
  Height = 780
  Caption = 'AsyncFree'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch = 96
  TextHeight = 13
  object Label7: TLabel
    Left = 920
    Top = 40
    Width = 32
    Height = 13
    Caption = 'Label7'
  end
  object Label8: TLabel
    Left = 912
    Top = 60
    Width = 63
    Height = 13
    Caption = #1047#1072#1076#1072#1090#1100' '#1057#1054#1052
  end
  object Button1: TButton
    Left = 912
    Top = 80
    Width = 75
    Height = 25
    Caption = #1047#1072#1087#1088#1086#1089
    TabOrder = 0
    OnClick = Button1Click
  end
  object ComboBox1: TComboBox
    Left = 904
    Top = 8
    Width = 89
    Height = 21
    ItemHeight = 13
    TabOrder = 1
    Text = 'COM1'
    OnSelect = ComboBox1Select
    Items.Strings = (
      'COM1'
      'COM2'
      'COM3'
      'COM4')
  end
  object Memo1: TMemo
    Left = 16
    Top = 16
    Width = 857
    Height = 81
    Color = clNavy
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clAqua
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = [fsBold]
    ParentFont = False
    ReadOnly = True
    ScrollBars = ssVertical
    TabOrder = 2
  end
  object Memo2: TMemo
    Left = 16
    Top = 192
    Width = 153
    Height = 305
    Lines.Strings = (
      'Memo2')
    TabOrder = 3
  end
  object Memo3: TMemo
    Left = 24
    Top = 528
    Width = 337
    Height = 65
    Lines.Strings = (
      'Memo3')
    TabOrder = 4
  end
  object Timer1: TTimer
    Enabled = False
    OnTimer = Timer1Timer
    Left = 920
    Top = 112
  end
  object AfComPort1: TAfComPort
    OnDataRecived = AfComPort1DataRecived
    Left = 976
    Top = 104
  end
end
DNK

DNK (статус: Студент), 25 декабря 2013, 17:59 [#4]:

Цитата (zvygin1964):

Попробовал ваше предложение (если я его понял правильно):
Form1.Memo3.Lines[data]:=Form1.Memo3.Lines[data]+dat;
//в окно Memo3 ничего не вывелось.

Архистранно.
"Digital Networked Knight"
zvygin1964

zvygin1964 (статус: Посетитель), 25 декабря 2013, 18:08 [#5]:

Да. Мои познания на таком уровне.
Drinkenz

Drinkenz (статус: 1-ый класс), 25 декабря 2013, 18:11 [#6]:

    for i:=1 to count do
      dat:=IntToStr(ab[i]);
      st:=st+dat+' ';
Может быть где то здесь пропущены begin end?
zvygin1964

zvygin1964 (статус: Посетитель), 25 декабря 2013, 19:37 [#7]:

Нет, begin end на своих местах. Тут все как надо. Исходный (как в вопросе) работает и все что нужно выдает.
dmistand

dmistand (статус: 1-ый класс), 26 декабря 2013, 13:34 [#8]:

zvygin1964 21урок Еремина: а что здесь data? Индекс? Насколько я понимаю, он должен быть в допустимых пределах. Это так? Вот пример, можете попробовать повторить:

DFM:

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 267
  ClientWidth = 535
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poScreenCenter
  OnShow = FormShow
  PixelsPerInch = 96
  TextHeight = 13
  object Memo1: TMemo
    Left = 72
    Top = 56
    Width = 185
    Height = 89
    Lines.Strings = (
      'Memo1')
    TabOrder = 0
  end
end

PAS:

unit form;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids, UCADControls, Menus, Buttons;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormShow(Sender: TObject);
begin
  Memo1.Lines[0] := Memo1.Lines[0] + 'qwe';
  Memo1.Lines[1] := Memo1.Lines[1] + '--';
  Memo1.Lines[2] := Memo1.Lines[2] + 'rty';
end;
 
end.

И тогда да, строка 'rty' не появляется.
zvygin1964

zvygin1964 (статус: Посетитель), 26 декабря 2013, 22:28 [#9]:

dmistand: Попробовал повторить Ваш пример. Первая строка так и вывелась 'qwe'; на второй '--' и курсор. Третья строка не вывелась.
Не понял, как я могу это использовать.
Даю пояснение о моих переменных:
data:=StrToInt(dat);//для использования стандартной функции StrToInt , которая преобразует строку (номер знака таблицы ASCII приходящей из COM порта) в тип данных Integer;
dat: string;// десятичный номер знака таблицы ASCII (приходит из COM порта);
j: string;// бинарное (8 знаков) изображение номера знака в таблице ASCII (спасибо Доктору наук Min@y™ , я ему должен за это пиво!);
ASCIIsimvol: string; // знак ASCII полученный из COM порта .

Буду рад другим советам!
dmistand

dmistand (статус: 1-ый класс), 26 декабря 2013, 23:24 [#10]:

zvygin1964 21урок Еремина: то, что написал, использовать не надо. Это пример, показывающий, почему у вас не выводятся данные в memo. Это объяснение причин. Очевидно, вы пытаетесь писать в строку по индексу data, которой нет (строк в memo меньше, чем этот индекс).
zvygin1964

zvygin1964 (статус: Посетитель), 27 декабря 2013, 00:03 [#11]:

Все прекрасно выводится! Во всех трех многострочных редакторах Memo.
Но в последнем (Memo3) нужно символы выводить не по одному в каждой строке, а друг за другом до полного заполнения строки, и только затем переводить каретку.

А что? Строк в компоненте Memo меньше 255?
dmistand

dmistand (статус: 1-ый класс), 27 декабря 2013, 00:19 [#12]:

zvygin1964 21урок Еремина: строк в мемо столько, сколько вы добавили в Memo.Lines. По умолчанию - две.
А если вам нужно выводить данные в одну строку то индексировать нужно соответственно так: Memo.Lines[0][StrToInt(dat)] := dat;
Или использовать функции замещения подстроки в строке.
Если я правильно понял цель...
zvygin1964

zvygin1964 (статус: Посетитель), 27 декабря 2013, 21:07 [#13]:

dmistand: Да! Да! Вероятно, именно это мне и надо:"функции замещения подстроки в строке",- если она не полная и сдвиг всех строк наверх на одну строку, когда поле видимости заполнится полностью (так, чтобы были видны последние строки).
Подскажите, где это срисовать.
Google моих просьб не понимает.
dmistand

dmistand (статус: 1-ый класс), 27 декабря 2013, 22:59 [#14]:

zvygin1964 21урок Еремина: пробуйте различные комбинации функций, начинающихся на Str* и String*, из SysUtils. Возможно, понадобится что-то из StrUtils.
zvygin1964

zvygin1964 (статус: Посетитель), 28 декабря 2013, 12:13 [#15]:

dmistand: Memo3.Lines[0][StrToInt(dat)] := dat;
//не работает:[Error](147): Левая сторона не может быть назначена.
zvygin1964

zvygin1964 (статус: Посетитель), 28 декабря 2013, 14:00 [#16]:

Посмотрел SysUtils и StrUtils, ничего подходящего не вижу. function StuffString немного похожа.
Может быть я компонент выбрал неудачно?
А существуют ли другие компоненты выводящие данные (многострочные), но не по строкам, а по знакам?
Drinkenz

Drinkenz (статус: 1-ый класс), 28 декабря 2013, 14:28 [#17]:

Memo1.Text:='Предыдущий текст'+#13+#10+'Это уже новая строка'
Когда-то я вот так добавлял символы в мемо. Очень полезное свойство.
dmistand

dmistand (статус: 1-ый класс), 28 декабря 2013, 16:32 [#18]:

zvygin1964 21урок Еремина: значит, вам нужны дополнительные действия...

str := Memo1.Lines[0];
str[port + 1] := chr(digit);
Memo1.Lines[0] := str;

Рабочий пример: https://www.dropbox.com/s/p9u8gf9ur8ividt/test.rar
Дальше подгоняйте под себя. Например, если заменять нужно переменное количество символов и по переменному индексу - это уже сложнее, но не невозможно.
zvygin1964

zvygin1964 (статус: Посетитель), 29 декабря 2013, 20:02 [#19]:

dmistand: .ЕХЕ вашего примера не запускался и просил найти ему rtl140.bpl файл. А при Ctrl+F9 проекта выдало [Fatal Error] form.pas(7): File not found: 'UCADControls.dcu' . Удалил эту UCADControls из uses, заработало по смешному. В случайном порядке заменяет цифры в двух строках. Это имеет отношение к моей проблеме?
zvygin1964

zvygin1964 (статус: Посетитель), 29 декабря 2013, 20:24 [#20]:

Drinkenz:
Предложенный вами пример не добавляет символ в строку, а добавляет новую строку.
Мне как раз и нужно избавиться от этих +#13+#10 . А они в
Form1.Memo2.Lines.Add(j); // делаются автоматически, против моего желания. Я же не вывожу существующий текст. Он формируется во времени. Вот после каждого знака и добавляется +#13+#10. Мне надо их убрать.

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:47
Выполнено за 0.04 сек.