![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ListBox с подсказкой
ТехникПТО © (2005-01-30 14:27:00)Нужно сделать подсказку в ListBox'е... т.е. при навидении какого либо элемента высвечивалась дополнительная информация...
скажем описание или коментарий.. в Memo
Diabolik (2005-02-01 05:09:00) [1]2ТехникПТО - как обещал даю код
// определяем тип TBSelected как record (запись)
type
TBSelected = record
Check : Boolean; // здесь информация по checkbox из ListView
Select1: String[50]; // Текст колонки №1
Select2: String[10]; // Текст колонки №2
Select3: String[255]; // Текст колонки №3
Select4: String[150]; // Текст колонки №4
end;
// количество колонок необходимых к записи и длинну можно указать свою
// объявляем переменные
var F: file of TBSelected;
ListItem: TListItem;
Records: array[0..20] of TBSelected; // количество записей в файле
BaseColumn: TListColumn;
// добавление колонок в ListView
procedure TSB.FormCreate(Sender: TObject);
var INI: TIniFile;
begin
INI := TIniFile.Create(ExtractFilePath(ParamStr(0))+'Base.ini');
BaseColumn := BaseList.Columns.Add;
BaseColumn.Caption := INI.ReadString('BaseListColumns','First','Имя файла');
BaseColumn.Width := INI.ReadInteger('BaseListColumns', 'First.width', 92);
BaseColumn := BaseList.Columns.Add;
BaseColumn.Caption := INI.ReadString('BaseListColumns','Second','Открывать при старте');
BaseColumn.Width := INI.ReadInteger('BaseListColumns', 'Second.width', 127);
BaseColumn.Alignment := taCenter;
BaseColumn := BaseList.Columns.Add;
BaseColumn.Caption := INI.ReadString('BaseListColumns','Therd','Описание');
INI.Free;
end;
// процедура чтения из файла
procedure TSB.LoadDBList(Sender: TObject);
var Rec: TBSelected;
begin
AssignFile(F, ExtractFilePath(ParamStr(0))+'BaseList.dat');
Reset(F);
try
while not Eof(f) do begin
Read(F, Rec);
with BaseList do begin
ListItem := Items.Add;
ListItem.Checked := Rec.Check;
ListItem.Caption := Rec.Select1;
ListItem.SubItems.Add(Rec.Select2);
ListItem.SubItems.Add(Rec.Select3);
ListItem.SubItems.Add(Rec.Select4);
end;
end;
finally
CloseFile(F);
end;
end;
// процедура записи в файл
procedure TSB.SaveDBList(Sender: TObject);
var I: Integer;
begin
AssignFile(F, ExtractFilePath(ParamStr(0))+'BaseList.dat');
Rewrite(F);
try
with BaseList do
for I:= 0 to Items.Count-1 do
begin
Records[I].Check := Items.Item[I].Checked;
Records[I].Select1 := Items.Item[I].Caption;
Records[I].Select2 := Items.Item[I].SubItems.Strings[0];
Records[I].Select3 := Items.Item[I].SubItems.Strings[1];
Records[I].Select4 := Items.Item[I].SubItems.Strings[2];
Write(F, Records[I]);
end;
finally
CloseFile(F);
end;
end;
// добавление записи из файла в listview
procedure TSB.FormActivate(Sender: TObject);
begin
BTAdd.Glyph.LoadFromFile(ExtractFilePath(ParamStr(0))+'images\button\sb - add.bmp');
BTDelete.Glyph.LoadFromFile(ExtractFilePath(ParamStr(0))+'images\button\sb - delete.bmp');
BTUp.Glyph.LoadFromFile(ExtractFilePath(ParamStr(0))+'images\button\sb - up.bmp');
BTDown.Glyph.LoadFromFile(ExtractFilePath(ParamStr(0))+'images\button\sb - down.bmp');
BTOk.Glyph.LoadFromFile(ExtractFilePath(ParamStr(0))+'images\button\sb - ok.bmp');
BTCancel.Glyph.LoadFromFile(ExtractFilePath(ParamStr(0))+'images\button\sb - cancel.bmp');
BTAdd.Margin := 10;
BTDelete.Margin := 10;
BTUp.Margin := 10;
BTDown.Margin := 10;
BTOk.Margin := 16;
BTCancel.Margin := 3;
LoadDBList(Self);
BaseList.SetFocus;
if BaseList.Items.Count <> 0
then begin
BaseList.Selected := BaseList.Items.Item[0];
BaseList.ItemFocused := BaseList.Selected;
BaseList.Selected.Selected := true;
end
else exit;
end;
// вывод данных из невидимой колонки в строку Edit
procedure TSB.BaseListSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
begin
If Selected
then EditPath.Text := BaseList.Selected.SubItems.Strings[2]
else EditPath.Text := '';
end;
Думаю смысл понятен??
ТехникПТО (2005-01-31 10:38:00) [2]
> А удалять за собой мусор...Не?
лениво :) хотя можно и подумать :) хм... элементарно :)
Neznaika (2005-01-31 10:29:00) [3]>>ТехникПТО © (31.01.05 08:50) [12]
>>но при изменении итема создаеться еще один текстовый фалй уже с новым именем а старый остаеться :( мусор :((
А удалять за собой мусор...Не?
ТехникПТО (2005-01-31 08:50:00) [4]
> Я то же делал что-то подобное. Только для этого использовал
> не ListBox а ListView. Все данные хранились в типизированном
> *.dat файле. Было три колонки и четвертая скрытая (не отображалась).
> При выборе какого либо пункта по ListView данные в Edit
> отображались из 4 колонки. Просто и со вкусом. Если нужно
> поищу исходный текст...
Поищи плиз.. это будет получше чем я сделал :)
Я просто создаю файл txt с именем Itema :) и соответсвенно при наведении загружаю этот файл... но при изменении итема создаеться еще один текстовый фалй уже с новым именем а старый остаеться :( мусор :((
diabolik (2005-01-31 07:33:00) [5]
> ТехникПТО © (30.01.05 14:27)
> Нужно сделать подсказку в ListBox'е... т.е. при навидении
> какого либо элемента высвечивалась дополнительная информация...
> скажем описание или коментарий.. в Memo
> Baddelay (31.01.05 02:15) [10]
> Когда-то я делал, что то подобное, весь текст у меня хранился
> в скрытом Мемо, и просто при выделении итема в Lb у меня
> считывало инфу с Мемо с таким же индексом, и вставляла его
> в Label(нужно WordWrap true). Только етот способ работает
> если в lb итемы неизменяются по ходу выполнения проги..
Я то же делал что-то подобное. Только для этого использовал не ListBox а ListView. Все данные хранились в типизированном *.dat файле. Было три колонки и четвертая скрытая (не отображалась). При выборе какого либо пункта по ListView данные в Edit отображались из 4 колонки. Просто и со вкусом. Если нужно поищу исходный текст...
Baddelay (2005-01-31 02:15:00) [6]Когда-то я делал, что то подобное, весь текст у меня хранился в скрытом Мемо, и просто при выделении итема в Lb у меня считывало инфу с Мемо с таким же индексом, и вставляла его в Label(нужно WordWrap true). Только етот способ работает если в lb итемы неизменяются по ходу выполнения проги..
SergP (2005-01-30 17:29:00) [7]
> [8] ТехникПТО © (30.01.05 17:06)
>
> > круто, где такой откопали?
>
> 1990 год :)
В [7] Antonn © (30.01.05 16:57) очевидно мелось ввиду "еще с 2 5 6 начинал"
ТехникПТО (2005-01-30 17:06:00) [8]
> круто, где такой откопали?
1990 год :)
Antonn (2005-01-30 16:57:00) [9]
> еще с 256 начинал
круто, где такой откопали?
ТехникПТО (2005-01-30 16:11:00) [10]сделал :-P
Neznaika (2005-01-30 15:15:00) [11]Не понял ... что хранить?
Тект мемо? - да хоть в *.тхт
Или я вообще не понял Ваш вопрос...?
ТехникПТО (2005-01-30 15:05:00) [12]
> procedure listbox1.Click(la la la );
> var i : integer;
> begin
> i:=-1;
> If listbox1.ItemIndex > -1 then begin
> i:=Listbox1.ItemIndex;
> case i of begin
> -1: memo1.text:='Выделите интересующий Вас элемент';
> 0: memo1.text:='Вы выбрали первую строку сверху';
> 2: и т.д.
> end;
>
> Это первое что пришло в голову... :)
Очень интерестно :) а как это все хранить?? :)
Neznaika (2005-01-30 15:04:00) [13]procedure listbox1.Click(la la la );
var i : integer;
begin
i:=-1;
If listbox1.ItemIndex > -1 then begin
i:=Listbox1.ItemIndex;
case i of begin
-1: memo1.text:='Выделите интересующий Вас элемент';
0: memo1.text:='Вы выбрали первую строку сверху';
2: и т.д.
end;
Это первое что пришло в голову... :)
ТехникПТО (2005-01-30 14:55:00) [14]
> Уважаемый ТехникПТО мне кажется что все вопросы возникающие
> у Вас по ходу написания программы Вы выкладыаете здесь...
> А как на счет самому подумать...?
Сорь если напрягаю... НО я еще навичок в этом деле и сейчас работаю над довольно объемным и сложным проектом...
Базовые знания у меня только Паскаль... компьютерного образования 0, конечно кроме многолетнего стажа работы с компами... еще с 256 начинал :) а мне всего то 20 лет :)
о системе и железе знаю довольно много... многое додумываю сам ментодом научного тыка (я про процесс написания)...
и в конце концов я задаю не такие уж и сложные вопросы :)
был я на многих форумах.. но остановился на этом.. мне понравился здесь народ... как он отвечает на вопросы... самое главное быстро и правильно :) респект вам всем :)
если бы я щас работал с базами данных.. я бы не задавал подобных вопросов, а сделал бы связанные таблици и не парился.. но БД мне здесь не нужно...
P.S. Если напрягаю то сорри!!
> По поводу вопроса: Приблизительно представляя высоту строки
> в Вашем Listbox-се и зная сколько пользователь может водить
> мышкой над ним в поиске нужной ему строки, думаю что постоянное
> мерцание подсказок в мемо как только проведешь мышкой на
> ListBoxom, будет как минимум раздражать, советую сделать
> активацию подсказки при выделении строки в ListBoxe. Это
> и проще и практичней...
вы не поняли... под ListBox'oм есть Memo...
при выделении какой либо строки в ListBox'e должен быть комент в этом самом мемо...
как это реализовать?? как связать какую то конкретную строку в ListBox'e с определенным значением в Memo???
Neznaika (2005-01-30 14:41:00) [15]Уважаемый ТехникПТО мне кажется что все вопросы возникающие у Вас по ходу написания программы Вы выкладыаете здесь... А как на счет самому подумать...?
По поводу вопроса: Приблизительно представляя высоту строки в Вашем Listbox-се и зная сколько пользователь может водить мышкой над ним в поиске нужной ему строки, думаю что постоянное мерцание подсказок в мемо как только проведешь мышкой на ListBoxom, будет как минимум раздражать, советую сделать активацию подсказки при выделении строки в ListBoxe. Это и проще и практичней...