Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Табуляция в combobox ? 
V
    Опции темы
Чучмек
Дата 28.12.2011, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Как организовать табуляцию в combobox
Нужно в выпадающем списке получить:
Код

...
0012        ghjhg        hhgj
0013        hgfh         hghjkj
0014        hj           bvj
...



Вместо:
...
0012IghjhgIhhgj
0013IhgfhIhghjkj
0014IhjIbvj
...


Это сообщение отредактировал(а) Чучмек - 28.12.2011, 16:51


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
mistrmax
Дата 28.12.2011, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Код

procedure TForm1.tabulation;
var
i,count:integer;
p1:integer;
s:string;
begin
  count:=ComboBox1.Items.Count;
  for i:=0 to count-1 do begin
  s:=ComboBox1.Items.Strings[i];
  while pos('I',s) <> 0 do
  begin
    p1:=pos('I',s);
    Delete(s,p1,1);
    Insert(#09,s,p1);
    ComboBox1.Items.Strings[i]:=s;
  end;
  end;
end;

Будет видная после нажатия на элемент. А так почему-то не воспринимается.
PM   Вверх
Данкинг
Дата 28.12.2011, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Код

function tab (kolvo: integer): string;
 var
  j:integer;
 begin
  result:='';
  for j:=1 to kolvo do
   result:=result+'       ';
 end;

 smile

Добавлено через 1 минуту и 15 секунд
mistrmax, что за I у тебя такая?
Цитата(mistrmax @  28.12.2011,  19:07 Найти цитируемый пост)
 while pos('I',s) <> 0 do

Символ табуляции может и квадратиком отображаться.



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
mistrmax
Дата 28.12.2011, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Данкинг,  так у него в примере I нужно на символ табуляции заменить. Если захочет потом сивол сам заменит. А пробелы я тоже хотел предложить вот только выглядить будет не как три колонки.
PM   Вверх
Чучмек
Дата 28.12.2011, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Цитата(mistrmax @  28.12.2011,  18:19 Найти цитируемый пост)
так у него в примере I нужно на символ табуляции 

Да не, в примере I  - это квадратик, который вместо  символа табуляции (^I) отображается.


Это сообщение отредактировал(а) Чучмек - 28.12.2011, 18:36


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
mistrmax
Дата 28.12.2011, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Вообщем вот:
Код

 public
    { Public declarations }
    procedure tabulation;
    function extractSecondPart(s:string):string;
  end;
...
procedure TForm1.tabulation;
var
i,count,j,longest_length,r:integer;
p1:integer;
s,sp,tmp:string;
begin
  //находим найдлиннейший элемент
  longest_length:=0;
  tmp:='';
  count:=ComboBox1.Items.Count;
  for i:=0 to count-1 do begin
    sp:=extractSecondPart(ComboBox1.Items.Strings[i]); //отрезаем среднюю часть
    if length(sp)>longest_length then
    longest_length:=length(sp);
  end;
  //вставляем "пробеляцию" хДД
  for i:=0 to count-1 do begin
    s:=ComboBox1.Items.Strings[i];
    //после первой колонки вставляем 4 пробела
    sp:=extractSecondPart(ComboBox1.Items.Strings[i]);
    p1:=pos('I',s);
    Delete(s,p1,1);
    Insert('    ',s,p1);
    //находим разнице между найдлиннейшим и текущим
    r:=longest_length-length(copy(s,9,pos('I',s)-9));
    if r = 0 then tmp:=' ';
    //генерируем пробелы хДД
    for j:=1 to r do tmp:=tmp+'_';
    //вставляем
    p1:=pos('I',s);
    Delete(s,p1,1);
    Insert('____'+tmp,s,p1);
    ComboBox1.Items.Strings[i]:=s;
    tmp:='';
  end;
end;

function TForm1.extractSecondPart(s: string): string;
begin
  delete(s,1,pos('I',s));//удаляем до первого I
  delete(s,pos('I',s),length(s)-pos('I',s)+1);
  result:=s;
end;

Теперь осталось выбрать какой-нибудь пробел отсюда и всё будет так как надо. Я сейчас ещё подумаю, может найду подходящий по величине.
В этих ваших квадратиках я не разбираюсь, можете вставлять вместо I, что хотите. К примеру | подошло бы

Добавлено через 8 минут и 38 секунд
Код

    for j:=1 to r do tmp:=tmp+'  '; //тут теперь два пробела хД
    showmessage(inttostr(length(tmp)));
    //вставляем
    p1:=pos('I',s);
    Delete(s,p1,1);
    Insert('    '+tmp,s,p1);

Вот так всё работает. Могут быть конечно косяки. ХЗ в каких случаях они сдвигаются.

PM   Вверх
Dik0n
Дата 28.12.2011, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 11.5.2011

Репутация: нет
Всего: 10



Можно реализовать отрисовку самому, сколько хочешь колонок и каким угодно шрифтом.

Код

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin

end;

--------------------
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ◄◄◄ Сотри монеткой защитный слой
PM MAIL WWW   Вверх
Чучмек
Дата 28.12.2011, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



mistrmax, вопрос не в этом.
Вопрос в том, КАК заставить ComboBox корректно отображать  ansi символ #9 средствами ObjecInspector+SendMessage/Perform 


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
northener
Дата 29.12.2011, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Чучмек @  28.12.2011,  21:03 Найти цитируемый пост)
Вопрос в том, КАК заставить ComboBox корректно отображать  ansi символ #9 средствами ObjecInspector+SendMessage/Perform 

Вопрос "Как заставить ComboBox корректно отображать  ansi символ #9 средствами ObjecInspector+SendMessage/Perform" просто глупый. 
Спросите ещё "Как заставить ComboBox корректно отображать  ansi символ #7" smile


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
mistrmax
Дата 29.12.2011, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



northener, +1

Чучмек, ну так пиши свой компонент, кто мешает. 
Если так сильно надо именно на три колонки разбить, то и моё решение вполне подойдёт.
PM   Вверх
Чучмек
Дата 31.12.2011, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Цитата(northener @  29.12.2011,  00:45 Найти цитируемый пост)

Вопрос "Как заставить ComboBox корректно отображать  ansi символ #9 средствами ObjecInspector+SendMessage/Perform" просто глупый. 

northener,  ответ не умнее.

Вот dll-ка, подключи её в *.dpr и посмотри как будут отображаться табы в любом combobox-се.
Код

program Project1;

uses
  Forms,
  windows,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}
  var h:cardinal;
begin
  h:=loadlibrary('CB_tab.dll');
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  freelibrary(h);
end.



Это сообщение отредактировал(а) Чучмек - 31.12.2011, 19:50

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  CB_tab.zip 23,22 Kb


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.