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

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

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

Сообщение Андрей@ » 26.02.2008 (Вт) 21:40

Здраствуйте.... На форуме я впервые..
Пробовал найти код для получения длительности видеофайла (то бишь не в мегабайтах, а в часах, минутах и т. д.), но не нашёл .....
Так вот, кто может посоветовать, как получить длительнось avi и wma файла и скопировать это значение, допустим, в текстовое поле....

Второй вопрос таков.
Для текстовых полей есть команды для работы с выделенным текстом : selstart, sellength и seltext..
Это всё понятно, а вот нет ли таких же команд, но для строковых переменных?

Тему эту можно удалить, если уже поднимались где то эти вопросы, только киньте ссылку кто знает.....
Ну, вроде пока всё...
Заранее спасибо..
Последний раз редактировалось Андрей@ 06.03.2008 (Чт) 23:53, всего редактировалось 1 раз.

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

Сообщение Viper » 27.02.2008 (Ср) 7:52

2. Mid во всех ее проявлениях
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение BV » 27.02.2008 (Ср) 10:23

1. Какими средствами ты работаешь с видео?
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;

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

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

Вобще... программировать я начал недавно, поэтому насчёт того, какие средства собираюсь использовать для видео, ничего сказать не могу....
Но сама задача такая..
Есть папка, в которой около сотни видеофайлов. Мне нужно получить в текстовом окне имя каждого файла и его длительность (то есть получить обыкновенный список с указанием длительностей)... С именем при помощи самоучителья и метода научного тыка разобрался, а вот как длителности получить - не знаю....(лень набивать это всё)...



Кстати, насчёт метода MID.. Ладно, выделю фрагмент текста в переменной.. А как заменить свойство Seltext?




И ещё такой вопрос...
Есть три точки - координата начала дуги, координата радиуса (то есть точки, откуда он начинается) и координаты конца дуги...
Так вот, как мне по этим координатам программно начертить ДУГУ ? (Ну хотя бы как по этим координатам начертить не какую-то дугу, а просто часть окружности [например, полуокружность, 1/4 окружности]) ?

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

Сообщение Viper » 28.02.2008 (Чт) 8:21

Андрей@ писал(а):Кстати, насчёт метода MID.. Ладно, выделю фрагмент текста в переменной.. А как заменить свойство Seltext?

Код: Выделить всё
Dim s As String
Dim sSubString As String
s = "суперпуперстрока"
' выделяем кусок строки
sSubString = Mid$(s, 6, 5) ' в sSubString будет "пупер"
' заменяем кусок строки
Mid(s, 6, 5) = "ЫЫЫЫЫ"   ' в s будет "суперЫЫЫЫЫстрока"

Андрей@ писал(а):И ещё такой вопрос...
Есть три точки - координата начала дуги, координата радиуса (то есть точки, откуда он начинается) и координаты конца дуги...
Так вот, как мне по этим координатам программно начертить ДУГУ ? (Ну хотя бы как по этим координатам начертить не какую-то дугу, а просто часть окружности [например, полуокружность, 1/4 окружности]) ?

Смотреть в сторону метода Circle, ну и геометрию повспоминать.
Весь мир матрица, а мы в нем потоки байтов!

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

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

Спасибо...
То есть если мне нужно получить какой то один символ из строки, нужно задавать ещё одну строковую переменную... Ну, думаю это куда экономней, чем из за этого создавать лишнюю "невидимую" форму с текстовыми строками......(просто охота реализовать для начала + - * / в столбик, а не пользоваться стандартными функциями.......)..

Кстати, вот ещё одна эдакая идея....
Если представить файл, закодированный двоичной последовательностью 1 и 0 как число в двоичной системе счисления, то, подумав хорошенько, можно дойти до вот такой мысли....
Чтобы сократить объём файла в 2 раза, нужно найти для данного числа такую систему счисления. в которой используется корень из её основания символов..... Это вот такое условие сжатия в 2 раза.... + служебная информация, которая в лучшем случае "съест" эдак процентов 25% (если не больше)...... Несколько операций такого сжатия, и может, можно достичь сжатия в 50 %....
Только вот вопрос, как такую систему счисления найти? Если перебирать все доступные, то этот процесс растянется даже не на миллиарды лет (и это для файла объёмом всего в один мегабайт)....

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

