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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2016, 17:05   #1
RU_KIT
Пользователь
 
Регистрация: 12.02.2016
Сообщений: 11
По умолчанию Помогите с кодом

Помогите разобраться с сортировкой, из листвью1 - добавить людей в листвью2 в строку такого вида 1Имя Фамилия 2Имя Фамилия Бригада1
То есть из выбранных людей собрать бригады скрин...12.jpg
и сам исходник Новая папка.rar помогите подправить что то я не то с листвьюшками делаю

вот как сейчас
Код:
var
i : integer;
L : TListItem;
begin

for i:=0 to ListView1.Items.Count-1 do
 if (ListView1.Items[i].Checked) then
 begin
   L:= ListView2.Items.Add;
   L.Caption:= ListView1.Selected.Caption+' '+ListView1.Selected.SubItems[0];           //Имя
   L.SubItems.Add(ListView1.Items[i].Caption+' '+ListView1.Items[i].SubItems[0]);       //Фам
end;
    end;

Последний раз редактировалось Аватар; 13.02.2016 в 19:31. Причина: не полный вопрос
RU_KIT вне форума Ответить с цитированием
Старый 13.02.2016, 19:06   #2
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

Похоже, Вы не с ListView разобраться не можете, а с циклами. У Вас разные рабочие попадают в разные ветки цикла, и для каждого цикл создаёт новый Item, когда нужно создавать один Item на пару рабочих, если я верно понял идею. Проверяйте содержимое второго листа в цикле, чтоб понять, куда заносить данные.
P.S. "рабочий", а не "рбочий".
ListView1.Items[i].Checked// "чекнутый" айтем
ListView1.Selected// выделенный айтем. Зачем Вам выделенный, если вы работаете с "чекнутыми"?

Последний раз редактировалось vlad1389; 13.02.2016 в 19:09.
vlad1389 вне форума Ответить с цитированием
Старый 13.02.2016, 19:11   #3
RU_KIT
Пользователь
 
Регистрация: 12.02.2016
Сообщений: 11
По умолчанию

Я пробовал по разному просто с листвью впервые сталкиваюсь. Просто очень нужно и за ошибку "рбочий" отдельно извиняюсь. Вы думаете мне нужно создать несколько циклов. Покажите как прошу 2й день ломаю голову
RU_KIT вне форума Ответить с цитированием
Старый 13.02.2016, 19:16   #4
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

Нет. Несколько циклов создавать не нужно. Одного достаточно. для начала вынесите
Код:
L:= ListView2.Items.Add;
За тело цикла, так как этот код нужно выполнять единожды для вашего случая. Дальше посмотрите что получится, и попробуйте дописать самостоятельно.

Показывать готовое не просите. Иначе в Вашей голове ничего не отложится, и смысл от помощи будет нулевым. Подсказать могу. Спрашивайте.
vlad1389 вне форума Ответить с цитированием
Старый 13.02.2016, 19:31   #5
RU_KIT
Пользователь
 
Регистрация: 12.02.2016
Сообщений: 11
По умолчанию

Код:
if ListView1.Selected.Caption = '' then exit else
  N:= Copy(ListView1.Selected.Caption, 1, length(ListView1.Selected.Caption));
  F:= Copy(ListView1.Selected.SubItems[0], 1, length(ListView1.Selected.SubItems[0]));
  result:= N +' '+F ;  // имя фамилия
  begin
      L:= ListView2.Items.Add;
      L.Caption:= result;
      L.SubItems.Add(''); // 2 колонка
      L.SubItems.Add('Бригада'{+IntToStr(x)}); // 3 колонка пока не использую
вот так сделал но так получаю Имя+Фамилия в 1ю колонку ListView2 а в SubItems не могу сделать тоже самое так как будет копироваться то что в первой колонке ListView2. Можно сделать и по другому, просто я не знаю всех тонкостей ListView

я первоначально хотел сделать с drag&drop но не знаю как поместить в нужную колонку и ячейку от LV
RU_KIT вне форума Ответить с цитированием
Старый 13.02.2016, 19:54   #6
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

А зачем циклы убрали? Вы должны в цикле пройтись по всем айтемам первого листа. Если айтем чекнут создаёте во втором листе новый айтем
Код:
L:= ListView2.Items.Add;
Но создавая, проверяйте, не создали ли вы его в предыдущем витке цикла
Код:
if L = nil// если L не создан
Таким образом вы исключите создание лишних айтемов. Кроме того, проверяя айтем на NIL если айтем уже создан
Код:
if L <> nil
значит в предыдущем витке цикла вы его создали, и по логике положили в caption первого рабочего. Соответственно это уже второй рабочий, и кладём его в субайтем. Итого
Код:
if L = nil then
  begin 
    Это первый рабочий. Создаём айтем, и кладём в caption данные
  end else
  begin
   Это второй рабочий. Айтем уже создали для первого рабочего. Заполняем субайтем уже созданного L
  end;
Ваш первый код частично верен. Нужно доработать его условиями, чтоб исключить ненужные дубли кода внутри цикла.
Да, и зачем вы используете Selected? Вы работаете с чекнутыми строками, а не с выделенными.

Последний раз редактировалось vlad1389; 13.02.2016 в 20:03.
vlad1389 вне форума Ответить с цитированием
Старый 13.02.2016, 22:10   #7
RU_KIT
Пользователь
 
Регистрация: 12.02.2016
Сообщений: 11
По умолчанию

Да исключение помогло vlad1389 спасибо большое..
вот рабочий пример
Код:
var
L : TListItem;
i :integer;
n,f : String;
result :string;
begin

 for I:= 0 to ListView1.Items.Count-1 do
   if (ListView1.Items[i].Checked)= true then

   begin
   N:= ListView1.Items.Item[I].Caption;
   F:= ListView1.Items.Item[I].SubItems.Strings[0];

   Result:= N +' '+F ;  

if L = nil then
  begin
  L:= ListView2.Items.Add;
  L.Caption:= Result; 
  end else
  begin
   L.SubItems.Add(Result);
  end;
      end;
        end;

Последний раз редактировалось Аватар; 13.02.2016 в 23:06.
RU_KIT вне форума Ответить с цитированием
Старый 14.02.2016, 08:08   #8
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

Если не хотите использовать длинные конструкции в коде, то не обязательно создавать множество промежуточных переменных. Можно поступить так.
Код:
with ListView1.Items[I] do
  begin
    result := Caption + SubItems[0];
  end;
или
Код:
with ListView1.Items[I] do
  result := Caption + SubItems[0];
Итого минус две переменные, а код стал ещё стройнее.
vlad1389 вне форума Ответить с цитированием
Старый 14.02.2016, 16:06   #9
RU_KIT
Пользователь
 
Регистрация: 12.02.2016
Сообщений: 11
По умолчанию

Да очень даже стройный, но все равно пробелы ставить. Еще раз спасибо большое!
RU_KIT вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с кодом. nover Помощь студентам 2 27.06.2014 13:26
Помогите с кодом MangoDGJ Общие вопросы C/C++ 6 03.12.2013 05:42
Помогите с кодом lewka-serdceed Общие вопросы Delphi 1 22.06.2009 00:25
Помогите с кодом DM_bite Помощь студентам 12 02.08.2008 11:40
Помогите с кодом prostoCHEL Общие вопросы Delphi 4 02.03.2008 21:56