Добавить строки в ListBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Добавить строки в ListBox

Сообщение Def » 03.03.2006 (Пт) 23:06

На форме ListBox, CommandButton, CommonDialog.
Вот Код:

Private Const cdlOFNAllowMultiselect = &H200
Private Const cdlOFNCreatePrompt = &H2000
Private Const cdlOFNExplorer = &H80000
Private Const cdlOFNExtensionDifferent = &H400
Private Const cdlOFNFileMustExist = &H1000
Private Const cdlOFNHelpButton = &H10
Private Const cdlOFNHideReadOnly = &H4
Private Const cdlOFNLongNames = &H200000
Private Const cdlOFNNoChangeDir = &H8
Private Const cdlOFNNoDereferenceLinks = &H100000
Private Const cdlOFNNoLongNames = &H40000
Private Const cdlOFNNoReadOnlyReturn = &H8000
Private Const cdlOFNNoValidate = &H100
Private Const cdlOFNOverwritePrompt = &H2
Private Const cdlOFNPathMustExist = &H800
Private Const cdlOFNReadOnly = &H1
Private Const cdlOFNShareAware = &H4000
Private Const CD_FLAGS = cdlOFNAllowMultiselect + cdlOFNExplorer + cdlOFNLongNames

Private Sub Command1_Click()
With CommonDialog1
.CancelError = True
.MaxFileSize = 32000
.Filter = "All Files *.*/*.*"
.Flags = CD_FLAGS
.ShowOpen
myFiles = Split(.FileName, vbNullChar)
Select Case UBound(myFiles)
Case 0
List1.AddItem myFiles(0)
Case Is > 0
For i = 1 To UBound(myFiles)
myPath = myFiles(0) & IIf(Right(myFiles(0), 1) <> "\", "\", "") & myFiles(i)
List1.AddItem myPath
Next i
End Select
End With
End Sub

Private Sub Form_Load()
List1.AddItem (Command$)
End Sub

При запуске ассоциированного с моим приложением файла, путь к этому файлу добавится в список ListBox. А как создать цикл, чтобы при выборе нескольких файлов они добавлялись в ListBox?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 04.03.2006 (Сб) 1:20

1) Непонятно, зачем ты тут всем покал константы коммон-диалога, которые уже предопределены...
2)Вроде бы этот цикл наблюдается после Case Is > 1
3)Или цикл для передачи множества файлов через Комманд$
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Сообщение Def » 04.03.2006 (Сб) 22:56

Может я неправилно изложил суть вопроса...
Мне надо, чтобы при выделении нескольких файлов и нажатии на клавишу Enter запускалась одна копия моей программы и в ListBox добавлялись построчно пути к этим файлам.
На всякий, приведу пример :)
Я выделяю файлы C:\1.txt, C:\2.txt, C:\3.txt, нажимаю на клавишу Enter, запускается моя программа и в ListBox'e появляются 3 строки:
C:\1.txt
C:\2.txt
C:\3.txt
Вот и всё! Просто не знаю, что вписать в
For i = 1 To ???
List1.AddItem ???
Next

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.03.2006 (Вс) 0:52

Ничего не понял.
Lasciate ogni speranza, voi ch'entrate.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 05.03.2006 (Вс) 1:55

2 Def

Насколько я понял, код в первом посте был получен методом копипаста, и часть его (либо весь) ты совсем не понимаешь. Однако именно в нём ответ на твой вопрос.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Сообщение Def » 05.03.2006 (Вс) 22:14

Да, большую часть кода я не понимаю (иначе,зачем задавать этот вопрос?) :). Меня терзают смутные сомнения, что мне никто не ответит на этот вопрос, хотя, на 100% уверен, что ответ у знающих есть. Просто по непонятной мне причине (вероятно, желают движения моих извилин), мне упорно никто не хочет подсказать кусочек кода :)))
Будем ждать, самому мне не по силам (пока, не по силам) одолеть эту науку

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 05.03.2006 (Вс) 22:31

