Re: Liza
Posted: Fri Jan 04, 2013 7:38 pm
Нет, упрощает. Там 2 объекта "список". У них одинаковые свойства и методы - зачем мне дублировать код, если можно сделать универсально и притом всю работу со списком вынести в отдельный файл.
Code: Select all
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;
}
Code: Select all
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...
}
}
На чём писанно?Leency wrote:Есть код, но он не работает как надо.Code: Select all
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... } }
Нет, всё логично.Artyom wrote:то зачем нужно получатьв возврате размер данного элмента + адрес его (массива) базы (#db)
Code: Select all
EBX.line_element.size = i;
Code: Select all
debugi(EBX.line_element.size);
Code: Select all
EBX = GetCurrentElement(i);
Code: Select all
EBX->line_element.size = i;