Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Моя Статья

13K
31 января 2007 года
IpatovSoft
62 / / 11.01.2007
Я отсылал админам свою статью месяц назад но что то её не пупликуют.
Чего?

Нестандартная форма.

Первое что бросается в глаза, когда первый раз используешь программу это конечно же её облик, внешний вид. Есть вероятность что если пользователю не понравится внешний вид окна, то он не будет пользоваться продуктом. Значит нам, не побоюсь этого слова, программистам нужно как можно лучше, удобнее, понятнее, красивее и приветливее сделать лицо программы. Нужно как можно эффектнее преподнести программу.
С самого первого появления Windows окна получили прямоугольный стандарт и все User Control’ы ( кнопки, textbox, PictureBox, и др.) тоже не ушли от этого. Уже более 10 лет господствуют эти стандарты, мне кажется нужно вступать в новое, нестандартное поколение окон.
Ну что ж, так как в Visual Basic нет специальной функции для создания «кривых» форм, придётся использовать API функции. С их помощью мы сможем делать даже прозрачные и полупрозрачные окна.
Ну что нужно начинать.
Сначала опишем функции и константы:

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000

А теперь самое интересное мы сделаем форму «кривой» с помощь прозрачного цвета, в его роли будет выступать белый(если нужно, можно сделать и другой).

Private Sub Form_Load()
Dim Ret As Long
Ret = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
Ret = Ret Or WS_EX_LAYERED
SetWindowLong Me.hwnd, GWL_EXSTYLE, Ret
SetLayeredWindowAttributes Me.hwnd, vbWhite, 0, LWA_COLORKEY
End Sub

Ret = GetWindowLong(Me.hwnd, GWL_EXSTYLE) В этой строке мы определяем форму с которой будем работать.

SetLayeredWindowAttributes Me.hwnd, vbWhite, 0, LWA_COLORKEY В этой строке мы удаляем, делаем прозрачным белый цвет.
Теперь просто вставляем на форму заранее нарисованую картинку, где белые места там прозначное место на форме.


Теперь сделаем форму полупрозрачной.
Будем использовать теже самые API.

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000

Private Sub Form_Load()
Dim Ret As Long
Ret = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
Ret = Ret Or WS_EX_LAYERED
SetWindowLong Me.hwnd, GWL_EXSTYLE, Ret
SetLayeredWindowAttributes Me.hwnd, 0, 125, LWA_ALPHA
End Sub

SetLayeredWindowAttributes Me.hwnd, 0, 125, LWA_ALPHA В этой строчке мы делаем форму полупрозрачной. Параметр 125 отвечает за уровень прозрачности(от 0 до 255).

Ещё можно сделать форму по контуру текста.
Вот так.

Описываем функции

Private Declare Function BeginPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function EndPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function PathToRegion Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Private Const RGN_COPY = 5

Private Sub Form_Load()
Const Text = "IpatovSoft"
Dim hRgn As Long
Font.Name = "Times New Roman"
Font.Italic = True
Font.Size = 50
Width = TextWidth(Text)
Height = TextHeight(Text)
BeginPath hdc
Print Text
EndPath hdc
hRgn = PathToRegion(hdc)
SetWindowRgn hWnd, hRgn, False
End Sub

Вот так.
Наверняка есть ещё много способов сделать нестандартную форму.

Это один из множества примеров создания более привлекательного интерфейса, я думаю Вы и сами придумаете много способов как сделать «лицо программы» более приветливым.
308
31 января 2007 года
Комаджу
850 / / 26.07.2006
Может быть, потому не публикуют, что Ваша статья сумбурная. Пишете Вы отвратительно (это я про стилистику). К тому же, если в школе упор делался на точные науки, а не гуманитарные, то для проверки орфографии и знаков препинания есть MS Word. Для статьи-таки важно не только то, что она написано, но также и о чем, и даже как именно она написана.
3
31 января 2007 года
Green
4.8K / / 20.01.2000
Цитата: IpatovSoft

Значит нам, не побоюсь этого слова, программистам...


:D
Для тебя это слово является матерным или наоборот святым?
Не поминай програмиста всуе!

Цитата: IpatovSoft

С самого первого появления Windows окна получили прямоугольный стандарт и все User Control’ы ( кнопки, textbox, PictureBox, и др.) тоже не ушли от этого. Уже более 10 лет господствуют эти стандарты, мне кажется нужно вступать в новое, нестандартное поколение окон.


Как ты думаешь, давно в Windows появилась возможность создания нестандартных окон? Как ты думаешь, никто до тебя их не создавал?
А теперь подумай, почему же тогда окна остались теми же окнами уже не 10, а более 20 лет, а если расматривать концепт, а не реализацию, то уже более 40 лет?

Да потому, что стандартный интерфейс удобнее для освоения, для интуитивного понимания.

Цитата: IpatovSoft

Это один из множества примеров создания более привлекательного интерфейса, я думаю Вы и сами придумаете много способов как сделать «лицо программы» более приветливым.



Поэтому необычный - ещё не значит привлекательный, и уж тем более не значит "более приветливый".