Я не понял в чём проблема: получить список файлов, которые Драгэндропом натащили на значок твоей программы?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 05.03.2006 (Вс) 23:05

Нет, ему надо ассоциировать со своей прогой расширение и когда несколько таких файлов попытались открыть он бы их имена в листбокс кидал. Тока вот незадача, для каждого файла стартанёт своя копия проги :( Так что надо писать основной код как standalone ActiveX EXE, с экспортируемым методом OpenFile(или ещё что), и из проги, с которой ассоцияция этот метод вызывать.
Изображение

Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Сообщение Def » 06.03.2006 (Пн) 12:32

keks-n прекрасно всё объяснил. Тока даст мне кто-нить ответ в виде кусочка кода. Как же блин это сделать?!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 06.03.2006 (Пн) 12:46

Тока вот незадача, для каждого файла стартанёт своя копия проги
В этом и есть решение. Объясню на пальцах: тебе нужно допускать запуск лишь одной копии программы. При попытке запуска второй копии, эта копия должна найти первый экзэмпляр и передать ему нужные данные ("C:\1.txt", к примеру). Первый экзэмпляр, получив данные, занесет их в ListBox.
ЗЫ. 2 keks-n и не нужны ни какие standalone ActiveX EXE...
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 06.03.2006 (Пн) 12:50

Тока даст мне кто-нить ответ в виде кусочка кода
Вряд-ли. Если произвести поиск по ключевым фразам из этого и предыдущего поста, то в сети можно обнаружить достаточно информации о том, как запретить запуск второй копии программы и как обмениваться данными между приложениями...
А я все практикую лечение травами...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 06.03.2006 (Пн) 15:24

Между прочим ActiveX EXE является одним из таких способов, а
"C:\1.txt"
может привести к
Access denied
на NTFS.
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 06.03.2006 (Пн) 19:54

"C:\1.txt"
Имелись ввиду данные, а не сам файл. Тем более, что права это уже гимор автора...
А я все практикую лечение травами...

Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Сообщение Def » 06.03.2006 (Пн) 22:44

Насчёт блокировки запуска второй копии - идея неплохая. Теоретически всё ясно. Завтра попробую применить это на практике. Обязательно отпишусь.
А насчёт ActiveX... мне это пока не по силам :(

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 07.03.2006 (Вт) 9:21

А насчёт ActiveX... мне это пока не по силам
Не по силам - читай книги. Но я считаю, что для твоей задачи не стоит заморачиваться ActiveX-сами, вполне подойдет мой вариант.
А я все практикую лечение травами...

Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Сообщение Def » 08.03.2006 (Ср) 12:02

Попробывал, не получилось. Вернее, получилось не то, что я хотел. Не помню, как я это делал, но при выделении 3-х файлов они у меня все добавлялись в ЛистБокс, но запускались 3 копии программ. Теперь, когда подали идею запрета запуска второй копии, забыл, что вписывал в код For...Next. С обменом данными между приложениями не смог разобраться. Туманно как-то...Насчёт книг.. я не понимаю теорию, я могу только чужой код переделать под свои нужды.
Есть ещё идеи?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 09.03.2006 (Чт) 15:28

Просил исходник-получай. Сначала запусти axeOpenFileEvent.exe(чтобы загегился), потом перетаскивай на test.exe файлы(если расширение не зарегистрировано, если зарегено, то просто поставь в реестре путь к test.exe, выделяй свои файлы и жми Enter)
Вложения
eOpenFile.rar
(9.86 Кб) Скачиваний: 67
Изображение

Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Сообщение Def » 09.03.2006 (Чт) 23:12

Спасибо! Завтра попробую и отпишусь :)

Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Сообщение Def » 10.03.2006 (Пт) 22:49

Спасибо! Код рабочий. Единственно в чём вопрос, axeOpenFileEvent.exe надо с собой таскать? Я пробывал его перемещать и всё, нету бубликов! :)))

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.03.2006 (Сб) 12:43

