|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.11.2011, 22:04 | #1 |
Новичок
Джуниор
Регистрация: 03.11.2011
Сообщений: 1
|
обращениe к члену связного списка
Стоит задача обращения к члену связного списка(того списка что выводится на экран файлового менеджера),затем с этим членом св.списка(это имя файла,папки-длинное имя-) производится
такая операция-он указывается как член другого связного списка(по строке) чтобы вывести целиком длинное имя и посчитать символы если=250 то вывести имено эти имена(максимальной длинны) Для начала приведу две независимые функции №1 //выводит список файлов на panel с указателя Ptr //в направлении Directly (0-вниз, 1-вверх) //если выводится на экран новая директория, передается флаг FlagFirst void DrawList(int panel, ListNode far *Ptr, int Directly, int FlagFirst) { int kol=0, x, y, flag=1, can; char s[37]; if (panel==LEFT) x=12; else x=331; if (Directly==DOWN) y=30; else y=282; setcolor(LIGHTGREEN); NewPtr=Ptr; while (NewPtr != NULL && kol<19) { if (NewPtr->attrib != 0x0F) //здесь ставлю == { if (CAN(NewPtr)) { if (FlagFirst && flag) if (panel==LEFT) {CurPtrL=NewPtr; flag=0;} else {CurPtrR=NewPtr; flag=0;} movedata(FP_SEG(NewPtr->Data), FP_OFF(NewPtr->Data), FP_SEG(s), FP_OFF(s), 37); outtextxy(x,y,s); if (Directly) y-=14; else y+=14; kol++; } } if (Directly) NewPtr = NewPtr->PrevPtr; else NewPtr = NewPtr->NextPtr; } } после замены в строке 14 != на == ф.DrawList выводит на панель чтото вроде Мои документы Program Files sistema_siste ma_sistema_ sistema_siste ma короче фигачит длинные имена по 13 симв построчно(там задано при обработке длинных имен) вот функция №2 void ShowLongName() { char s[37]="", rez[100]=""; NewPtr=CurPtr->PrevPtr; while (NewPtr->attrib==0x0F) { movedata(FP_SEG(NewPtr->Data), FP_OFF(NewPtr->Data), FP_SEG(s), FP_OFF(s), 37); strcat(rez,s); NewPtr=NewPtr->PrevPtr; } setfillstyle(SOLID_FILL, FON); bar(110,319,632,329); setcolor(LIGHTCYAN); if (strlen(rez)>65) rez[68]=0x0; outtextxy(112,321,rez); } эта функция при наведении строчного курсора в определенном месте показывает длинное имя целиком sistema_sistema_sistema_sistema_sis tema я такую создал функцию void DrawList2(int panel, ListNode far *Ptr, int Directly, int FlagFirst) { int kol=0, x, y, flag=1, can; char s[37]="", rez[255]=""; if (panel==LEFT) x=12; else x=331; if (Directly==DOWN) y=30; else y=282; setcolor(LIGHTGREEN); NewPtr=Ptr; while (NewPtr != NULL && kol<19) { if (CAN(NewPtr)) { if (NewPtr->attrib == 0x0F) { if (FlagFirst && flag) if (panel==LEFT) {CurPtrL=NewPtr; flag=0;} else {CurPtrR=NewPtr; flag=0;} NewPtr=CurPtr->PrevPtr; while (NewPtr->attrib==0x0F) { movedata(FP_SEG(NewPtr->Data), FP_OFF(NewPtr->Data), FP_SEG(s), FP_OFF(s), 37); strcat(rez,s); NewPtr=NewPtr->PrevPtr; } if (strlen(rez)==250) outtextxy(x,y,rez); if (Directly) y-=14; else y+=14; kol++; } } if (Directly) NewPtr = NewPtr->PrevPtr; else NewPtr = NewPtr->NextPtr; } } так вот она при вызове работает но не так как требуется-она не делает поиск по членам списка отдельно в цикле,а только лишь принаведении строчного курсора на длиное имя и вызове функции (предусмотрена кнопка) она для этой строки(имени файла папки) соединяет куски длинного имени в строку и считает ==250(?) а требуется открыть диск С,D либо папку- нажатие кнопки-и функция выводит найденное длинное имя=250 надеюсь все подробно объяснил если что весь код проги есть для Borland C++3.1 |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание связного списка на Си | zx11 | Общие вопросы C/C++ | 9 | 17.03.2014 00:54 |
Стек на базе одностороннего связного стека | foldel | Помощь студентам | 1 | 22.09.2011 21:23 |
Обращение к члену класса | _ILYA_ | Visual C++ | 2 | 13.10.2010 19:28 |
Генерация связного графа | andis | Помощь студентам | 6 | 23.01.2010 15:46 |
сортировка узлов связного списка | pavelstraut | Общие вопросы C/C++ | 5 | 28.07.2009 23:27 |