Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: [VB6]: БОЛЬШОЙ контрол - БОЛЬШИЕ проблемы Добавлено: 13.09.07 14:36  

Автор вопроса:  »VladikComper« | Web-сайт: vladikcomper.narod.ru | ICQ: 419668582 
Для своей очередной проги я пишу НАСТОЯЩИЙ КОНТРОЛ-ПРОВОДНИК (по папкам)...

Работа мало-помалу продвигается, но разработку приостановили две проблемы:



1. ПАПКА-НЕ-НЕПАПКА

Вначале мой контрол определяет все ПАПКИ, а потом все ФАЙЛЫ в заданном каталоге. Происходит это так:

Sub ReadPath()
Dim sForder$, sFile$: UnVisibleAll
counter = 0
AlignItem counter: filelist_fname(0) = "Подождите..."
sForder = Dir(ucPath, vbDirectory) ' ВОТ ПЕРЕМЕННАЯ СОДЕРЖАЩАЯ ИМЕНА ПАПОК!!!
If sForder <> "" Then
Do While sForder <> ""
WriteForder sForder, counter: counter = counter + 1: sForder = Dir(, vbDirectory) ' ВОТ, КАК ПЕРЕМЕНН. ПОЛУЧАЕТ СЛЕДУЮЩЕЕ ИМЯ!
If counter = 50 Then Exit Sub
Loop
End If
ShowScroll ' см. Вторую проблему
End Sub

Я не знаю, почему, но ПОСЛЕ ПЕРВОЙ УДАЧНО определившейся папки в списке идут файлы!!! Что делать... :-0


2. СКРОЛЛ-УЖАС

Помогите!!!!!!!!!!!!!!!!!
У меня в контроле 50 лейбелов... Label(0), Label(1), Label(2) ... и т.д и т.п... Долго ломал голову, что делать, а потом вывел глючный код... Как же работать со скроллом???
Нужно, чтобы все эти Label(0 To 49) двигались вверх-вниз, на расстояние, равное их высоте...

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #1 Добавлено: 13.09.07 15:59
1. Скопипастил просто с учебника Климова (вроде его)
' Нижеприведённый кусок кода
' отобразит в окне Immediate список папок
' в корневой директории на диске С

MyPath = "C:\"
MyName = Dir(MyPath, vbDirectory)
' Возвратит первую директорию.
Do While MyName <> "" ' Начало цикла
' Игнорируем текущую директорию или заключительную
If MyName <> "." And MyName <> ".." Then
' Используем битовое сравнение, чтобы определить
' что MyName есть директория (а не файл).
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
Debug.Print MyName ' Отобразим в окне Immediate MyName
End If
End If
MyName = Dir
Loop

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 13.09.07 16:02
Помести все лабелы в контейнер, например PictureBox, и двигай скролом только PictureBox.

Ответить

Номер ответа: 3
Автор ответа:
 »VladikComper«



ICQ: 419668582 

Вопросов: 23
Ответов: 147
 Web-сайт: vladikcomper.narod.ru
 Профиль | | #3
Добавлено: 13.09.07 16:06
From: HAKER
Помести все лабелы в контейнер, например PictureBox, и двигай скролом только PictureBox.

ОК. Мне уже подсказали

Ответить

Номер ответа: 4
Автор ответа:
 »VladikComper«



ICQ: 419668582 

Вопросов: 23
Ответов: 147
 Web-сайт: vladikcomper.narod.ru
 Профиль | | #4
Добавлено: 13.09.07 17:05
2 AndreyMp
Большое спасибо...
Только выводить в Immediate не нужно...

Ответить

Номер ответа: 5
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #5
Добавлено: 14.09.07 02:30
А почему именно 50 лейблов?
имхо лучше не лейблы юзать, а через API DrawText рисовать надписи

Ответить

Номер ответа: 6
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #6 Добавлено: 14.09.07 08:08
Только выводить в Immediate не нужно...
:) Ну тут уже пиши куда надо. :)
НАСТОЯЩИЙ КОНТРОЛ-ПРОВОДНИК
ИМХО:Действительно,Зачем 50 лебелов.

Ответить

Номер ответа: 7
Автор ответа:
 »VladikComper«



ICQ: 419668582 

Вопросов: 23
Ответов: 147
 Web-сайт: vladikcomper.narod.ru
 Профиль | | #7
Добавлено: 14.09.07 09:12
лучше не лейблы юзать, а через API DrawText рисовать надписи

Увы, с АПИ не дружу... Ладно, я поищу код...

:) Ну тут уже пиши куда надо. :)

Код не работает!!! Вначале были "ашипки", когда исправил на ...

Do While sForder <> ""
sForder = Dir(, vbDirectory)
If sForder <> "." And sForder <> ".." Then
If GetAttr(ucPath & sForder) = vbDirectory Then
AlignItem counter: WriteForder sForder, counter
counter = counter + 1
End If
End If
If counter = 50 Then Exit Do
Loop

