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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2009, 18:16   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Восклицание Ошибки при переходе с ListBox на ListView

Начал переходить с ListBox на ListView и в этих местах возникли ошибки
Код:
s:='#P'+LVUsers.Items[LVUsers.ItemIndex]+(место ошибки)';'
[Error] Unit1.pas(722): Incompatible types: 'String' and 'TListItem'
Код:
if (Nickname=LVUsers.Items[LVUsers.ItemIndex])(место ошибки) then begin
[Error] Unit1.pas(746): Incompatible types: 'String' and 'TListItem'
Код:
MMessage.Text:=LVUsers.Items[LVUsers.ItemIndex]+' ';(место ошибки)
[Error] Unit1.pas(747): Incompatible types
Код:
if (Nickname=LVUsers.Items[LVUsers.ItemIndex])(место ошибки) then begin
[Error] Unit1.pas(758): Incompatible types: 'String' and 'TListItem'
Код:
MMessage.Text:=LVUsers.Items[LVUsers.ItemIndex]+' (private) ';(место ошибки)
[Error] Unit1.pas(761): Incompatible types: 'String' and 'TListItem'
Код:
LVUsers.Items.Add(Copy(место ошибки)(s,1,Pos(';',s)-1));
[Error] Unit1.pas(1957): Too many actual parameters
Код:
if inMas(LVUsers.Items[i])(место ошибки) or (pos('#U',LVUsers.Items[i])>0) then
[Error] Unit1.pas(1965): Incompatible types
Код:
temp[Length(temp)-1]:=LVUsers.Items[i];(место ошибки)
[Error] Unit1.pas(1973): Incompatible types: 'String' and 'TListItem'
Код:
N:=LVUsers.ItemAtPos(место ошибки)(Point(X, Y), true);
[Error] Unit1.pas(2219): Undeclared identifier: 'ItemAtPos'
Так как я малознаком с ListView исправить не могу. Помогите пожалуйста.

Последний раз редактировалось mihali4; 04.03.2009 в 00:49.
Shouldercannon вне форума Ответить с цитированием
Старый 03.03.2009, 18:36   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Ошибок конечно куча. Так исправлять ошибки неудобно. Выложите лучше исходничёк, что бы на месте всё можно было исправить.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 03.03.2009, 18:38   #3
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

По моему вы ошиблись в том, что действительно листбокс отличается тем, что там не только строки, а итемы у которых есть свойство Caption:
s:='#P'+LVUsers.Items[LVUsers.ItemIndex]+(место ошибки)';'
надо
LVUsers.Items[LVUsers.ItemIndex].Caption
Иногда полезно подержать после квадратных кавычек точку полсекуды...
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 03.03.2009, 19:06   #4
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Dj_smart спасибо огромнейшее. Теперь осталось только два места
Код:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var s, from_, to_: string;
i, count: Integer;
begin
{Присваиваем s полученную от сервера строку}
s:=Socket.ReceiveText;
{Если сервер посылает нам User List}
if Copy(s,1,2)='#U' then begin
Delete(s,1,2);
{Чистим LVUsers}
LVUsers.Items.Clear;
{Добавляем по одному юзеру в список. Имена юзеров разделены знаком ";"}
while Pos(';',s) > 0 do begin
LVUsers.Items.Add(Copy(место ошибки)(s,1,Pos(';',s)-1));
Delete(s,1,Pos(';',s));
[Error] Unit1.pas(1957): Too many actual parameters

Код:
procedure TForm1.LVUsersMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var N: Integer;
P: TPoint;
begin
N:=LVUsers.ItemAtPos(место ошибки)(Point(X, Y), true);
{Если курсор на одной из строк}
if N >=0 then begin
LVUsers.ItemIndex:=N;
{И ручной вызов меню}
P:=LVUsers.ClientToScreen(Point(X, Y));
PopUpMenu2.Popup(P.X, P.Y);
end;
end;
[Error] Unit1.pas(2219): Undeclared identifier: 'ItemAtPos'
Shouldercannon вне форума Ответить с цитированием
Старый 03.03.2009, 19:14   #5
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Код:
LVUsers.Items.Add(Copy(s,1,Pos(';',s)-1));
Неправильно формируете выражение
Код:
LVUsers.Items.Add.Caption:=Copy(s,1,Pos(';',s)-1);
Код:
N:=LVUsers.ItemAtPos(Point(X, Y), true);
надо
Код:
N:=LVUsers.GetItemAt(X,Y).Index; если не ошибаюсь
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 03.03.2009, 21:08   #6
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Спасибо работает. Только есть еще онда проблема в ListBox, когда шёлкнешь в пустом месте
Код:
procedure TForm1.LVUsersMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var N: Integer;
P: TPoint;
begin
N:=LVUsers.GetItemAt(X,Y).Index;
{Если курсор на одной из строк}
if N >=0 then begin
LVUsers.ItemIndex:=N;
{И ручной вызов меню}
P:=LVUsers.ClientToScreen(Point(X, Y));
PopUpMenu2.Popup(P.X, P.Y);
end;
end;
ничего не происходит, но с ListView вылетает ошибка
Access violation at address 00449E18 in module 'Project1.exe'. Read of address 00000004

Последний раз редактировалось Shouldercannon; 03.03.2009 в 22:19.
Shouldercannon вне форума Ответить с цитированием
Старый 04.03.2009, 00:52   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Добавьте первой строкой проверку
Код:
if LVUsers.GetItemAt(X,Y)<>nil then
mihali4 вне форума Ответить с цитированием
Старый 04.03.2009, 14:51   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Не получается пробовал ставить во всех местах и всеравно при шелке в пустом месте ListView вылетает ошибка.
Shouldercannon вне форума Ответить с цитированием
Старый 04.03.2009, 15:35   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А begin..end обрамление делали? Сомневаюсь (раз "во всех местах")
Тогда добавьте первыми строками
Код:
if LVUsers.GetItemAt(X,Y)=nil then
exit;
mihali4 вне форума Ответить с цитированием
Старый 04.03.2009, 16:18   #10
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Всё спс поставил в самое начало перед
Код:
N:=LVUsers.GetItemAt(X,Y).Index;
до этого я вставлял
Код:
if LVUsers.GetItemAt(X,Y)<>nil then begin
Exit;
end else
Shouldercannon вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отмена прокрутки при переходе от одного компонента к другому sim_84 Компоненты Delphi 1 03.02.2009 20:34
Точность при переходе от миллиметров к пунктам viter.alex Microsoft Office Word 2 03.02.2009 16:36
Какое событие происходит при переходе из оконного режима формы в полноэкраный (развернутый)? Luciferium Общие вопросы Delphi 9 09.03.2008 17:36
Refresh при переходе на страницу nikleb JavaScript, Ajax 8 20.12.2007 18:24
Обнуление значений $_SESSION[*] при переходе на некоторые страници kkkggg PHP 3 11.09.2007 23:09