Несколько вопросов о... короче вопросы новичка в vb

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

Сообщение Андрей@ » 04.03.2008 (Вт) 22:25

|( () ( T |/| |(
Всё работает, только вот такой прикол....
Для файлов длительностью меньше минуты длительность выдаётся правильная, для тех, что больше минуты - на секунду больше (по крайней мере по сравнению с продолжительностью, взятой из Свойства-сводка-дополнительно.........)
Вот так... (может, я в чём то ошибся?)

Ну ничего, это переделаю..

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 05.03.2008 (Ср) 23:42

|( () ( T |/| |(
можешь пояснить в твоём коде для Avi что делается в 4-8 строках...
и в универсальном коде всё..... (ну, не подробно, а так, в общих словах)?
а то как то охота понимать хоть что-нибудь...

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 06.03.2008 (Чт) 18:02

Андрей@ писал(а):Для файлов длительностью меньше минуты длительность выдаётся правильная, для тех, что больше минуты - на секунду больше ...

Код: Выделить всё
GetLen = Val(Total) \ 1000


Насчёт кода с AVI, там все настолько просто, что даже незнаю как обяснить... Считываем из файла Microsec и LengthInFrames, затем переумножаем и делим на миллион. Microsec - это, если не ошибаюсь, сколько длится один кадор в милисекундах, LengthInFrames - длинна в кадрах.

А насчёт универзального: почитай про библиотеку winmm.dll, много интересного найдешь.
С=[::::::::::> ™ e398wallpapers.narod.ru

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 06.03.2008 (Чт) 23:22

спасибо.... прогу уже написал... (сегодня, прямо почти только что написал, так сказать, первую альфа-версию).. пока не тестировал серьёзно - так, посмотрел... вроде всё нормально, но есть недоработки.. но это уж потом........
Кстати, работает она не так уж медленно..... (после компиляции имею ввиду).....
И вот насчёт статус бара (ну то есть линии снизу, длинна которой увеличивается по мере подхода к концу действия)... Есть ли что-нибудь, что позволяет вот такие линии делать...?
А то у меня это реализовано при помощи элемента PictureBox и прямоугольника, который в нём перечерчивается на каждом прохождении цикла... Но это ведь не универсальный способ.....

И ещё такой вопрос. Зачем нужна компиляция в P-code (какой то псевдо-код)..?
Вот....

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 06.03.2008 (Чт) 23:52

Кстати, вот обнаружил только что...
Метод для Avi не всегда выдаёт длительность... не знаю, почему...
А универсальный метод для mpg либо выдаёт длительностьв секунду, либо вообще ничего не выдаёт.. Ну оно и понятно, если даже в Свойства-сводка-дополнительно не то что длительности, там вообще никаких данных нет....
пока универсальный метод работает толкьо для avi и wmv (а других форматах не имею возможности протестировать - нет у меня на компе таких файлов....)..
ну ничего.....

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 06.03.2008 (Чт) 23:55

И вот насчёт статус бара (ну то есть линии снизу, длинна которой увеличивается по мере подхода к концу действия)... Есть ли что-нибудь, что позволяет вот такие линии делать...?


Может ProgressBar или Slider
Компоненты>Windows Common Controls 6.0(5.0)

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 07.03.2008 (Пт) 22:43

спасибо....
И вот ещё задача.... Есть у меня FileListBox.. Так вот, мне нужно, чтобы когда я там файл выбираю, в текстовом окне выдавался его полный адрес.... Как получить путь к папке, в которой находится файл, понял, а как получить имя самого ВЫБРАННОГО ФАЙЛА не знаю... Подскажите, кто знает........
Спасибо заранее....

А как насчёт этого вопроса?

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 07.03.2008 (Пт) 22:49

и ещё.. как сделать в текст боксе, чтобы в него можно было вводить только числа и десятичную запятую (или точку)....

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 08.03.2008 (Сб) 1:07

Андрей@ писал(а):и ещё.. как сделать в текст боксе, чтобы в него можно было вводить только числа и десятичную запятую (или точку)....


Код: Выделить всё
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 46 Then KeyAscii = 44 ' меняет точку на запятую
If InStr("1234567890," + Chr$(8), Chr$(KeyAscii)) = 0 Then KeyAscii = vbNull
End Sub

Но при таком способи, из буфера обмена можно вставить всё что угодно.
С=[::::::::::> ™ e398wallpapers.narod.ru

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 08.03.2008 (Сб) 1:14

спасибо.....
буду смотреть.....
что такое
Chr$(8 )
.. когда пытаюсь показать этот символ в Msgbox, то выдаётся квадратик.. Это, кажется, специальный символ?

P S Надо обзаводиться ASCII таблицей... :D

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 08.03.2008 (Сб) 1:27

Вот ещё вариант.

Код: Выделить всё
Private Sub Text1_KeyPress(KeyAscii As Integer)
If Not IsNumeric(Chr(KeyAscii)) _
And Not KeyAscii = 44 _
And Not KeyAscii = 8 _
Then KeyAscii = vbNull
End Sub

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 08.03.2008 (Сб) 11:32

Chr$(8 ) - это бэкспейс.
С=[::::::::::> ™ e398wallpapers.narod.ru

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 16.03.2008 (Вс) 18:16

спасибо большое..........

HiSER
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 04.07.2007 (Ср) 18:17

Сообщение HiSER » 16.03.2008 (Вс) 19:16

Не могу понять причем тут константа vbNull?

Я бы написал так:
Код: Выделить всё
Private Sub Text1_KeyPress(KeyAscii As Integer)
If (KeyAscii < 48 Or KeyAscii > 57) Xor (KeyAscii = 8 Or KeyAscii = 44 Or KeyAscii = 46) Then KeyAscii = 0
End Sub

Private Sub Text1_LostFocus()
Text1.Text = CStr(Val(Text1.Text))
End Sub

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 17.03.2008 (Пн) 8:19

HiSER писал(а):Не могу понять причем тут константа vbNull?

Особенно, с учетом того, что она равна 1!
Весь мир матрица, а мы в нем потоки байтов!

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 17.03.2008 (Пн) 8:29

Получить полный путь по клику в лист бокс можно так.
Код: Выделить всё


Private Sub FileList_Click ()
  dim result as String

   result=FileList.Path & "\" & FileList.FileName
   
   txtFullPath.Text=result

End Sub



Тут FileList- итак понятно что.
txtFullPath - Текстовое поле для отображения полного пути.

Но красивее будет использовать Элемент Lable

Код: Выделить всё


**********
lblFullPath.Caption=result

**********



Свойства lblFullPath :


BackStyle=0
Appearance=0
BorderStyle=1
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 17.03.2008 (Пн) 8:40

По поводу прогресс бара


Код: Выделить всё

Sub Calculate()

Progress.value=0
FileList.ListIndex=0
Progress.Max=FileList.Count-1

for i=0 to FileList.Count-1

DoEvents

FileList.ListIndex=i       
strFileName=FileList.FileName ' Получаем имя файла
strPath=FileList.Path & "\" ' Получаем путь к файлу
strFullPath= strPath & strFileName
'         *
' Тут процедура получения длительности файла

'         *


Progress.value=i

next i

End Sub

Последний раз редактировалось netdemon 25.03.2008 (Вт) 18:07, всего редактировалось 1 раз.
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 24.03.2008 (Пн) 22:01

Спасибо большое.. Эх, вот было бы только время всё это протестировать и понять... Ну ничего, найдётся... (уж как-нибудь засяду за первое более-менее серьёзное приложение - типа строкового калькулятора с синтаксическим анализатором :D )
А вот ещё вопросы ......
Антивирусы при проверке файлов перебирают все файлы на диске... Так вот, как это организовать? Как заставить комп просмотреть каждый файл на диске (получить его полной имя)?

И ещё вопрос..... Почитав немного литературы про линух и всякое такое (и погоняв различные виды Ubuntu в виртуалке) решил поразбираться в этой системе, и , если когда-нибудь Винда полетит, перейти на Линух.... Так вот такой вопрос....
Как заставить VB6 и проги, на нём написанные, работать в Wine (а то пока никакого эффекта - только установочные файлы открываются - и в скором времени выдаётся ошибка...)... А про просто скомпилированные проги вообще не говорю - глухо, как в танке...
Вопросы, может, и не по тематике данного форума, но всё-таки....

Заранее спасибо....

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 27.03.2008 (Чт) 21:51

с кодами понятно, только вот
Код: Выделить всё
If InStr("1234567890," + Chr$(8), Chr$(KeyAscii)) = 0 Then KeyAscii = vbNull

что это такое inStr и с чем его едят?...

И ещё вопрос... Можно ли к функции в качестве входного параметра поставить массив (а не переменную как обычно)
Код: Выделить всё
dim function hello(привет as integer)

так вот, как сказать компу, что "Привет" это не перменная типа integer, а массив переменных типа integer?

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

Сообщение alibek » 28.03.2008 (Пт) 2:42

Function Func1(ArrayArgument() As Integer) As String()
Lasciate ogni speranza, voi ch'entrate.

M.A.R.K
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 68
Зарегистрирован: 11.11.2007 (Вс) 11:50
Откуда: Иркутск

Сообщение M.A.R.K » 29.03.2008 (Сб) 9:17

Андрей@ писал(а):
Код: Выделить всё
If InStr("1234567890," + Chr$(8), Chr$(KeyAscii)) = 0 Then KeyAscii = vbNull

что это такое inStr и с чем его едят?...
a = InStr([Начальная позиция],Строка,Символ)
Андрей@, [Начальная позиция] - с какой позиции начинать поиск(скобки [] означают, что это необязательный параметр, что если его не указать, то он будет равен 1)
Строка - это строка, в которой производится поиск.
Символ - это искомый символ, точнее мы ищим, в строке "Строка", начиная с позиции "[Начальная позиция]" первый встречаемый номер символа в этой строке.
Пример:
a = InStr(1,"Привет всем, это я!","э")
Здесь, a будет иметь значение 13.
-Решил Хакер блины печь...
-Первый блин у него вышел, как обычно - Комом...
-А второй - Экзешником...

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 29.03.2008 (Сб) 21:37

спасибо.... думается, что всё равно при запуске комманды, допустим, на сложение двух чисел придётся сначала проверсять числа на наличие двух запятых, да ещё и из буфера обмена можно много чего напортачить....
Кстати, каким образом занести символы в текстовом окошке в буфер обмена?
И ешё вопрос.. На форуме появилась тема про реакцию окна на потерю фокуса.. так вот, каким образом сделать так, чтобы от него нельзя было отвязаться даже вызовом диспетчера задач (то есть при потере фокуса оно всё равно будет снова становиться активным, что ни делай....)...

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 29.03.2008 (Сб) 22:12

На счёт буфера обмена:
Object Browser>ClipBoard
API>OpenClipboard, SetClipboardData, CloseClipboard

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 31.03.2008 (Пн) 21:39

Спасибо...
Вот появилась ещё проблема....
Насчёт получения длительности видео
Заметил, что прога иногда ни с того, ни с сего зависает на каком то определённом видеофайле (это относится к "медленному способу получения длительности").. и что ни делай - где ни ставь On error resume next - всё равно ничего не получается... В Винде длительность спокойно просматривается.... Ну это пол беды....
Вот ещё замучила сортировка файлов в FileListBox - там, так понимаю, сортировка идёт в алфавитном порядке... Вот и получается для файлов с нумерацией в конце:
File1
File10
file11
...
file2
file20
file21
Ну ведь это же просто пронумерованный файл с одним и тем же названием... Нельзя ли поставить такой режим сортировки файлов, чтобы они сортировались не по алфавиту, а по "величине байтового кода", то есть самые короткие названия считаются самыми "малымим по величине" и относятся в начало списка, а если длины названий файлов равны, то просто они сортируются в алфавитном порядке....
Если это нельзя установить через свойства элемента, то как написать такую прогу?
Можно ло с элементом FileListBox работать также, как с ListBox... Если да, то понятно в принципе, как сортировать...

И вот ещё вопрос... вот код
Код: Выделить всё
For i = 0 To Len(Text1.Text) - 1
Label1.Caption = i
Label1.Refresh
Text1.SelStart = i
Text1.SelLength = 1
If Text1.SelText = Chr(13) Then
Text1.SelText = Chr(13) & Chr(10)
i = i + 1 ' это чтобы она не зациклилась
End If
If Text1.SelText = Chr(10) Then
Text1.SelText = Chr(13) & Chr(10)
i = i + 1
End If
Next

эта программа просто при встрече символов chr(13) или chr(10) заменяет их на chr(13) & chr(10)... Так вот, как ни крути, она виснет в лучшем случае где то на 1800-м символе.... Что делать? В чём причина?

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

Сообщение Хакер » 31.03.2008 (Пн) 22:19

а по "величине байтового кода",

Боже.

Андрей@, если бы ты только знал, какое истинное выражение имеет фраза в кавычках, и как её используешь ты.

по "длине имени" что-ли?

Если это нельзя установить через свойства элемента, то как написать такую прогу?

Ручками. Алгоритмы сортировки валяются в разделе "Алгоритмы".

Можно ло с элементом FileListBox работать также, как с ListBox... Если да, то понятно в принципе, как сортировать...

С элементом FileListBox можно работать также, как с любым свойством COM-класса. Всё.

эта программа просто при встрече символов chr(13) или chr(10) заменяет их на chr(13) & chr(10)... Так вот, как ни крути, она виснет в лучшем случае где то на 1800-м символе.... Что делать? В чём причина?

Это просто какой-то паталогический изврат - заменять текст не быстрым реплейсом, а самописным кодом, причём не только самописный, а (самое страшное) использующим в качестве буфера не переменную, а TextBox, а вместо Mid$ - свойство SelText.

На это просто страшно смотреть. Андрей@ не выкладывай больше такой код - я не переживу этого.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 03.04.2008 (Чт) 19:18

извиняюсь.... :oops:
пишем по принципу ЧПК - через пень колоду...



а по "величине байтового кода"

ну там ведь дальше прописано, в чём смысл этого высказывания (вспомнились слова одного учёного-физика "Философы говорят не для того, чтобы быть понятыми").... ладно, написано очень грамотейно-самоделкински........
:D всё равно спасибо..... а проблема с той прогой вот в чём.... открываю тестовый файл в блокноте - он переносы не расставляет (на следующую строку).... Копирую прямо в окно редактора кода VB - расставляет....
А в текстбоксе тоже не расставляются (несмотря на установку нужных свойств) .. Ну, методом тыка понял, что стоят на месте переносов только Chr(10), а, насколько помню, для переноса в текстбоксе нужно chr(13) & chr(10).. Ну, порешили и взялись за дело.....
А как это грамотно сделать :?:

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

Сообщение Хакер » 03.04.2008 (Чт) 19:28

Андрей@
Это не есть переносы. Переносы, это совсем другое.

Грамотно это делать Replace-ом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 03.04.2008 (Чт) 20:32

Хакер

спасибо! и вправду, реплэйсом это делается за секунуду.. Но вот появилась такая проблема....... Как ни бьюсь, не могу реплэйс выдаёт только 65535 символов.... а у меня миллин с копейками...... Дело, даже, наверно не в реплэйсе... пробовал разбивать текст на элементы длинной по 65535 символов, получил то, что надо в строковой переменной и....... при присвоении text1.text = strA в текстбокс идёт только 65535 символов.. что делать? ведь из буфера обмена всё спокойно вставляется....... Неужто надо весь текст копировать из переменной в буфер, а уж потом в текстбокс?

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

Сообщение Хакер » 04.04.2008 (Пт) 1:45

Андрей@
Код в студию. Только аккуратно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Андрей@
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 26.02.2008 (Вт) 20:21

Сообщение Андрей@ » 04.04.2008 (Пт) 21:56

Хакер


Код в студию, это в смысле сюда?

Ну, ладно, скину.... Только попозже, а то у меня сейчас в винде почему то буфер обмена полетел.... не работает..... надо перезагружаться.....

Пред.След.

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

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

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

    TopList