Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.68
NIKO666
11 / 11 / 2
Регистрация: 22.10.2010
Сообщений: 134
#1

ListView. Вопрос по фокусу - C++ Builder

02.06.2011, 00:18. Просмотров 3458. Ответов 27
Метки нет (Все метки)

Народ. У меня на форме есть компонент ListView. В нем, естественно, есть какие-то строки. Так вот, как узнать, выбрано ли что-то в ListView или фокус стоит на каком-то другом объекте? Может есть событие какое? Или только через таймер можно определить?
http://www.cyberforum.ru/cpp-builder/thread343455.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2011, 00:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос ListView. Вопрос по фокусу (C++ Builder):

Выполнить запрос к БД при нажатии на элемент в ListView и заполнить данными другой ListView
Подскажите пожалуйста как сделать в RadStudio, что бы при нажатии на одну...

ListView вопрос
Здрасьте еще раз) Вот делаю пошаговое представление сортировки, решил цифры...

Вопрос по listview
Всем привет. Извините за схожесть существующих тем, но возник такой вопрос....

Вопрос по ToolTipText в ListView
Привет всем. В ListView имеется 4 столбца. Данные в ListView вношу...

Переход по фокусу с помощью Enter
Как заставить ходить по полям формы нажимая enter, но чтобы фокус переходил как...

27
QVO
644 / 455 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
Завершенные тесты: 3
02.06.2011, 00:54 #2
С подобным вопрос обращался к преподавателю, на что он просто развел руки...
Все есть при желание
Держи:
Текст первого столбца:
C++
1
ListView1->ItemFocused->Caption
Удаление выбранной строки:
C++
1
ListView1->ItemFocused->Delete()
Дальше сам про парси.
0
LK
Заблокирован
02.06.2011, 01:02 #3
а там ничего нет наподобие
C++
1
2
3
4
5
if (ListView->Items[i]->Selected=true) {...}
// или
if (ListView1->Items[i]->Focused=true) {}
// или просто
if (ListView1->Focused=true) {}
?


http://www.cyberforum.ru/cpp-builder/thread224010.html
ListView.SelectedItems Property
2
NIKO666
11 / 11 / 2
Регистрация: 22.10.2010
Сообщений: 134
02.06.2011, 01:02  [ТС] #4
Как удалить или получить имя выделенного элемента списка, я знаю. Попробую подробнее рассказать про проблему. Просто фокус с элементов ListViewa может пропадать, когда открывается другая форма, или когда переходит фокус на другой элемент формы. А мне нужно скрывать некоторые кнопки, если в списке ничего не выбрано. Вот я и не пойму, как можно это определить

Все. Вроде как разобрался.
Цитата Сообщение от LK Посмотреть сообщение
if (ListView1->Focused=true) {}
Определяет, есть фокус или нет)) Пропишу процедуру и буду к ней обращаться, когда надо)) Спасибо, LK
0
NIKO666
11 / 11 / 2
Регистрация: 22.10.2010
Сообщений: 134
02.06.2011, 01:55  [ТС] #5
Решил не создавать еще одну тему, а написать следующий вопрос здесь же.
Пытаюсь получить полный путь в TreeView от дочерних узлов к первому. прописал вот такой код:
C++
1
2
3
4
5
6
7
TTreeNode nd=MainForm->TreePrj->Selected;
AnsiString patch;
while (nd!=NULL)
{
  patch=patch+"//"+AnsiString(nd.Text);
  nd=nd.Parent;
}
Компилятор выдает ошибку на первой же строке. Говорит, cannot convert TTreeNode to TTreeNode. Вроде все правильно прописал, по идее. Подскажите, что не так тут?
0
LK
Заблокирован
02.06.2011, 02:14 #6
я не совсем понял шутку юмора, но код вызывает смутныя самнения
C++
1
2
3
4
5
TTreeNode *nd = new TTreeNode();
nd = MainForm->TreePrj->Selected;
...
delete nd;
nd = NULL;
и поскольку TreeNode к ListView имеет косвенное отношение, было логично поместить вопрос в новую тему .
2
NIKO666
11 / 11 / 2
Регистрация: 22.10.2010
Сообщений: 134
02.06.2011, 02:26  [ТС] #7
Разобрался, пока ждал ответа)) Давно просто не программировал, забыл все)) Буду создавать новые темы))
1
LK
Заблокирован
02.06.2011, 02:28 #8
и что оно хотело ?
0
NIKO666
11 / 11 / 2
Регистрация: 22.10.2010
Сообщений: 134
02.06.2011, 02:34  [ТС] #9
Звездочку забыл. Потом подумал, и поставил.
C++
1
2
3
4
5
6
7
TTreeNode *nd=MainForm->TreePrj->Selected;
AnsiString patch;
while (nd->Parent!=NULL)
{
  patch=AnsiString(nd->Text)+"//"+patch;
  nd=nd->Parent;
}
Выбираю без первого элемента, так как первый всегда одинаков)))

