Полезные функции : Эльфостроение : Форум

Страница 1 из 2: [1] 2 »

 arban:
22.02.10, 14:05
 Делимся самописными функциями, не обязательно своими (указываем автора или эльф, откуда взята функа), главное проверенными и 100% рабочими.

 arban:
22.02.10, 14:15
 Начну, пожалуй:

Простейшая функция, которая обновляет бук:

Код:
void BookObj_Refresh(BOOK * book)
{
  BookObj_Hide(book,0);
  BookObj_Show(book,0);
}


Использовать, если хотите обновить GUI в данной книге, например, при смене стиля

 Slawwan:
22.02.10, 14:30
 склеивает путь и имя папки/файла
из L"/path" L"name" сделает L"/path/name"
Код: 
wchar_t * CreateFullName(wchar_t * path, wchar_t * name)
{
  int len = wstrlen(path)+wstrlen(name)+1;
  wchar_t * fullname = new wchar_t[len+1];
  wstrcpy(fullname, path);
  wstrcat(fullname, L"/");
  wstrcat(fullname, name);
  return fullname;
}


возвращает путь относительно папки пользователя
Код: 
wchar_t * GetRelativePath(wchar_t * dir)
{
  wchar_t * res = 0;
  wchar_t * dir_user = GetDir(DIR_USER|MEM_INTERNAL);
  int len = wstrlen(dir_user);
  if (!wstrcmpni(dir_user, dir, len))
  {
    dir += len;
    res = new wchar_t[wstrlen(dir)+1];
    return wstrcpy(res, dir);
  }
  dir_user = GetDir(DIR_USER|MEM_EXTERNAL);
  len = wstrlen(dir_user);
  if (!wstrcmpni(dir_user, dir, len))
  {
    dir += len;
    res = new wchar_t[wstrlen(dir)+1];
    return wstrcpy(res, dir);
  }
  res = new wchar_t[wstrlen(dir)+1];
  return wstrcpy(res, dir);
}


обе функции под результат выделяется место в памяти, так что не забываем потом почистить если что..

 DuXeN0N:
05.06.10, 18:09
 Функция преобразует строку char в int

Код: 
int Str2Int(char* str)
{
    int len = strlen(str);
    wchar_t* wstr = new wchar_t[len + 1];
    str2wstr(wstr, str);
    int Ret;
    wtoi(wstr, len, &Ret);
    delete(wstr);
    return Ret;
}


может как-то можно еще но мне известен только этот способ.

Или wchar_t в int

Код:
int Str2Int(wchar_t* str)
{
    int Ret;
    wtoi(str, wstrlen(str), &Ret);
    return Ret;
}


 Joker XT:
05.06.10, 18:11
 а чем просто wtoi(str, wstrlen(str), &Ret); не устраивает?))

 Amir_82111:
05.06.10, 18:45
 
arban пишет:
Начну, пожалуй:

Простейшая функция, которая обновляет бук:

Код:
void BookObj_Refresh(BOOK * book)
{
  BookObj_Hide(book,0);
  BookObj_Show(book,0);
}


Использовать, если хотите обновить GUI в данной книге, например, при смене стиля


Are u sure?
this metod don't refresh book or pages.
in main books and page use different metod for refresh.
for example for refresh page must save Gui in buffer and in refresh use goto page functions and if this page exist already then close this Gui and creat Gui again.
refresh book in Filemanager and some books is very easy with :

Код:

int event = 0x13EC
int BookID = BookObj_GetBookID( BOOK* book )
void UI_Event_toBookID( int event, int BookID )

but this Event must description in book and pages already






[ Редактировано Amir_82111 в 5.6.10 19:53 ]

 Joker XT:
05.06.10, 19:40
 Amir_82111, I agree =)
So it will be correct

 DuXeN0N:
05.06.10, 19:43
 Joker XT, ты про первый случай?
ну потому что первый аргумент - const wchar_t

также еще можно написать:

extern "C" int atoi(const char* str);

и вместо функции Str2Int(char* str) можно использовать
int I = atoi(str)

 DuXeN0N:
06.09.10, 20:08
 Че то никто особо не делится чем нибудь полезным))
Оптимизируя эльф написал одну полезную процедуру. Она освобождает пункты в листе и убивает сам LIST. Особенно удобно когда много листов и освобождение их происходит в 1 строку кода)

Код: 
int ItemFilter(void *Item)
{
    return(Item != NULL);
};

void FreeList(LIST* &List, void (* FreeProc)(void *Item))
{
    if (List)
    {
        List_DestroyElements(List, ItemFilter, FreeProc);
        List_Destroy(List);
        List = NULL;
    }
};

Это сама процедура. Первый аргумент это собственно указатель на освобождаемый LIST, а второй аргумент это указатель на процедуру освобождения пунктов в листе.

А вот пример как ей пользоваться:

Код: 
void ItemFree(void *Item)
{
    ITEM *it = (ITEM *)Item;
    if (it->Str1)
        mfree(it->Str1);
    // ну тут понятно, освобождение всего и вся =)
};

void OnCloseBook(BOOK *Book)
{
   ...
   FreeList(myList, ItemFree);
   ...
};


Все просто. Но когда LIST-ов несколько это удобно (опять же кому как =)) и упрощает код

 den_po:
07.09.10, 00:45
 List = 0;

толку от этой строки ноль. сделай чтоль хотя бы List ссылкой
Страница 1 из 2: [1] 2 »

URL этой темы:
https://mobilefree.justdanpo.ru/newbb_plus/viewtopic.php?topic_id=4672

© 2005-2018 supertrubka.org