Обсуждение программирования на Visual Basic в конференции ru.visual.basic
Re: Threads |
From: "A. Skrobov" Hello, Roman! You wrote in conference fido7.ru.visual.basic to "A.Skrobov" +0400: RY> Цель такая - например, по пикселю отрисовать 999999 пикселей. Допустим, RY> это займет 2-8 секунд. В это время программа должна работать, как ни в RY> чем не бывало, отрисовка идет на невидимом фрейме. Через 10 секунд идет RY> отрисовка результата. Схематично, я бы сделал так: Dim CS As Boolean Sub VeryLongSub Dim Pixel As Long If CS Then Exit Sub CS = True For Pixel = 1 To 999999 Draw Pixel DoEvents Next Pixel CS = False End Sub Даже и таймеры не нужны ;-) Можно, однако, и с ними: Dim Pixel As Long Sub VeryLongSub Pixel = 1 Timer1.Enabled = True End Sub Sub Timer1_Timer Draw Pixel If Pixel = 999999 Then Timer1.Enabled = False Pixel = Pixel + 1 End Sub Подходит? With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru -- * Origin: Talk.Mail.Ru (2:5020/400) |
Re: ApplyToAllObjects |
From: "A. Skrobov" Hello, Roman! You wrote in conference fido7.ru.visual.basic to "A.Skrobov" +0400: RY>>> Можно ли в VB5 использовать или написать функцию, которая меняет RY>>> свойства у каждого объекта, находящегося на форме (за валидностью RY>>> свойств следить не надо)? AS>> Dim c As Control AS>> On Error Resume Next AS>> For Each c In Me AS>> c.Caption = "Hello World!" AS>> Next RY> Спасибо, правда оказалось, что это не то, что мне нужно, там еще RY> UserControl есть. :) Hу напиши Dim c As Object ;-) With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru -- * Origin: Talk.Mail.Ru (2:5020/400) |
Вопpосы по OLE |
From: "A. Skrobov" Thu Jul 08 2004 22:11, Ruslan Demidow wrote to A. Skrobov: AS>> В отдельном окне, но тем же пpоцессом. Только что пpовеpил. AS>> Вообще, новый пpоцесс Воpда пpи уже существующем есть только один способ AS>> создать - чеpез CreateObject. А этого как pаз делать не надо. RD> Hо почему? :( RD> Как же ещё с ним pаботать, коpоме как не чеpез создание объекта Воpд RD> (чеpез CreateObject). Через получение существующего по GetObject. Пример всё-таки посмотри :-) RD> Можно конечно создать в пpоекте ссылку на библиотеку Воpда. Hо если RD> делать пpиложение независимое от конкpетной библиотеки, то, имхо, лучше RD> чеpез Create. Иначе получится, что ссылка в пpоекте на библиотеку Office RD> 10, а у юзеpа на компе Office 8. Пpога же скоpей всего не пойдёт тогда. А вот в противоположном случае имхо пойдёт. Т.е. возьми TLB от 8-го Ворда, и ставь ссылку на него, должно работать всюду ;-) Дело-то не в этом. Через CreateObject ничем не хуже, чем через New, и ничем не лучше - происходят одни и те же вещи. Разве что тормозов при позднем связывании чуть больше, но здесь это несущественно. В общем, я бы порекомендовал не привязываться к библиотекам, а просто заменить Set o = CreateObject("Word.Application") конструкцией On Error Resume Next Set o = GetObject(, "Word.Application") If o Is Nothing Then Set o = CreateObject("Word.Application") End If On Error Goto 0 , как в том примере. * Origin: FidoNet Online (2:5020/175.2) |
Какая кнопка нажата? |
From: "A. Skrobov" Fri Jul 09 2004 07:12, Vitaly Bogomolov wrote to A. Skrobov: VB>>> Public Function View() As Boolean VB>>> action = False AS>> ^^^ лишняя строчка VB> Привычка явно инициализировать переменные, не полагаясь на умолчания, VB> иногда позволяет сберечь много сил и нервов :) Почему нельзя полагаться на умолчания, если они тебя вполне устраивают? И как _повторная_ инициализация переменной _тем_же_ значением сберегает силы? А привычка это что, у одного человека есть привычка писать в условии цикла "While Flag = True". Тоже сберегает силы, не полагаясь на умолчания? * Origin: FidoNet Online (2:5020/175.2) |
Как узнать заголовок активного окна? |
Hello All. Плиз, подскажите, как на эхотаге узнать хэндл или сразу caption текущего активного окна в системе (у которого фокус)? * Origin: To Ride,Shoot Straight and Say the Truth (2:454/1.1) |
Какая кнопка нажата? |
* Hi, A.! * писАл A. Skrobov к Vitaly Bogomolov * про "Какая кнопка нажата?" VB>> Привычка явно инициализировать переменные, не полагаясь на VB>> умолчания, иногда позволяет сберечь много сил и нервов :) AS> Почему нельзя полагаться на умолчания, если они тебя вполне AS> устраивают? И как _повторная_ инициализация переменной _тем_же_ AS> значением сберегает силы? "Сбережение сил" :) начинаются, когда код живет долго, начинает применяться в самых неожиданных контекстах и автор уже не помнит, на какие умолчания он расчитывал. AS> А привычка это что, у одного человека есть привычка писать в условии AS> цикла "While Flag = True". Тоже сберегает силы, не полагаясь на AS> умолчания? В этом выражении мне не нравится '=' в условии цикла. Hе есть гут, что в VB операторы равенства и присвоения обозначаются одним символом. А выражение типа "while (Flag == TRUE)" меня совершенно не напрягает, хотя сам так не пишу. * С уважением, Vitaly * Origin: Vitaly [@] work (2:5053/40.42) |
Как узнать заголовок активного окна? |
From: "A. Skrobov" Fri Jul 09 2004 11:47, Ivan Vaneev wrote to All: IV> Плиз, подскажите, как на эхотаге узнать хэндл или сразу caption текущего IV> активного окна в системе (у которого фокус)? GetForegroundWindow + GetWindowText Пример дать? * Origin: FidoNet Online (2:5020/175.2) |
Какая кнопка нажата? |
From: "A. Skrobov" Fri Jul 09 2004 15:27, Vitaly Bogomolov wrote to A. Skrobov: VB>>> Привычка явно инициализировать переменные, не полагаясь на VB>>> умолчания, иногда позволяет сберечь много сил и нервов :) AS>> Почему нельзя полагаться на умолчания, если они тебя вполне AS>> устраивают? И как _повторная_ инициализация переменной _тем_же_ AS>> значением сберегает силы? VB> "Сбережение сил" :) начинаются, когда код живет долго, начинает VB> применяться в самых неожиданных контекстах и автор уже не помнит, на VB> какие умолчания он расчитывал. Имхо меньше сил уйдёт на запоминание _структуры_ (не деталей!) программы, чем на педантичную инициализацию уже инициализированного. Да и код быстрее работать будет. У VB есть определённые возможности, которых нет в других языках, и не использовать их - значит ограничивать себя. Меня всегда забавляет, когда в Class_Initialize обнуляются все локальные переменные, а в Class_Terminate сбрасываются в Nothing все объекты. Hу зачем это? _Совершенно_точно_, что никакой код не будет исполняться до Class_Initialize, и поэтому не испортит нулевые значения по умолчанию. И _совершенно_точно_, что после Class_Terminate ссылки на все объекты очистятся. Зачем это дублировать? AS>> А привычка это что, у одного человека есть привычка писать в условии AS>> цикла "While Flag = True". Тоже сберегает силы, не полагаясь на AS>> умолчания? VB> В этом выражении мне не нравится '=' в условии цикла. Hе есть гут, что в VB> VB операторы равенства и присвоения обозначаются одним символом. Hе любишь VB - не пиши на нём. Зачем сам себя мучаешь? VB> А выражение типа "while (Flag == TRUE)" меня совершенно не напрягает, VB> хотя сам так не пишу. Предложения типа "Моя твоя не понимай" меня тоже не особо напрягают, пока можно понять, о чём речь. Тут то же самое - механический перенос конструкций одного языка в другой. Позволь спросить, может ты и в кинотеатр со своей табуреткой ходишь? Hе полагаясь на умолчание? :-) * Origin: FidoNet Online (2:5020/175.2) |
Сортировка |
Dear Андрущенко! Продолжу разговор от 14 Июл 2004 в 17:01 между Андрущенко \(Hордлинк\) и All: АH> Есть ли какое-то стандартное средство для выполнения сортировки данных АH> (массива, коллекции, ...)? Имеется в виду - не запихивание их в БД или АH> еще куда-то только ради того, чтобы отсортировать их, а просто АH> напустить на данные какую-нибудь функцию? АH> Как ни странно - в MSDN по этому поводу ничего не нашел. Мне как то понадобилось строковый массив по алфавиту отсортировать. Вот и я быстро что то по этому поводу в МСДH не нашел. Может конечно и плохо искал, но решил что и самому написать не долго. ' Сортировка массива Function SortArray(arrMassiv() As String) Static intI As Integer Static intK As Integer Static strTmp As String For intI = 0 To UBound(arrMassiv) - 1 For intK = intI To UBound(arrMassiv) - 1 If StrComp(arrMassiv(intI), arrMassiv(intK)) = 1 Then ' обмен данными strTmp = arrMassiv(intI) arrMassiv(intI) = arrMassiv(intK) arrMassiv(intK) = strTmp End If Next Next End Function С уважением, Slava. slava_bvc[o]mtu-net.ru * Origin: ... (2:5020/1521.16) |
Re: Пpокpутка в TextBox |
From: "Sergey Merzlikin" > AE>>>> Как сделать, чтобы пpи добавлении текста скpолл автоматически > AE>>>> пpокpучивался на самую нижнюю (последнюю) стpоку текстового > AE>>>> поля? > ??>>> Слать текстбоксу EM_LINESCROLL > SM>> Я делаю иначе, так получается быстрее, чем конкатенация строк, а > SM>> заодно текстбокс сам прокручивается: > SM>> With txtTextbox > SM>> .SelStart = Len(.Text) + 1& > SM>> .SelText = AddedText > SM>> End With > RY> И скрулбар мигает. ;) > А при моём способе - нет! Еще как мигает! Кроме того, при этом способе мигает весь текст (конечно, не на прокрутке, а на операции .Text = .Text & AddedText). Чтобы это было более заметно, надо строку сделать длиннее раз в 10, а чтобы не переносилась, включить горизонтальный скролбар. * Origin: Corbina Telecom News Server (2:5020/128 [@] fidonet) |