Вот......

Так а насчёт видео..... Ладно, придётся вручную набить.....
но если кто знает, всё равно напишите, в будушем всё равно пригодится......

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

Сообщение Андрей@ » 29.02.2008 (Пт) 1:18

То есть если мне нужно получить какой то один символ из строки, нужно задавать ещё одну строковую переменную...


Ладно, с этим понятно всё.. Вот не могу справиться с такой проблемой..
Как мне из переменной удалить несколько символов?

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

Viper На твоём коде тестировал - получились вышеприведённые результаты........

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

Сообщение Atoman » 29.02.2008 (Пт) 2:52

Вот код, вполне рабочи.
Код: Выделить всё
Public Function ReplaseChar(strChar As String, cSelStart As Long _
, cSelLenght As Long, Optional newChar As String = "") As String
Dim tmp As String
    tmp = Mid$(strChar, 1, cSelStart)
    ReplaseChar = tmp & newChar _
    & Mid$(strChar, cSelStart + cSelLenght + 1, Len(strChar) - (Len(tmp) + cSelLenght))
End Function

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

Сообщение Viper » 29.02.2008 (Пт) 8:23

Заменять необходимо при помощи Replace, Mid меняет только на то же число символов
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение BV » 29.02.2008 (Пт) 10:07

Андрей, видео какого формата требуется обрабатывать?
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;

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

Сообщение Андрей@ » 29.02.2008 (Пт) 14:05

видео формата avi и wma (хотя это всего лишь расширения файлов - это формат видео или нет? [вроде слышал, что расширение - всего лишь подсказка компу, с помощью чего открывать файл]...)..
вот....

Ну, а насчёт удаления символов... спасибо, посмотрю...

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

Сообщение Андрей@ » 29.02.2008 (Пт) 14:33

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

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

Сообщение Atoman » 29.02.2008 (Пт) 15:02

У меня что так mid$, что так mid работает, не знаю что утебя там не работает.
$ - указывает тип данных

Dim tmp As String = Dim tmp$
Dim tmp As Long = Dim tmp&
Dim tmp As Currency = Dim tmp@
Dim tmp As Single = Dim tmp!
Dim tmp As Double = Dim tmp#
...

Вроде ничего не напутал.

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

Сообщение Viper » 29.02.2008 (Пт) 15:08

Ну вы даете...
Mid$ возвращает String
Mid возвращает Variant содержащий строку, вот и вся разница!
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение alibek » 29.02.2008 (Пт) 15:11

Atoman писал(а):Вроде ничего не напутал.

As Date напишешь? :)
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение Atoman » 29.02.2008 (Пт) 15:30

Код: Выделить всё
Dim tmp As 29.02.2008 :lol:

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

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

ладно, спасибо......
Ну а как там насчёт идеи с архиватором ? (idea = ахимея?)

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

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

у меня вот так эта функция получилась
Код: Выделить всё
Public Function repchar(char As String, selstart As Long, sellength As Long)
char = Mid(char, 1, selstart) + Mid(char, selstart + sellength + 1, Len(char) - selstart - sellength + 1)
MsgBox "ans = " + char
End Function

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

Сообщение BV » 01.03.2008 (Сб) 14:26

видео формата avi и wma


Тогда посмотри это.
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;

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

Сообщение Андрей@ » 01.03.2008 (Сб) 18:17

http://bbs.vbstreets.ru/viewtopic.php?p=28159#28159
Нашёл такую ссылку..... Буду код переделывать, чтобы длительность получить для нескольких файлов........
Кстати, в vb нет функций, которые секнды переделывают в часы и минуты, а то эта прога просто выдаёт число секунд.......?

но всё равно спасибо...

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

Сообщение Atoman » 01.03.2008 (Сб) 21:05

Вот чтото поучилось.
Код: Выделить всё
Public Function SecondToTime(cSecond As Long) As String
Dim S As Long, M As Long, H As Long, tmp As Long, c As Long
        tmp = cSecond
            Do While tmp > 60 * 60
            c = c + 1
            tmp = tmp - 60 * 60
            Loop
        H = c
        c = 0
        tmp = cSecond - (H * 60 * 60)
            Do While tmp > 60
            c = c + 1
            tmp = tmp - 60
            Loop
        M = c
        S = cSecond - (H * 60 * 60) - (M * 60)
        SecondToTime = H & " час " & M & " мин " & S & " сек"
End Function

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

Сообщение |( () ( T |/| |( » 01.03.2008 (Сб) 21:34

Вот, может пригодиться. Работает только для AVI. Возврашяет длину в секундах.
Код: Выделить всё
Private Function GetLen(FileName As String) As Long
Dim Microsec As Long
Dim LengthInFrames As Long
Open FileName For Binary As #1
  Get #1, 33, Microsec
  Get #1, 49, LengthInFrames
Close #1
GetLen = LengthInFrames * Microsec / 1000000
End Function
С=[::::::::::> ™ e398wallpapers.narod.ru

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

Сообщение Андрей@ » 01.03.2008 (Сб) 22:53

Спасибо...
Вот только с видео пока....... Ну ничего, будем дальше разбираться....

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

Сообщение BV » 02.03.2008 (Вс) 12:53

Нашёл такую ссылку..... Буду код переделывать, чтобы длительность получить для нескольких файлов........
Кстати, в vb нет функций, которые секнды переделывают в часы и минуты, а то эта прога просто выдаёт число секунд.......?


Эм. А ты проект по моей ссылке смотрел?
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;

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

Сообщение Андрей@ » 02.03.2008 (Вс) 14:02

BV
Смотрел, только так как я пока в VB начинаюций, то мало что было понятно.. Но вообще найду время поразбираться....... Мне эдак лучше просто пока готовый простенький код, а уж потом до меня дойдёт, как он работает.....

Кстати, ведь длительность видео можно узнать через Свойства-Сводка-Дополнительно..
Нельзя ли длителность оттуда как-нибудь вытащить?

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

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

http://bbs.vbstreets.ru/viewtopic.php?p=28159#28159




Да и кстати скачанная мной прога неправильно почему то выдаёт длительность........
А переводить секунды в минуты можно при помощи переменной Date
Код: Выделить всё
sub
dim a as string, d as date
'a - длительность в секундах, d - длительность нормальной сделаем...
d=val(a)/86400
end sub
'в сутках 86400 секунд, если не ошибаюсь....


|( () ( T |/| |(
спасибо, протестирую.....
Последний раз редактировалось Андрей@ 04.03.2008 (Вт) 21:48, всего редактировалось 1 раз.

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

Сообщение Андрей@ » 02.03.2008 (Вс) 15:14

|( () ( T |/| |(
Спасибо... С Avi уже работает....... Вот только хорошо бы ещё с какими-нибудь форматами....


BV
Тоже спасибо большое....
И всем......

P S Только вот всё-таки хорошо бы для большинства типов файлов длительность получать..... :D

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

Сообщение |( () ( T |/| |( » 04.03.2008 (Вт) 19:26

Держи. Поддерживает много типов, и видео, и аудио. Если какае проблемы пиши, выложу полный код.
Код: Выделить всё
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Private Function GetLen(FileName As String) As Long
Dim Total As String * 128, Tmp As String * 255
mciSendString "open " & Left$(Tmp, GetShortPathName(FileName, Tmp, 255)) _
  & " type MPEGVideo Alias movie parent " & Me.hWnd & " Style " & &H40000000, 0&, 0&, 0&
mciSendString "set movie time format frames", Total, 128, 0&
mciSendString "status movie length", Total, 128, 0&
mciSendString "Close movie", 0&, 0&, 0&
GetLen = Val(Total) / 1000
End Function
С=[::::::::::> ™ e398wallpapers.narod.ru

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

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

Спасибо.... Буду тестировать.....

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

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

|( () ( T |/| |(
спасибо.... только вот медленно работает - для одного файла порядка одной секунды....
Хотя если файлов сотня, то понадобится всего минуты две... Так что всё нормально.... Ну это так, к слову.....

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

След.

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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 29

    TopList