Вот вариант без ActiveX: в нём ничего не надо регистрировать, и ничего не надо за собой таскать.
Waiter.ocx -- это контрол от GSerg-а, его исходники лежат в Кирпичах.
Изображение

Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Сообщение Def » 11.03.2006 (Сб) 19:29

Спасибо, попробую сёдня. Кес кю се кирпичи? http://.... ? Можешь скинуть ссылку - я там не был.
P.S. Хорошо там, где НАС нет! :)))

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 11.03.2006 (Сб) 19:35

Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Сообщение Def » 11.03.2006 (Сб) 22:53

Спасибо за ссылку!
tyomitch, при открытии одного-двух файлоы код работает ОК. Но стоит выбрать 3 файла - появляются 2 окна - в одном в листбоксе 2 строки во втором - одна. 4 файла - 3 окна...И так далее в арифметической прогрессии. Но всё равно спасибо тебе, что как-то помог. Если чё ещё найдёшь - буду рад. :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.03.2006 (Сб) 23:16

Таки да, был рейс-кондишен :-(
Пришлось создать ещё один евент.
Проверяй :-)
Изображение

Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Сообщение Def » 11.03.2006 (Сб) 23:38

Намного лучше!!!! Из 50 проб - один раз сорвалося - открылся листбокс с оной строкой. Я ещё поиспытаю, если ты не против :)
Плюс, ещё надо влепить его в мой проект. Надеюсь завтра дам ответ.
Ещё раз спасибо!

Def
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.08.2005 (Вс) 21:44

Сообщение Def » 12.03.2006 (Вс) 13:03

В проекте тормозит, не успевает все строки прописать. Я уже убрал всё из Form Load, отключил контролы - пока безуспешно :(((

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.03.2006 (Вс) 13:22

Что значит "не успевает"?
Изображение

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 12.03.2006 (Вс) 13:41

вот я решил внести свою лепту (может и поздно):
кидай на форму List1 и Command1
Код: Выделить всё
Option Explicit
'маркер
Private Const Mark As String = "msg"

'функция получения EXE имени программы
Private Function My_Name() As String
    Dim st As String
    st = App.Path
    If Len(st) <> 3 Then st = st & "\"
    My_Name = st & App.EXEName & ".exe"
End Function

'запуск 2 копии
Private Sub Command1_Click()
    Dim i As Long, st As String
    For i = 0 To List1.ListCount - 1
        If List1.Selected(i) = True Then
            st = st & List1.List(i) & Mark
        End If
    Next
    Shell My_Name & " " & st, vbNormalFocus
End Sub

Private Sub Form_Load()
    If Command$ = "" Then
    'запуск 1 первой копии
        List1.AddItem "C:\1.txt"
        List1.AddItem "C:\2.txt"
        List1.AddItem "C:\3.txt"
        List1.AddItem "C:\4.txt"
        List1.AddItem "C:\5.txt"
        List1.AddItem "C:\6.txt"
        List1.AddItem "C:\7.txt"
        List1.AddItem "C:\8.txt"
        List1.AddItem "C:\9.txt"
        List1.AddItem "C:\10.txt"
    Else
    'запуск последующий
        Dim m() As String, i As Long
        m = Split(Command$, Mark)
        For i = 0 To UBound(m)
            List1.AddItem m(i)
        Next
    End If
End Sub

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.03.2006 (Вс) 13:53

Sirik, мне кажется, ты совсем не понял вопроса автора.
Изображение

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 12.03.2006 (Вс) 13:58

он просил чтобы:
а. чтобы список, при 1 запуске, заполнился, в данном случае сл. образом, файлами
б. при выделении элементов списка и нажатия на кнопку или Enter открывалась копия программы с списком из выбранных элементов
так?

След.

Вернуться в Visual Basic 1–6

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

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

    TopList  
cron