Путь для создания новой папки нужен был)))
0
LK
Заблокирован
02.06.2011, 03:31 #10
C++
1
patch=AnsiString(nd->Text)+"//"+patch;
или
C++
1
patch=AnsiString(nd->Text)+"\\"+patch;
иль путь у веб ?
а также patch иль path, что, в принципе, не суть ...
0
NIKO666
11 / 11 / 2
Регистрация: 22.10.2010
Сообщений: 134
02.06.2011, 04:49  [ТС] #11
Да вроде и так работает. А Patch назвал, просто подумал, может конфликтовать будет
0
gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
15.10.2011, 20:44 #12
Привет всем, я хочу задать вопрос по поводу этого компонента!

Добавлено через 2 минуты
Каким образом можно прочесть и сохранить содержимое в TListView?

Добавлено через 6 минут
Я как бы попробовал сохранить содержимое вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    TxBuf->Clear();
    TxBuf->Add("№ Назва Шифр");
    AnsiString s=" ", s1;
    int col = ListView2->Items->Count;
    for(int i = 0; i<col; i++)
    {
        s1 = ListView2 -> Items -> Item[i] -> Caption + " ";
        for(int j = 0; j < 2; j++)
            s = s + ListView2 -> Items -> Item[i] ->SubItems->operator [](j) + " ";
        TxBuf->Add(s1+s);
    }
    TxBuf->SaveToFile("report.txt");
Добавлено через 46 секунд
А вот как прочесть по табуляции не могу понять!
0
LK
Заблокирован
15.10.2011, 21:00 #13
C++
1
2
3
4
5
6
7
8
TStringList *list = new TStringList;
for (int i=0;i=ListView->Count-1;i++) { 
  list->Add("\" "+
            ListView.Items[i].Caption+
            "\" ,"+
            ListView->Items[i]->SubItems.CommaText);
}
list->SaveToFile(from_listview.txt);
не проверял.
0
gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
15.10.2011, 21:19 #14
LK, Сохранение работает а вот чтение как реализовать?
0
LK
Заблокирован
15.10.2011, 21:51 #15
а вы его перед сохранением разве не читаете ? или что имеется ввиду ?
0
gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
15.10.2011, 22:15 #16
Мне нужно считать с файла в какой я сохранил!

Добавлено через 2 минуты
Этот код для сохранения
C++
1
2
3
4
5
6
7
8
9
10
11
12
        TxBuf->Clear();
        TxBuf->Add("№ Назва Шифр");
        AnsiString s=" ", s1;
        int col = ListView2->Items->Count;
        for(int i = 0; i<col; i++)
        {
                s1 = ListView2 -> Items -> Item[i] -> Caption + " ";
                for(int j = 0; j < 2; j++)
                        s = s + ListView2 -> Items -> Item[i] ->SubItems->operator [](j) + " ";
                TxBuf->Add(s1+s);
        }
        TxBuf->SaveToFile("report.txt");