Статей и HowTo на эту тематику море, в т.ч. и на VB.
А что нового твоя записка, которую ты именуешь "статьей", доводит до читателя?

1
01 февраля 2007 года
kot_
7.3K / / 20.01.2000
Цитата: IpatovSoft

... нужно как можно лучше, удобнее, понятнее, красивее и приветливее ...


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

1
01 февраля 2007 года
kot_
7.3K / / 20.01.2000
Кстати, но статья вполне серьезная. Я бы ее, на месте автора, обязательно бы переложил бы на музыку и читал реп.
2
01 февраля 2007 года
squirL
5.6K / / 13.08.2003
а мою опубликовали через неделю. знаешь почему? я дал взятку админам, чтобы потешить свое тщеславие ))))
252
01 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
взяточник ))
269
01 февраля 2007 года
Greenering
892 / / 04.02.2003
а где моя взятка...
За публикацию статьи в этом форуме, а?
252
01 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
скушали )
9
01 февраля 2007 года
Lerkin
3.0K / / 25.03.2003
Ну, совсем парня уели.. :) Он уже и так, разместил свою статью в разделе Отдохнем :)... Самокритичный, однако, участник. А вы с него еще и бабок хотите... Какая гнусная меркантильность! ;)
1
01 февраля 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Lerkin
Ну, совсем парня уели.. :) Он уже и так, разместил свою статью в разделе Отдохнем :)... Самокритичный, однако, участник. А вы с него еще и бабок хотите... Какая гнусная меркантильность!


Ну чего уели - я наоборот поддержал - даже предложил расширить информационное поле - читать реп. А чего, почему например на остросоциальные(или про любоф) темы можно там песни петь и реп читать, а на столь актуальную тему кривых форм (тем более что пользователю сразу станет понятно, каковы руки у, не побоюсь этого слова, программиста) нет ничего подобного? :)
А про бабки так это squirL - ну так а шо вы хотели? Кому сейчас легко? У меня например так копеечки не будет, так я без статей сижу, хоть каждый день шли, так а шо - если ты такой умный так чего ж такой бедный ;)

3
01 февраля 2007 года
Green
4.8K / / 20.01.2000
Стремление донести знания похвально, однако одного стремления мало, нужны ещё и знания.
IpatovSoft, ты описываешь уже давно известные, не раз разжеванные вещи. И излагать их ещё раз не имеет смысла.
НО! Пользуясь изложенным тобой материалом, как достижение какой либо более широкой цели, ты можешь представить на общее обозрение более серьезный и основательный труд.
К примеру. Как я уже говорил, окна остаются окнами на протяжении десятков лет. Почему? Почему новые нестандартные решения отмирают так и не найдя широкого применения? Каким должно быть окно, что бы быть удобным и понятным? Чем не тема для изучения? В принципе это тема для докторской диссертации, что-то типа "Эргономика графических пользовательских интерфейсов". Но можно сделать некоторые шаги в этом направлении.
Или другая тема: как создать (быстро, автоматически) нестандартный интерфейс на базе некоторого шаблона (например, альфа-канала)? Не беда, что на эту тему тоже есть уже информация и даже программные продукты. Может, ты сможешь аккумулировать различные подходы и/или предложить что-то новое.
13K
01 февраля 2007 года
IpatovSoft
62 / / 11.01.2007
Значит моя статья отстой... :( фля, а я старался...
320
01 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
Тебе говорят немного о другом.Перечитай внимательно еще раз пост Green.Тебе говорят о том что не стоит изобретать велосипед, во-первых,а, во-вторых, о том что стоит заняться более
интересными темами.Даже сказано какими конкретно,для примера.Если так сложилось,что окна должны быть прямоугольными - то не пытайся устроить революцию в эргономике.
Навряд ли она увенчается успехом.Т.е. получается что ты не только "изобретаешь велосипед",но еще и выполняешь при этом "сизифов труд".
Стандартные формы - прошли проверку временем,не мы их придумали и не нам их отменять.
Могу сказать о себе лично - когда я вижу нестандартную форму(допустим ромбовидное окно овальные или квадратные кнопки) - я теряюсь,мне хочется поскорее ее закрыть.Даже не могу обьяснить почему.:)
552
01 февраля 2007 года
Ivanhoe
373 / / 30.04.2006
Если отход от прямоугольности невелик - это еще ничего. Типичный пример - Nero StartSmart. Т.е. просто скругленные краешки у окна. Ну, в этом ключе.
252
02 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
почему помещения в основном прямоугольные (по проэкциям) ?
почему автомобили прямоугольные при взгляде сверху ?
потому что у большинства людей психология такая - проще образно думать с помощью прямоугольников и эллипсов ( квадрат и круг ) чем как то ещё ) . можно ассоциировать криволинейные элементы с какими то общеизвестными объектами , но это сложно .
3
02 февраля 2007 года
Green
4.8K / / 20.01.2000
Земля тоже круглая из-за психологии людей? :)
IMHO ты путаешь причину и следствие.
252
05 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
психология создателя :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог