При Form1.Picture = None неправильно стартует программа.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

При Form1.Picture = None неправильно стартует программа.

Сообщение kibernetics » 28.11.2006 (Вт) 10:42

Замудрёный вопрос занял меня не на шутку. И всё же спрошу бывалых людей.
Хочу прикрутить к главной форме картинку. Картинка находится в базе mdb.

Ставлю свойства Form1 так:
BorderStyle 0 - None
Picture None

Потом в обработке формы по запуску:
Код: Выделить всё
Private Sub Form_Load()
Dim sArr() As Byte
    If ADODB_Connected() Then
        myKeyRst.MoveFirst
        sArr = myKeyRst.Fields(1).Value
       
        Form1.PaintPicture PictureFromBits.PictureFromBits(sArr), 0, 0
        he = Form1.Picture.Height
        wi = Form1.Picture.Width
        Form1.Height = he / 1.77 'тут я незнаю, как перевести height пикселей в твипы
        Form1.Width = wi / 1.77 'тут тоже...
        Form1.AutoRedraw = True
    End If
End Sub


Но картинка не появляется! однако, если прикрутить код к кнопке какой-нибудь, тогда работает.

В общем, серьёзные вопросы:
1. Как добится, чтоб при старте приложения в форму (Picture) грузилась картинка?
2. Можно ли при свойстве Form1.Picture None добится, чтобы приложение было видно на панели задач? Этот вопрос наиболее актуален. Хочется, чтобы приложение не имело "виндошного" окна, но было видно на панели.

П.С. Во втором вопросе имеется ввиду, можно ли это сделать не средствами АПИ? Потому как пример от Terminator'a отражает вполне объёмно использование АПИ в работе с формой.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 28.11.2006 (Вт) 15:52

Извините!
А почему мой пост переместили в VBA?
Я же на ВБ6 пишу.
Этот пост был правильно опубликован в Visual Basic 1-6
Верните пожалуйста назад, господа модераторы.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 28.11.2006 (Вт) 16:32

AutoRedraw должен ставиться до того, как рисуется картинка :)

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 28.11.2006 (Вт) 18:58

2. мне помог keks-n, оказывается достаточно было указать ShowInTaskBar = True. Ужас, как это я сразу не заметил...

Остался только один вопрос. Как сделать, чтобы при старте окно приобретало размер загруженной в него картинки. Изначально Form1.Picture = None...
Или при загрузке это невозможно?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 28.11.2006 (Вт) 19:07

Кстати говоря
Код: Выделить всё
'тут я незнаю, как перевести height пикселей в твипы
Screen.TwipsPerPixelX, Screen.TwipsPerPixelY


А разве сейчас оно не приобретает нужный размер (см. код в первом посте)?

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 28.11.2006 (Вт) 22:01

Попробуй поставить всё в Form_Paint.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 29.11.2006 (Ср) 10:25

Amed
нет, сейчас не приобретает. у меня используется используется не LoadPicture, а PaintPicture. Возращается объект As IPicture.

Вышеупомянутый человек посоветовал сделать так:

Код: Выделить всё
    Me.Height = Me.Image.Height
    Me.Width = Me.Image.Width


теперь хоть возвращаются какие-то цифры, но явно какие-то завышенные. потому что сама картинка, допустим, 237х175 а возращается Me.Image.Width(Height) = 34184(27411)

2Debugger
а можно поподробнее, чтото я не пойму когда вызывается этот метод Form_Paint
Последний раз редактировалось kibernetics 29.11.2006 (Ср) 11:11, всего редактировалось 1 раз.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.11.2006 (Ср) 11:02

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 29.11.2006 (Ср) 16:18

GSerg
чувствую, что где-то рядом хожу, но при такой постановке:
Me.ScaleY Me.Image.Width, vbHimetric, vbPixels ничего не даёт.
Совсем замаялся... :cry: [/b]

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.11.2006 (Ср) 17:30

ScaleY - это функция, а не метод. Двоечник.
К тому же, делать Y на Width - весьма оригинально.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение Хакер » 29.11.2006 (Ср) 17:32

kibernetics
Забавно. Учитывая то что говорил мне kibernetics в асю.

Ладно.

1) kibernetics. Цифры завышенны потому что это твипы. Один твип равен 15 пикселам. Обычно. Однако это зависет от установок масштаба. Чтобы точно узнать сколько твипов в пикселе, юзай свойства TwipsPerPixel(X/Y) объекта Screen.

Метод Form_Paint не существует в природи. Существует Событие Paint класса Form. Оно вызывается когда форму надо пересовать, потому что какое то поверхлежащее окно освободило область формы, либо часть формы не отображавшаяся ранее стала видимой.
Если говорить точнее, то когда приходит сообщение WM_PAINT.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.11.2006 (Ср) 17:41

Хакер
Такой же низачот по хайметрикам.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 29.11.2006 (Ср) 17:57

Один твип равен 15 пикселам


понравилось, пиши еще :lol:

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

Сообщение Хакер » 29.11.2006 (Ср) 17:58

тфу блин. ну, естественно наоборот.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 29.11.2006 (Ср) 18:10

да ладно, все поняли, что описался 8)

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 29.11.2006 (Ср) 19:00

kibernetics писал(а):А можно поподробнее, чтото я не пойму когда вызывается этот метод Form_Paint

Нельзя. Учитывая то, что Form_Paint - это событие...
Просто пиши
Код: Выделить всё

Private Sub Form_Paint
'Твой код прорисовки
End Sub

Дело в том, что событие Load вызывается до того, как форма появляется на экране. В игого ты рисуешь, потом только появляется форма. Уловил?
Последний раз редактировалось Debugger 29.11.2006 (Ср) 19:16, всего редактировалось 1 раз.

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

Сообщение Viper » 29.11.2006 (Ср) 19:14

Debugger писал(а):
kibernetics писал(а):А можно поподробнее, чтото я не пойму когда вызывается этот метод Form_Paint

Нельзя. Учитывая то, что Form_Paint - это процедура...


может все-таки это событие? И вызывается оно при необходимости перерисовки содержимого формы. (Если не вдаваться в подробности)
Весь мир матрица, а мы в нем потоки байтов!

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 29.11.2006 (Ср) 19:23

ничего у меня не выходит...
я уже совсем запутался... функции, процедуры...
процедура Form_Paint вообще не выполняется при старте программы, как ни крути, ставлю Form1.Autoredraw = True безрезультатно.
не пойму вообще, где нужно объявлять, о том, какие границы должны быть у формы. а главное, как перевести эти твипы в хайметрики (или наоборот?)...

покажите практику. теория уже стала убивать мою идею с каждым днём..., я уже вообще стал забывать, что хотел сделать... :?

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

Сообщение Viper » 29.11.2006 (Ср) 19:26

kibernetics писал(а):процедура Form_Paint вообще не выполняется при старте программы, как ни крути


как это?
Весь мир матрица, а мы в нем потоки байтов!

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 29.11.2006 (Ср) 19:34

!Viper!
в том то и дело что никак. я поставил брейк на Form_Paint, нажал F5 но до брейка программа не добирается. А приложение уже запустилось

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 29.11.2006 (Ср) 20:43

До брэйка не добирается т.к. AutoRedraw=True, если поставишь False, событие будет.
Salus populi suprema lex

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

Сообщение Viper » 30.11.2006 (Чт) 8:01

а вот про AutoRedraw = True я и позабыл... Одно из двух - или AutoRedraw = True или событие Paint. Выбирай.
Весь мир матрица, а мы в нем потоки байтов!

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 30.11.2006 (Чт) 10:39

ну а если по правилам, или, как это сказать, более грамотно...
то где же всё-таки необходимо размещать код?
в Form_Load или Form_Paint?

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

Сообщение tyomitch » 30.11.2006 (Чт) 10:46

В зависимости от значения AutoRedraw
Изображение

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 30.11.2006 (Чт) 11:49

AutoRedraw = True

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

Сообщение tyomitch » 30.11.2006 (Чт) 11:59

Тогда, очевидно, в _Load -- потому что _Paint не происходит.
Изображение

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 30.11.2006 (Чт) 12:21

а пример кто-нибудь написать может?

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

Сообщение tyomitch » 30.11.2006 (Чт) 12:41

Сначала объясни человеческим языком, что тебе нужно.
Изображение

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 30.11.2006 (Чт) 13:07

я хочу, чтобы при старте моего приложения, Form1 приобретало размер полученной из базы *.mdb картинки. картинка возращается как IPicture.
проблема в том, что форма не изменяет своих размеров, вернее изменяет, но неправильно. я хочу чтобы форма имела тот размер, что и картинка из базы.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 30.11.2006 (Чт) 13:27

сплэш-скрин что-ли делаешь?
так и говори тогда.
не вижу никаких проблем, в событие загрузки формы все вставляй , а свою картинку выводи в Image со стретчем. Форму подгоняй под размер полученного Image. Убери caption у формы и сделай ее без бордюра.

След.

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

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

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

    TopList