... вообще директории не выводит :-(

Ответить

Номер ответа: 8
Автор ответа:
 »VladikComper«



ICQ: 419668582 

Вопросов: 23
Ответов: 147
 Web-сайт: vladikcomper.narod.ru
 Профиль | | #8
Добавлено: 14.09.07 09:14
Нашел:

Public Declare Function DrawText Lib "user32" Alias ";DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

Только не пойму как им пользоваться...

Ответить

Номер ответа: 9
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #9 Добавлено: 14.09.07 11:02
Вначале были "ашипки", когда исправил на ...
Код то работает. Просто для твоей задачи надо его немного переделать. Я на контроле не проверял, но в том варианте все нормально. Просто надо написать в какой папке ты хочешь смотреть подпапки и куда их записываешь.

Ответить

Номер ответа: 10
Автор ответа:
 »VladikComper«



ICQ: 419668582 

Вопросов: 23
Ответов: 147
 Web-сайт: vladikcomper.narod.ru
 Профиль | | #10
Добавлено: 14.09.07 11:02
Помогите!!!

sFile = Dir("C:\", vbNormal Or vbHidden Or vbSystem Or vbReadOnly)

If sFile <> "" Then
Do While sFile <> ""
WriteFile sFile, counter: counter = counter + 1
sFile = Dir(, vbNormal Or vbHidden Or vbSystem Or vbReadOnly) ' < RUN-TIME ERROR: неправильный вызов команды или аргумент!!!
If counter > 49 Then Exit Sub
Loop
End If

Почему??? Я просто хотел отыскать файлы на C:\, а он на CONFIG.SYS останавливается!!!

Ответить

Номер ответа: 11
Автор ответа:
 »VladikComper«



ICQ: 419668582 

Вопросов: 23
Ответов: 147
 Web-сайт: vladikcomper.narod.ru
 Профиль | | #11
Добавлено: 14.09.07 11:05
Просто надо написать в какой папке ты хочешь смотреть подпапки и куда их записываешь.

У меня в ucPath лежит моя директория. Проверял, все нормал... и переменные для файлов-папок: sForder, sFile - тоже нормал... Все в порядке, атока "ашипки" случаются... !

Ответить

Номер ответа: 12
Автор ответа:
 Alex



Вопросов: 7
Ответов: 73
 Профиль | | #12 Добавлено: 14.09.07 15:14
Привет!
Я вижу кучу недостатков в организации этого контрола

Во-первых
Можно сделать по-другому через контрол ListView (он есть практически в каждой винде, а те кто юзает 9.х, так у них наверняка установлен МС Офис - ListView идет с его поставкой). Отпадает очень много гемора. Несколько лет назад я написал такой контрол, но увы исходник потерял

Во-вторых
Если уж очень нужно создать оригинальный контрол, тогда создай отдельный вспомагающий контрол Итем (он должен иметь лейбл, картинку... ну по желанию еще что-то). Дальше его нужно юзать как леблы, но делай их 50 штук. Сделай один и поставь значение Index=0 (в таблице свойств). А потом с помощью команд Load/Unload добалвяй/удаляй иетмы. Но при этом тебе нужно усечь много факторов. Например - у тебя папка, которая имеет 50 000 файлов. Если создадишь 50 000 итемом у тебя прога загнется. Значит тебе нужно генерировать не для всех файлов по итему, а нужно ровно столько, сколько в данный момент вмещается в область видимости контрола, а уже при прокрутке скрола, ты опять генерируешь итемы, но уже для следюющих файлов

Ответить

Номер ответа: 13
Автор ответа:
 »VladikComper«



ICQ: 419668582 

Вопросов: 23
Ответов: 147
 Web-сайт: vladikcomper.narod.ru
 Профиль | | #13
Добавлено: 14.09.07 16:53
Я вижу кучу недостатков в организации этого контрола

Это мой втрой контрол!!! Конечно...
Если создадишь 50 000 итемом у тебя прога загнется. Значит тебе нужно генерировать не для всех файлов по итему, а нужно ровно столько, сколько в данный момент вмещается в область видимости контрола

Винда также делает что ли?
Только возникает вопрос: как задать поиск файлов, скажем, начиная с DDDDD.DDD а не с AAAAA.AAA?

Ответить

Номер ответа: 14
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #14
Добавлено: 14.09.07 17:14
Насчет DrawText. Пытаюсь ща сделать вьюер и использую эту АПИху там
http://slil.ru/24855409

библиотечку только кинь в папку с проектом
http://prdownloads.sourceforge.net/freeimage/FreeImage393Win32.zip?download

Ответить

Номер ответа: 15
Автор ответа:
 Gleban



ICQ: Ой, щас не вспомню 

Вопросов: 0
Ответов: 1
 Web-сайт: www.glebmedia.ru, http://www.glebonusw.narod.ru
 Профиль | | #15
Добавлено: 30.09.07 20:15
ВладикКомпер, и ты здесь?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам