Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Фокус при инициализации формы  (Прочитано 22822 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Ципихович Эндрю
Помогающий

ru
Offline Offline

« : 02-05-2011 07:26 » 

Фокус при инициализации формы
Здравствуйте
1. форму с именем ... запускаю в модальном режиме, в документе Ворд, форма не обычная, файл прикрепляю. Как фокус, курсор иметь в текст боксе

2. если открыл форму в модальном режиме, можно сделать её немодальной и наоборот, если да то как??? 
   Спасибо

Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #1 : 03-05-2011 05:06 » 

Цитата
1. форму с именем ... запускаю в модальном режиме, в документе Ворд
у Вас уже стоит установка фокуса на текстбокс и он там находится
Код:
Me.TextBox1.SetFocus

Цитата
2. если открыл форму в модальном режиме, можно сделать её немодальной и наоборот, если да то как??? 

ИМХО никак, только закрыв форму и открыв заново
Записан

I Have Nine Lives You Have One Only
THINK!
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #2 : 03-05-2011 12:30 » 

у Вас уже стоит установка фокуса на текстбокс и он там находится
ОК
тогда запустил форму, на клавишах клавиатуры, жму клавиши ЦЭ, куда он должны попадать, я имею ввиду буквы ЦЭ??
Ответ в текстбокс, так??
но это не происходит, как добиться чтобы это происходило??
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #3 : 04-05-2011 04:41 » 

Посмотрев более внимательно, получаем:
1.
Код:
UserForm_в_файл.Show 0
- это не открытие модапльного окна, а обычного. Чтобы не путаться используйте константы vbModal и vbNormal
2. В методе UserForm_Initialize нежелательно устанавливать параметры объектов, т.к они на этот момент могут еще быть не загружены. В данном методе лучше (желательно) ограничиться установкой свойств самого окна и/или добавлением элементов по необходимости
3. Учитывая пункт 2, Вам надо использовать метод UserForm_Activate
Код:
Private Sub UserForm_Activate()
    Me.TextBox1.SetFocus
End Sub


ЗЫЖ Вам еще повезло, что метод UserForm_Initialize не генерил ошибку, хотя, если бы она была, вопроса не было бы
Записан

I Have Nine Lives You Have One Only
THINK!
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #4 : 04-05-2011 14:40 » 

всё сделал как сказали, пошло, странно с UserForm_Activate я пробовал не шло, проехали
Ваш 2 пункт не понял, сейчас там у меня:
4 строки
Код:
Dim lngFrmHndl As Long, lngStyle As Long
lngFrmHndl = FindWindow(vbNullString, Me.Caption)
lngStyle = GetWindowLong(lngFrmHndl, GWL_STYLE) Or WS_SYSMENU Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
 SetWindowLong lngFrmHndl, GWL_STYLE, lngStyle
что там надо убрать или добавить???
И чтобы счастье было полным подскажите как избавиться с средней кнопкой, из тех трёх которые в углу формы, как сделать недоступной я знаю
и вот после сворачивания формы в угол к кнопке пуск и потом разворачивания её как сделать чтобы курсор был там в Текст боксе, всегда был там, ведь на этой форме он мне в другом месте не нужен
Спасибо
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #5 : 05-05-2011 07:43 » 

Цитата
что там надо убрать или добавить???
надо убрать
Код:
  Me.TextBox1.SetFocus
т.е максимум оставить только то. что работает с самим окном: устанавливает св-ва, размеры, положение, стиль

Цитата
как избавиться с средней кнопкой, из тех трёх которые в углу формы
точно не помню, но, вроде, с помощью API это можно сделать

Цитата
после сворачивания формы в угол к кнопке пуск и потом разворачивания её как сделать чтобы курсор был там в Текст боксе, всегда был там
поэкспериментируйте со свойствами, может что и получится
Записан

I Have Nine Lives You Have One Only
THINK!
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #6 : 05-05-2011 12:57 » 

1
это: Me.TextBox1.SetFocus я как говорил убрал
2
>точно не помню, но, вроде, с помощью API это можно сделать
подскажите как сколько не пробовал или 0 или 1 или 3 кноки ну 2 никак
3
Заменил Лабел на РичТекстБокс, он более мне нравится в отношении с ТекстБоксом
написал процедуру активации и фокус при появлении формы находится в РичТекстБоксе
ОК!!!
после нажатия любой клавиши в обработчике пишу, чтобы фокус был в РичТекстБоксе
и курсор встаёт в крайнее левое положение в РичТекстБоксе
а как указать, чтобы он вставал следом за последним введённым знаком???




Добавлено через 3 часа, 5 минут и 20 секунд:
и ещё после сорачивания и затем разворачивания формы фокус теряется, как его заиметь, что писать понятно, как процедуру назвать???
Спасибо

Добавлено через 21 час, 21 минуту и 56 секунд:
ещё хотел спросить
Строка Private Sub UserForm_Resize() - понятно, когда пользователь нажал Свернуть или Свернуть в окно, можно как-то разграничить какую именно кнопку нажал?Не понял
И если он нажал Развернуть как высчитать, чтобы форма развернулась до такого размера, до максимального размера, чтобы не было места на форме которое не задействовано, ну то есть если форма была маленькая она разворачивается, сама прислоляется к левому верхнему углу монитора, а справа от неё и снизу появляются прямоугольники, как бы не мешают, но если есть возможность почему бы не устранить
То есть чтобы она развернулась при этом маштабировалась на сколько это возможно
« Последнее редактирование: 06-05-2011 13:25 от Ципихович Эндрю » Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #7 : 06-05-2011 13:52 » 

Ципихович Эндрю, ЕЩЕ раз советую начать изучение VBA с ОСНОВ. А вообще - очень рекомендую изучение ООП и базовых понятий.
Читая твои сбивчивые посты каждый раз у меня складывается впечатление, что у тебя восприятие программирования примерно на уровне "МАГИЯ! А назову-ка функцию 'click_button' и посмотрю что изменится!".
Так нельзя. Ты представляешь что такое объект и что такое событие?
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #8 : 06-05-2011 14:43 » 

Ты представляешь что такое объект и что такое событие
Да представляю, отчётливо представляю
если речь об этом Private Sub UserForm_Resize
то внутрь процедуры вешаю MsgBox нажимаю на одну из двух кнопок и вижу сообщение. Мне кажется так нельзя
А Вам так не кажется?
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #9 : 06-05-2011 15:05 » 

Ципихович Эндрю, почему вам "кажется" что так "нельзя"?
Если вы так делаете,то кто ж тут запретит?
Я повторю еще раз фразу, которую уже говорил вам несколько месяцев назад - вы хотите выполнить операции инструментом, который НЕ ПРЕДНАЗНАЧЕН для таких операций. Если вы хотите изменить полностью внешний вид окна - используйте WinAPI на низком уровне, но не трогайте VBA, который создавался для вполне конкретных задач!

Бог мой... только сейчас увидел.....
Код: (Visual Basic)
Private Sub CommandButton0y_Click()

If Len(Trim(Label1.Caption)) = 3 Then MsgBox$ "Введите не более трех цифр и нажмите кнопку или ", vbOKOnly, "Ошибка" Else Label1.Caption = Trim(Label1) & "0"

End Sub

Private Sub CommandButton1y_Click()

If Len(Trim(Label1.Caption)) = 3 Then MsgBox$ "Введите не более трех цифр и нажмите кнопку или ", vbOKOnly, "Ошибка" Else Label1.Caption = Trim(Label1) & "1"

End Sub

Private Sub CommandButton2y_Click()

If Len(Trim(Label1.Caption)) = 3 Then MsgBox$ "Введите не более трех цифр и нажмите кнопку или ", vbOKOnly, "Ошибка" Else Label1.Caption = Trim(Label1) & "2"

End Sub

Private Sub CommandButton3y_Click()

If Len(Trim(Label1.Caption)) = 3 Then MsgBox$ "Введите не более трех цифр и нажмите кнопку или ", vbOKOnly, "Ошибка" Else Label1.Caption = Trim(Label1) & "3"

End Sub

Private Sub CommandButton4y_Click()

If Len(Trim(Label1.Caption)) = 3 Then MsgBox$ "Введите не более трех цифр и нажмите кнопку или ", vbOKOnly, "Ошибка" Else Label1.Caption = Trim(Label1) & "4"

End Sub

Private Sub CommandButton5y_Click()

If Len(Trim(Label1.Caption)) = 3 Then MsgBox$ "Введите не более трех цифр и нажмите кнопку или ", vbOKOnly, "Ошибка" Else Label1.Caption = Trim(Label1) & "5"

End Sub

Private Sub CommandButton6y_Click()

If Len(Trim(Label1.Caption)) = 3 Then MsgBox$ "Введите не более трех цифр и нажмите кнопку или ", vbOKOnly, "Ошибка" Else Label1.Caption = Trim(Label1) & "6"

End Sub

Private Sub CommandButton7y_Click()

If Len(Trim(Label1.Caption)) = 3 Then MsgBox$ "Введите не более трех цифр и нажмите кнопку или ", vbOKOnly, "Ошибка" Else Label1.Caption = Trim(Label1) & "7"

End Sub

Private Sub CommandButton8y_Click()

If Len(Trim(Label1.Caption)) = 3 Then MsgBox$ "Введите не более трех цифр и нажмите кнопку или ", vbOKOnly, "Ошибка" Else Label1.Caption = Trim(Label1) & "8"

End Sub

Private Sub CommandButton9y_Click()

If Len(Trim(Label1.Caption)) = 3 Then MsgBox$ "Введите не более трех цифр и нажмите кнопку или ", vbOKOnly, "Ошибка" Else Label1.Caption = Trim(Label1) & "9"

End Sub

Уважаемый.. Я повторю пожелание - УЧИТЕ языки программирования.
Вы НЕ УМЕЕТЕ писать программы, но сразу хотите "сделать хорошо".
Почитайте про массивы и про циклы, начните все-таки с базовых понятий.
« Последнее редактирование: 06-05-2011 15:14 от Джон » Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #10 : 06-05-2011 16:06 » new

я с Вами согласен, что приведённый Вами отрезок моего кода кожно сделать лучше, ну затратите не 0,5 сек а 0,3 сек или 0,001 сек в данном конкретном примере и что???
А вот то что не работает это да, проблема
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 06-05-2011 18:15 » 

Ципихович Эндрю, так пробелема в том, что язык программирования - язык общения между человеком и машиной.
Попробуйте прочитать, то что Вы пишите сами, и поставьте себя на место машины. И как только... Вы поймете друг друга - Вам откроются неведомые горизонты ПРОГРАММИРОВАНИЯ.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #12 : 07-05-2011 03:48 » 

есть ссылки на реальные примеры этого плана???
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #13 : 10-05-2011 09:54 » 

Ципихович Эндрю, сначала давайте уточним - вы хотите научиться правильно писать программы? Для чего? Профессионально или пока для себя?
Я бы рекомендовал начать с языков типа Паскаль или C++.
Конечно, Visual Basic кажется простым, но в нем очень много "слишком" упрощенных вещей, которые могут запутать или помешать понять многие вещи.
Не бросайтесь писать сразу сложные примеры. Начните с самого простого по элементарному самоучителю.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 10-05-2011 17:13 » 

baldr, я думаю, ему надо "чтобы работало", а как - это не важно. У него нет мотивации улучшать свой процесс разработки, у него есть мотивация на результат. Он очень конкретный, даже слишком.

Я уже молчу давно, не в силах это читать и комментировать. К тому же он и не слушает, он понимает только конкретные куски кода, которые можно вставить у себя, и чтобы заработало. Остальное за пределами его интересов.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines