Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср май 24, 2017 2:42 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 98 сообщений ]  На страницу Пред. 1 2 3 4 5 6 7 След.
Автор Сообщение
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Пт янв 04, 2013 7:38 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4080
Нет, упрощает. Там 2 объекта "список". У них одинаковые свойства и методы - зачем мне дублировать код, если можно сделать универсально и притом всю работу со списком вынести в отдельный файл.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Пт янв 04, 2013 7:40 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4080
Неужели Си не поддержвает такой код?

Код:
struct llist
{
   int x,y,w,h,min_h;
   int line_h;
   int count,visible,first;
   int current;
   void SetSizes(int xx, yy, ww, hh, min_hh, line_hh);
   int MouseScroll(dword scroll_state);
};

void llist::SetSizes(int xx, yy, ww, hh, min_hh, line_hh)
{
   x = xx;
   y = yy;
   w = ww;
   h = hh;
   min_h = min_hh;
   line_h = line_hh;
}

int llist::MouseScroll(dword scroll_state)
{
   if (scroll_state == 65535)
   {
      if (first == 0) return 0;
      if (first > 3) first -= 2; else first=0;
      return 1;
   }
   if (scroll_state == 1)
   {
      if (visible+first+3 >= count) first = count - visible; else first+=2;
      return 1;
   }
   return 0;
}

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Пт янв 04, 2013 8:23 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1204
So, when will we see the first glimpse of this magnificient creature?

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Пт янв 04, 2013 8:58 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4080
When it will be done.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Сб янв 05, 2013 8:33 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Нет, не поддерживает. Структуры, содержащие функции, не допускаются, и этр, я считаю, правильно.


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Сб янв 05, 2013 9:36 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Структуры могут содержать указатели на функции. Такой первобытный ООП.


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Сб янв 05, 2013 2:23 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн июл 25, 2011 6:22 pm
Сообщения: 93
Поддерживает, но в структуре должен быть указатель (тип *) перед объявлением прототипа функции(процедуры).

_________________
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Сб янв 05, 2013 3:17 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Указатели - это указатели. А реально функции в структурах - это немного другое.


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Вс янв 06, 2013 1:45 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
SoUrcerer
Реализуется компилятором как же указатели.


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Вт янв 08, 2013 2:52 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4080
Столкнулся с проблемой создания динамических массивов и разработка остановилась.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Вт янв 08, 2013 3:01 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4080
Есть код, но он не работает как надо.
Код:
struct line_element
{
   char type;
   char header[256];
   int size;
}
dword db;

dword GetCurrentElement(int el_N)
{
   return sizeof(line_element)*el_N + #db;
}

void main()
{
   db = free(db);
   db = malloc( count * sizeof(line_element) );

   for (i=0; i < 10; i++)
   {
      EBX = GetCurrentElement(i);
      EBX.line_element.size = i; //мне кажется тут мы забиваем значение в переменную, а не "по адресу" в указателе
   }
   for (i=0; i < 10; i++)
   {
      EBX = GetCurrentElement(i);
      debugi(EBX.line_element.size); // вывод сплошные нули, а не 0 1 2 3 4...
   }
}

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Вт янв 08, 2013 5:27 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн июл 25, 2011 6:22 pm
Сообщения: 93
Leency писал(а):
Есть код, но он не работает как надо.
Код:
struct line_element
{
   char type;
   char header[256];
   int size;
}
dword db;

dword GetCurrentElement(int el_N)
{
   return sizeof(line_element)*el_N + #db;
}

void main()
{
   db = free(db);
   db = malloc( count * sizeof(line_element) );

   for (i=0; i < 10; i++)
   {
      EBX = GetCurrentElement(i);
      EBX.line_element.size = i; //мне кажется тут мы забиваем значение в переменную, а не "по адресу" в указателе
   }
   for (i=0; i < 10; i++)
   {
      EBX = GetCurrentElement(i);
      debugi(EBX.line_element.size); // вывод сплошные нули, а не 0 1 2 3 4...
   }
}

На чём писанно?

Если, даже
dword GetCurrentElement(int el_N) - возвращает элемент по номеру(в массиве), - то зачем нужно получать
в возврате размер данного элмента + адрес его (массива) базы (#db):
return sizeof(line_element)*el_N + #db;

Тебе нужен указатель на массив элементов - GetCurrentElement(line_element *el_N),
это во-первых, а во-вторых, - у тебя функция возвращает элементы {char type; char header[2]}, а не указатель на:
line_element *Имя_нечто[Некого_размера].
Если не запямятовал.

_________________
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Вт янв 08, 2013 6:13 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Вт янв 15, 2008 11:27 am
Сообщения: 750
Artyom писал(а):
то зачем нужно получатьв возврате размер данного элмента + адрес его (массива) базы (#db)

Нет, всё логично.
У меня (да и у компилятора) сомнения по поводу строк:
Код:
EBX.line_element.size = i;

и
Код:
debugi(EBX.line_element.size); 
.
В общем, после
Код:
   EBX = GetCurrentElement(i);

в EBX находится адрес нужной нам структуры. Не знаю, как в C--, а в C нужно было бы написать что-то вроде:
Код:
EBX->line_element.size = i;
.


Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Вт янв 08, 2013 6:25 pm 
Не в сети

Зарегистрирован: Вт окт 05, 2010 6:05 pm
Сообщения: 176
Слепил тест, при первом нажатии кнопки под KlbrInWin выдаёт:
Attempt to work with uninitialized heap!
при втором работает как предполагалось
с инициализацией heap разбираться лень


Вложения:
arr.zip [1.33 КБ]
93 скачивания
Вернуться к началу
 Заголовок сообщения: Re: Liza
СообщениеДобавлено: Ср янв 09, 2013 4:11 am 
Не в сети

Зарегистрирован: Вт окт 05, 2010 6:05 pm
Сообщения: 176
закомментировал
//db = free(db);
работает без сообщений


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 98 сообщений ]  На страницу Пред. 1 2 3 4 5 6 7 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB