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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2015, 11:00   #1
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию форматирование в Memo (колонки)

Здравствуйте!
У меня в Memo выводится 3 колонки вот таким кодом
Код:
...
vh:= IBQuery2.FieldByName('C').AsInteger;
vh_s:=Format('%-2.2s',[inttostr(vh)]);
...
vih:= IBQuery2.FieldByName('C').AsInteger;
vih_s:=Format('%-2.2s',[inttostr(vih)]);
  if vih=0 then memo1.lines[i+1]:= '-- '+vh_s+' '+A[j] else
  if vh=0 then memo1.lines[i+1]:= vih_s+' -- '+A[j] else
  if (vih=0) and (vh=0) then memo1.lines[i+1]:= '--  -- '+A[j] else
  memo1.lines[i+1]:= vih_s+' '+vh_s+' '+A[j];
вот результат
Безымянный.jpg

Как сделать так, чтобы там где по одной цифре они выравнивались с правого края своей колонки (т.е. не под буквой к)? У меня идея только проверять на количество символов и если меньше 2, то добавлять пробел... ну или если число меньше 10.... Может есть способ поизящнее?
yulia вне форума Ответить с цитированием
Старый 01.06.2015, 11:18   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

способа другого нет(вроде), но нужно правильный шрифт выбирать (моноширинный шрифт) где каждая буква имеет одинаковый размер
ZuBy вне форума Ответить с цитированием
Старый 01.06.2015, 11:35   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
vh:=0;
vih:=12;
r:=format('%2d %2d %s', [vh, vih, a[j]] );      // ' 0 12 xxxxxxxxxxx'
r:=Stringreplace(r, ' 0 ', '-- ', [relaceall]); // '-- 12 xxxxxxxxxxx'
memo.lines.add(r);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 01.06.2015 в 11:40.
evg_m на форуме Ответить с цитированием
Старый 01.06.2015, 11:48   #4
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
способа другого нет(вроде), но нужно правильный шрифт выбирать (моноширинный шрифт) где каждая буква имеет одинаковый размер
да, да, шрифт я поставила моноширинный

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
vh:=0;
vih:=12;
r:=format('%2d %2d %s', [vh, vih, a[j]] );      // ' 0 12 xxxxxxxxxxx'
r:=Stringreplace(r, ' 0 ', '-- ', [relaceall]); // '-- 12 xxxxxxxxxxx'
memo.lines.add(r);
Спасибо огромное! Так красиво, очень помогло!!!

Последний раз редактировалось Stilet; 01.06.2015 в 14:11.
yulia вне форума Ответить с цитированием
Старый 01.06.2015, 12:37   #5
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
Стрелка Альтернативные варианты

В зависимости от ситуации, можно StringGrid с отключенной сеткой и без фиксированных строк/столбцов.
Или обычный Listbox с колонками

Последний раз редактировалось SQLPowerUser; 01.06.2015 в 12:45.
SQLPowerUser вне форума Ответить с цитированием
Старый 01.06.2015, 14:12   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если не стоит задача копипастить потом текст я бы ListView использовал бы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.06.2015, 16:20   #7
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Цитата:
Сообщение от SQLPowerUser Посмотреть сообщение
В зависимости от ситуации, можно StringGrid с отключенной сеткой и без фиксированных строк/столбцов.
Или обычный Listbox с колонками
Цитата:
Если не стоит задача копипастить потом текст я бы ListView использовал бы
Спасибо, но другие варианты нельзя, стоит задача именно с Мемо. Так что сделала я как evg_m посоветовал. И все красиво и замечательно, если бы не одно но...

Вот код:
Код:
s:=DateTimePicker1.DateTime;
po:=DateTimePicker2.DateTime;
for k := 0 to Memo1.Lines.Count-1 do
  begin
  tel:= Memo1.Lines[k];
  if length(tel)>0 then
    begin
     for m := 1 to length(tel) do
     begin
      if not (tel[m] in ['0'..'9']) then
      begin
        ShowMessage('Недопустимые данные');
        exit;
      end;
     end;
    end;
A[k]:=tel;
  end;
k:=Memo1.Lines.Count-1;
Memo1.Lines[0]:='кИ кВ Номер';
i:=0;
for j:=0 to k do
  begin
  IBQuery2.sql.text:='select * from COUNT_CALLS(:Phone_A, :Phone_B, :Date_s, :Date_po, :priznak_vh )';
  IBQuery2.ParamByName('Phone_A').asString:=Edit1.text;
  IBQuery2.ParamByName('Phone_B').asString:=A[j];
  IBQuery2.ParamByName('Date_s').asDateTime:=s;
  IBQuery2.ParamByName('Date_po').asDateTime:=po;
  IBQuery2.ParamByName('priznak_vh').asString:='входящий';
  IBQuery2.Open;
  vh:= IBQuery2.FieldByName('C').AsInteger;
  IBQuery2.sql.text:='select * from COUNT_CALLS(:Phone_A, :Phone_B, :Date_s, :Date_po, :priznak_vh )';
  IBQuery2.ParamByName('Phone_A').asString:=Edit1.text;
  IBQuery2.ParamByName('Phone_B').asString:=A[j];
  IBQuery2.ParamByName('Date_s').asDateTime:=s;
  IBQuery2.ParamByName('Date_po').asDateTime:=po;
  IBQuery2.ParamByName('priznak_vh').asString:='исходящий';
  IBQuery2.Open;
  vih:= IBQuery2.FieldByName('C').AsInteger;
  vh_s:=format('%2d %2d %s', [vh, vih, a[j]] );
  vh_s:=Stringreplace(vh_s, ' 0 ', '-- ', [rfReplaceAll, rfIgnoreCase]);
  memo1.lines[i+1]:= vh_s;
  i:=i+1;
  end;
При первом запуске программы и нажатии кнопки ОК все отлично работает. Потом я выделяю весь текст в мемо, и удаляю его. Ввожу новые данные и снова нажимаю ОК. И оно почему-то не выводит последнюю строку цикла в Мемо. Я уже везде проверяла: вроде и данные все считываются и заносятся куда надо, и индексы правильные.... И вот на последнем круге цикла vh_s содержит нужные данные, а в Мемо не выводит...

Последний раз редактировалось yulia; 01.06.2015 в 16:31.
yulia вне форума Ответить с цитированием
Старый 01.06.2015, 16:43   #8
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
По умолчанию

Удалите строки
memo1.lines[i+1]:= vh_s;
i:=i+1;

и напишите
Memo1.Lines.Add(vh_s);

Последний раз редактировалось SQLPowerUser; 01.06.2015 в 16:45.
SQLPowerUser вне форума Ответить с цитированием
Старый 01.06.2015, 16:51   #9
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Цитата:
Сообщение от SQLPowerUser Посмотреть сообщение
Удалите строки
memo1.lines[i+1]:= vh_s;
i:=i+1;

и напишите
Memo1.Lines.Add(vh_s);
Таки да, в этом была проблема. Спасибо большое!!!
yulia вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текст из Memo (1 колонка) разделить на 2 колонки FleXik Общие вопросы Delphi 5 17.02.2014 15:24
Delphi.Чтение файла в Memo, вычисление, добавление строк в Memo antonio_sk Помощь студентам 0 26.04.2013 18:01
Перевод из Memo по английскому в Memo по русскому Sanek777 Общие вопросы Delphi 5 26.09.2008 00:17
В Memo сделать так, чтобы текст был разного цвета, разноцветный memo Artem Компоненты Delphi 3 07.09.2007 13:40
Колонки в richedit или memo 2face Компоненты Delphi 1 15.06.2007 15:08