А тепер вот это что я сохранил report.txt, с его нужно считать (открить) изагрузить обратно в ListView
0
LK
Заблокирован
15.10.2011, 23:57 #17
разделитель у вас в файле что ? считывайте по расделителю в СтрингЛист, по умолчанию для стринглиста это запятая, заполняете:
Свойство CommaText

Получает или устанавливает список в виде большой строки. Эта строка будет иметь список строк разделенных запятыми. Это полезно для загрузки из экспорта текстовой электронной таблицы. Если при получении строка содержит вложенные пространства, то она будет заключена в двойные кавычки.

Cвойство DelimitedText

Получает или устанавливает список через большую строку. Эта строка содержит список строк разделенных значением Delimiter (по умолчанию - запятая). Строки, содержащие вложенные пробелы должны быть заключены в QuoteChar (по умолчанию - ").
, т.е., как записывали, так и читаете.
0
gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
16.10.2011, 00:40 #18
LK, Можно пример чтения и сохранения
вот я сделал сохранение:
C++
1
2
3
4
5
6
7
8
    TxBuf->Clear();
    int col = ListView2->Items->Count;
    for (int i=0;i<col;i++)
    {
        TxBuf -> Add("\" " + ListView2 -> Items -> Item[i] -> Caption
        +"\" ,"+ ListView2 -> Items -> Item[i] -> SubItems -> CommaText);
    }
    TxBuf->SaveToFile("report.txt");
Добавлено через 15 секунд
А как будет Чтение?
0
LK
Заблокирован
16.10.2011, 00:49 #19
вот такой пример был в запасниках
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//---------------------------------------------------------------------------
#include <iostream>
#include <fstream>
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnSaveClick(TObject *Sender)
{
  std::ofstream out("scan.txt",std::ios_base::out|std::ios_base::trunc);
  for(size_t i=0;i<(size_t)LVScan->Items->Count;++i){
    if(i) out<<std::endl;
    out<<"\""<<LVScan->Items->Item[i]->Caption.c_str()<<"\""<<std::endl;
    for(size_t j=0;j<(size_t)LVScan->Items->Item[i]->SubItems->Count;++j)
      out<<"\""<<LVScan->Items->Item[i]->SubItems->Strings[j].c_str()<<"\""<<std::endl;
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnOpenClick(TObject *Sender)
{
  LVScan->Items->Clear();
  std::ifstream in("scan.txt");
  std::string x;
  TListItem * item=0;
  bool flag=false;
  while(!std::getline(in,x).fail()){
    if(!x.size()) {item=0;flag=false;continue;}
    if(x.size()&&'"'==x[x.size()-1]) x.resize(x.size()-1);
    if(x.size()&&'"'==x[0]) x.erase(0,1);
    if(!item) item=LVScan->Items->Add();
    if(!flag){ item->Caption=x.c_str(); flag=true; }
    else item->SubItems->Add(x.c_str());
  }
}
//-------------------------------------------------------------------------
0
gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
16.10.2011, 01:09 #20
LK, в этой строке while(!std::getline(in,x).fail()){
ошыбка
[BCC32 Error] Unit1.cpp(143): E2316 'getline' is not a member of 'std'
Full parser context
Unit1.cpp(137): parsing: void _fastcall TForm1::Button3Click(TObject *)
0
16.10.2011, 01:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2011, 01:09
Привет! Вот еще темы с решениями:

Вопрос про ListView and Checkbox
у мя есть база, которая отображаеться через Листвью, как мне зделать что бы...

Запретить фокусу произвольно переходить на другие поля
Здравствуйте! В приложении БД. Задумка в том, чтобы при получении полями...

ComboBox раскрытие списка по клику и фокусу. Странное поведение
C++ Builder 5, форма заведения данных - пользователь выбирает данные в...

ListView. После добавления кнопки перестал быть доступен сам ListView
Кастомизировал ListView с помощью нескольких TextView. Но после того, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru