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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2013, 14:05   #1
Lauri
Форумчанин
 
Регистрация: 01.04.2010
Сообщений: 171
По умолчанию Передача ListBox и Memo параметрами

Столкнулся с данной проблемой, пытаюсь перевести все функции из своей программы в отдельный юнит
Код:
procedure _FindFunctions(var CodeText: Tmemo;  AllList: tlistbox; NamesList: tlistbox);
var
  list: tstringlist;
  i: integer;
  Name: string;
  poss, cnt, jcnt: integer;
  str: string;
begin
  list := tstringlist.Create;
  //list.LoadFromFile(pchar(FileToProcess));
  List.text := CodeText.Text;
  NamesList.Clear;
  AllList.Clear;
  Alllist.Items.Add('Hello') ;
  for i := 0 to list.Count - 1 do
  begin
    if pos(pchar('function'), list.Strings[i]) <> 0 then
      if pos(pchar('external'), list.Strings[i]) = 0 then
        AllList.Items.Add(Copy(list.Strings[i], 0, Pos(pchar(';'), list.Strings[i]) - 1));
    if pos(pchar('Function'), list.Strings[i]) <> 0 then
      if pos(pchar('external'), list.Strings[i]) = 0 then
        AllList.Items.Add(Copy(list.Strings[i], 0, Pos(';', list.Strings[i]) - 1));
  end;
  for i := 0 to AllList.Items.count - 1 do
  begin
    if pos('(', AllList.Items[i]) <> 0 then
      NamesList.Items.Add(Copy(AllList.Items[i], Pos('n ', AllList.Items[i]) + 1, Pos('(', AllList.Items[i]) - Pos('n ', AllList.Items[i]) - 1))
    else
      NamesList.Items.Add(Copy(AllList.Items[i], Pos('n ', AllList.Items[i]) + 1, Pos(':', AllList.Items[i]) - Pos('n ', AllList.Items[i]) - 1));
  end;
  try
    cnt := 0;
    repeat //удаление дублей
      jcnt := NamesList.Items.Count - 1;
      repeat
        if (NamesList.Items[jcnt] = NamesList.Items[cnt]) and
          (jcnt <> cnt)
          then NamesList.Items.Delete(jcnt);
        Dec(jcnt)
      until jcnt <= cnt;
      Inc(cnt)
    until cnt > NamesList.Items.Count - 1;
  except
  end;
  List.Free;
end;
Вызов
Код:
_FindFunctions(Form1.Memo1,Form1.listbox2,Form1.listbox1);
Компилируется нормально но при добавлении строки сразу же ошибка памяти.
Lauri вне форума Ответить с цитированием
Старый 09.02.2013, 14:58   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

а почему передается как var?
Человек_Борща вне форума Ответить с цитированием
Старый 09.02.2013, 15:00   #3
Lauri
Форумчанин
 
Регистрация: 01.04.2010
Сообщений: 171
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
а почему передается как var?
Ну содержимое же должно менятся.
Я Var убирал, всё равно ошибка

Никто не подскажет?

Последний раз редактировалось Stilet; 11.02.2013 в 14:59.
Lauri вне форума Ответить с цитированием
Старый 10.02.2013, 13:54   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Текст ошибки и на какой строке в студию. Предположительно ошибка в блоке удаления дублей. var для CodeText 100 лет не надо
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.02.2013, 14:00   #5
Lauri
Форумчанин
 
Регистрация: 01.04.2010
Сообщений: 171
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Текст ошибки и на какой строке в студию. Предположительно ошибка в блоке удаления дублей. var для CodeText 100 лет не надо
Сразу при добавлении строки
Код:
Alllist.Items.Add('Hello') ;
Пробовал разные варианты, что то не получается. Решение простое должно быть, 100%

Последний раз редактировалось Stilet; 11.02.2013 в 14:58.
Lauri вне форума Ответить с цитированием
Старый 11.02.2013, 14:29   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Текст ошибки ... в студию
при появлении окошка с ошибкой Ctrl+C
здесь Ctrl+V

Последний раз редактировалось Sibedir; 11.02.2013 в 14:33.
Sibedir вне форума Ответить с цитированием
Старый 11.02.2013, 14:52   #7
Lauri
Форумчанин
 
Регистрация: 01.04.2010
Сообщений: 171
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
при появлении окошка с ошибкой Ctrl+C
здесь Ctrl+V
Lauri вне форума Ответить с цитированием
Старый 11.02.2013, 15:00   #8
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

А объект создается?
superedward вне форума Ответить с цитированием
Старый 11.02.2013, 15:06   #9
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Это был PrtScn, а не Ctrl+C. Ну да бог с ним.
------------------------------------------------------------------------------------------------------------
А это точно на
Код:
 Alllist.Items.Add('Hello') ;
которая идет после
Код:
 AllList.Clear;
Если да, то, боюсь, придется глядеть весь код.
Sibedir вне форума Ответить с цитированием
Старый 11.02.2013, 15:13   #10
Lauri
Форумчанин
 
Регистрация: 01.04.2010
Сообщений: 171
По умолчанию

Цитата:
А объект создается?
Он уже есть готовый на форме, я его подставил в процедуру просто.

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Это был PrtScn, а не Ctrl+C. Ну да бог с ним.
------------------------------------------------------------------------------------------------------------
А это точно на
Код:
 Alllist.Items.Add('Hello') ;
которая идет после
Код:
 AllList.Clear;
Если да, то, боюсь, придется глядеть весь код.
Перепроверил
Убрал всё оставил только
Код:
list := tstringlist.Create;
  //list.LoadFromFile(pchar(FileToProcess));
  List.text := CodeText.Text;
  NamesList.Clear;
  AllList.Clear;
 Alllist.Items.Add('Hello') ;
И строка была успешно добавлена. Странно.

Значит ошибка тут, но когда в коде были статические Листбокс1 и 2 то всё работало нормально, а как перевёл в юнит с динамическими - проблемы
Код:
begin
    if pos(pchar('function'), list.Strings[i]) <> 0 then
      if pos(pchar('external'), list.Strings[i]) = 0 then
        AllList.Items.Add(Copy(list.Strings[i], 0, Pos(pchar(';'), list.Strings[i]) - 1));
    if pos(pchar('Function'), list.Strings[i]) <> 0 then
      if pos(pchar('external'), list.Strings[i]) = 0 then
        AllList.Items.Add(Copy(list.Strings[i], 0, Pos(';', list.Strings[i]) - 1));
  end;
Lauri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi передача текста из memo в memo hauk70 Помощь студентам 27 22.05.2012 18:33
Список строк из DBLookupComboBox в Memo/ListBox Dj_SheLL БД в Delphi 1 20.11.2010 21:12
ListBox, memo и кнопка T@tali БД в Delphi 3 17.06.2010 16:34
ListBox - передача в список файлов. Kocapb C++ Builder 7 14.05.2010 19:28
Memo и ListBox coder_noob Общие вопросы Delphi 6 18.09.2009 12:46