:: Visual Foxpro, Foxpro for DOS
Тень на Shape
LED

Сообщений: 204
Дата регистрации: 22.07.2006
Всем привет.
Вопрос банальный, но очень нужно решение.

На форме установлен объект Shape
BackStyle 0 - Transparent (прозрачный)

Под ним объекты Label

Как установить тень в Shape с помощью его же свойств и методов, а не лепить к нему тень другими способами.
Ratings: 0 negative/0 positive
Re: Тень на Shape
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Напиши что-нибудь в его Init, типа ThisForm.AddObject еще один Shape с координатами как у родителя, но смещенными...
Ratings: 0 negative/0 positive
Re: Тень на Shape
LED

Сообщений: 204
Дата регистрации: 22.07.2006
Спасибо of63
Да сделал. А что, функциями самого Shape это сделать нельзя?
Еще такое дополнение к этому вопросу. Как сделать из Shape кнопку, т.е. когда нажимаешь на Shape левой кнопкой мыши, Shape как бы утапливался и напоминал командную кнопку.
Поискал на форуме, пока не нашел.
Также хотел сделать тень к окну формы, тоже не нашел подходящего решения. Решение, где одно окно накладывается на другое не так смотрится. Есть ли решение с API?
Ratings: 0 negative/0 positive
Re: Тень на Shape
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Я ведь посоветовал даже не представляя, что такое "тень", но только зная нативные возможности фокса (типичные для любого ООП):
- у визуальных обьектов есть Init
- можно создавать обьекты "на лету"

> функциями самого Shape это сделать нельзя
Не знаю, теней (как в FPD) вроде не встречал. Если нет свойства "тень включить", значит нет.
Можно попробовать заменить Shape на Command или CheckBox (Style=1), положив его ПОД обьекты на нём, собственно, как Shape. У них более другие видеоэффекты. А можно и из второго Shape же сделать, заменяя один другим по их событиям Click. Или обьекты Image - картинки любого содержания...
Вобщем надо делать из того, что есть в нативном фоксе.

> сделать тень к окну формы
Не представляю как, это уже ОС рулит формой, Thems. Нативщиной можно только сэмулировать что-то, раскрашивая внутренность формы. Лучше бы этого не делать вообще. Фокс - он не настоящий графический инструмент, он скорее большой калькулятор, или БД...
Ratings: 0 negative/0 positive
Re: Тень на Shape
Alsim
Автор

Сообщений: 3636
Откуда: Екатеринбург
Дата регистрации: 17.11.2004
Выдрал у себя, кнопка нарисована Шейпами, добавлена картинка и командбуттон, чтобы всё это получало фокус.
Целиком класс положить не могу, там очень много всего, думаю идея понятна.
ps пользуюсь этими кнопками больше 15лет, Фокс 7
Часть текста скрыта
**************************************************
*-- Class: vert_label_but (d:\work_2003\ptica\my_buh_ip_ptica\libs\main_class.vcx)
*-- ParentClass: container
*-- BaseClass: container
*-- Time Stamp: 11/19/04 12:57:06 PM
*
DEFINE CLASS vert_label_but AS container
Width = 63
Height = 60
BackStyle = 0
BorderWidth = 1
*-- подчеркивать при наезде
hot_label = (.T.)
*-- стиль кнопки 0-обычная,1-горячая
but_style = (1)
*-- имя процедуры на форме
procedura = ("thisform.but_control")
*-- имя кнопки для процедуры
butname = ("new")
*-- Specifies the text that appears as a ToolTip for a control.
tooltiptext = "новая строка"
Name = "vert_label_but"
mouse_proc = .F.
ADD OBJECT command1 AS commandbutton WITH ;
AutoSize = .F., ;
Top = -10, ;
Left = -10, ;
Height = 0, ;
Width = 0, ;
Caption = "", ;
Style = 1, ;
TabStop = .F., ;
Name = "Command1"
ADD OBJECT image1 AS image WITH ;
Picture = "new1_32.bmp", ;
BackStyle = 0, ;
Enabled = .T., ;
Height = 32, ;
Left = 15, ;
Top = 5, ;
Width = 32, ;
ColorSource = 4, ;
Name = "Image1"
ADD OBJECT label1 AS label WITH ;
AutoSize = .T., ;
FontSize = 8, ;
BackStyle = 0, ;
Caption = "Добавить", ;
Height = 16, ;
Left = 5, ;
Top = 40, ;
Width = 53, ;
Name = "Label1"
ADD OBJECT shape1 AS shape WITH ;
Top = -12, ;
Left = 60, ;
Height = 8, ;
Width = 7, ;
BackStyle = 0, ;
BorderStyle = 1, ;
BorderWidth = 1, ;
Name = "Shape1"
PROTECTED PROCEDURE mouse_proc_assign
Lparameters vNewVal
*To do: Modify this routine for the Assign method
IF this.Enabled= .T.
Do Case
Case vNewVal=="leave"
If This.hot_label
This.label1.FontUnderline = .F.
Endif
Do Case
Case This.but_style=1
This.brdLine1.BorderColor=This.BackColor
This.brdLine2.BorderColor=This.BackColor
This.brdLine3.BorderColor=This.BackColor
This.brdLine4.BorderColor=This.BackColor
Endcase
Case vNewVal=="enter"
If This.hot_label
This.label1.FontUnderline = .T.
Endif
This.brdLine1.BorderColor=Rgb(255,255,255)
This.brdLine2.BorderColor=Rgb(255,255,255)
This.brdLine3.BorderColor=Rgb(128,128,128)
This.brdLine4.BorderColor=Rgb(128,128,128)
Endcase
ENDIF
This.mouse_proc = m.vNewVal
ENDPROC
*-- исполняет свой метод
PROTECTED PROCEDURE myvalue
IF !EMPTY(this.butname) AND !EMPTY(this.procedura)
LOCAL lcProc
lcProc=this.procedura+[("]+this.butname+[")]
&lcProc
ENDIF
ENDPROC
PROCEDURE enabled_assign
Lparameters vNewVal
*To do: Modify this routine for the Assign method
Do Case
Case vNewVal=.F.
This.image1.Enabled= .F.
This.command1.Enabled =.F.
This.label1.Enabled = .F.
This.shape1.Enabled = .F.
Case vNewVal=.T.
This.image1.Enabled= .T.
This.command1.Enabled =.T.
This.label1.Enabled = .T.
This.shape1.Enabled = .T.
Endcase
This.Enabled = m.vNewVal
ENDPROC
PROCEDURE SetFocus
this.command1.SetFocus()
ENDPROC
PROCEDURE MouseDown
LPARAMETERS nButton, nShift, nXCoord, nYCoord
*!* If This.hot_label
*!* This.shape1.MousePointer= 99
*!* this.shape1.MouseIcon='.\LIBS\HMOVE.CUR'
*!* Endif
this.brdLine1.bordercolor=RGB(128,128,128)
this.brdLine2.bordercolor=RGB(128,128,128)
this.brdLine3.bordercolor=RGB(255,255,255)
this.brdLine4.bordercolor=RGB(255,255,255)
ENDPROC
PROCEDURE Init
this.Enabled=this.Enabled
This.shape1.ToolTipText=This.ToolTipText
This.BorderWidth=0
This.shape1.BorderStyle=0
This.shape1.BorderWidth=0
This.shape1.Left=0
This.shape1.Width=This.Width
This.shape1.Top=0
This.shape1.Height=This.Height
If This.hot_label
This.shape1.MousePointer= 99
this.shape1.MouseIcon="hand-m.cur"
Endif
This.AddObject("brdLine1","line")
This.AddObject("brdLine2","line")
This.AddObject("brdLine3","line")
This.AddObject("brdLine4","line")
This.brdLine1.Top=0 &&гориз верх
This.brdLine1.Left=0
This.brdLine1.Width=This.Width
This.brdLine1.Height=0
This.brdLine2.Top=0 &&верт лево
This.brdLine2.Left=0
This.brdLine2.Width=0
This.brdLine2.Height=This.Height
This.brdLine3.Top=0 &&верт право
This.brdLine3.Left=This.Width-1
This.brdLine3.Width=0
This.brdLine3.Height=This.Height
This.brdLine4.Top=This.Height-1 &&гориз низ
This.brdLine4.Left=0
This.brdLine4.Width=This.Width
This.brdLine4.Height=0
Do Case
Case This.but_style=0
This.brdLine1.BorderColor=Rgb(255,255,255)
This.brdLine2.BorderColor=Rgb(255,255,255)
This.brdLine3.BorderColor=Rgb(128,128,128)
This.brdLine4.BorderColor=Rgb(128,128,128)
Case This.but_style=1
This.brdLine1.BorderColor=This.BackColor
This.brdLine2.BorderColor=This.BackColor
This.brdLine3.BorderColor=This.BackColor
This.brdLine4.BorderColor=This.BackColor
Endcase
This.brdLine1.Visible=.T.
This.brdLine2.Visible=.T.
This.brdLine3.Visible=.T.
This.brdLine4.Visible=.T.
ENDPROC
PROCEDURE Click
IF this.Enabled= .T.
LOCAL lcCurSet
lcCurSet=SET("Cursor")
this.MouseDown()
SET CURSOR OFF
WAIT "" TIMEOUT 0.01
SET cursor &lcCurSet
this.MouseUp()
this.mouse_proc="leave"
ENDIF
ENDPROC
PROCEDURE MouseEnter
LPARAMETERS nButton, nShift, nXCoord, nYCoord
ENDPROC
PROCEDURE MouseUp
LPARAMETERS nButton, nShift, nXCoord, nYCoord
*!* If This.hot_label
*!* This.shape1.MousePointer= 99
*!* this.shape1.MouseIcon='.\LIBS\HARROW.CUR'
*!* Endif
this.command1.SetFocus()
this.mouse_proc="enter"
this.value()
this.myvalue()
ENDPROC
*-- Specifies the current state of a control.
PROCEDURE value
ENDPROC
PROCEDURE command1.Click
this.Parent.Click()
ENDPROC
PROCEDURE shape1.MouseUp
LPARAMETERS nButton, nShift, nXCoord, nYCoord
this.Parent.MouseUp
ENDPROC
PROCEDURE shape1.MouseDown
LPARAMETERS nButton, nShift, nXCoord, nYCoord
this.Parent.MouseDown
ENDPROC
PROCEDURE shape1.MouseLeave
LPARAMETERS nButton, nShift, nXCoord, nYCoord
this.Parent.mouse_proc="leave"
ENDPROC
PROCEDURE shape1.MouseEnter
LPARAMETERS nButton, nShift, nXCoord, nYCoord
this.Parent.mouse_proc="enter"
ENDPROC
ENDDEFINE
*
*-- EndDefine: vert_label_but
**************************************************




Исправлено 1 раз(а). Последнее : Alsim, 21.10.20 18:43
Ratings: 0 negative/0 positive
Re: Тень на Shape
Taran

Сообщений: 13625
Откуда: Красноярск
Дата регистрации: 16.01.2008
Эх... 90ми годами завеяло. Как все было интересно и вольготно.
Лепи шашечьки, а ехать можно не спеша. Или не ехать.
Ratings: 0 negative/0 positive
Re: Тень на Shape
LED

Сообщений: 204
Дата регистрации: 22.07.2006
Alsim спасибо. Попробую.

Нашел на форуме тему Возможно ли в Лисе реализовать полупрозрачную тень
Фрагмент написал Piva

Создал форму F1.scx

В Init этой формы вставил
this.adproperty('shadow',.null.)
DO form с:\F2.scx name thisform.Shadow noshow linked with this
Создал форму F2.scx
В Init прописал

#DEFINE LWA_COLORKEY 1
#DEFINE LWA_ALPHA 2
*Constants for SetWindowLong and GetWindowLong
#DEFINE GWL_EXSTYLE -20
#DEFINE WS_EX_LAYERED 0x00080000
LOCAL lnFlags
*The form's window must be set to Layered, so that it is drawn
* in a separate layer.
lnFlags = GetWindowLong(.HWND, GWL_EXSTYLE) &&Gets the existing flags from the window
lnFlags = BITOR(lnFlags, WS_EX_LAYERED) &&Appends the Layered flag to the existing ones
SetWindowLong(.HWND, GWL_EXSTYLE, lnFlags) &&Sets the new flags to the window
SetLayeredWindowAttributes(.HWND, .BackColor, 100, LWA_ALPHA)
При запуске формы F1 появляется ошибка
No PARAMETR Statement is found.
И указывает на форму F2.scx

Поставил в форме F2.scx в Init
LPARAMETERS param1
Какой параметр ставить?
Подскажите что надо сделать в этой ситуации.



Исправлено 1 раз(а). Последнее : LED, 22.10.20 20:41
Ratings: 0 negative/0 positive
Re: Тень на Shape
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
А что, собственно, ожидалось от показанного кода? Зачем вторая форма? Что она должна делать?


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Тень на Shape
LED

Сообщений: 204
Дата регистрации: 22.07.2006
Надо создать тень под формой F1



Исправлено 1 раз(а). Последнее : LED, 22.10.20 21:23
Ratings: 0 negative/0 positive
Re: Тень на Shape
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Taran
Эх... 90ми годами завеяло. Как все было интересно и вольготно.
Лепи шашечьки, а ехать можно не спеша. Или не ехать.

Когда коту разработчику нечем заняться, он рисует тени

Вообще даже немного завидую - видать всё остальное уже так отлично сделано, что осталось лишь красоту наводить.


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Тень на Shape
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Похоже, и в волросах оформления главные асы могут только фукать, хотя наведение красоты это тоже часть программирования.

Примеры объектов с тенями имеются в wizards\wizstyle.vcx.
"Утапливаемую" кнопку можно создать из объекта OptionButton.
Для улучшения оформления придумано немало WinApi-функций.
Ratings: 0 negative/0 positive
Re: Тень на Shape
LED

Сообщений: 204
Дата регистрации: 22.07.2006
lulgu спасибо. Посмотрю.



Исправлено 3 раз(а). Последнее : LED, 05.11.20 21:54
Ratings: 0 negative/0 positive
Re: Тень на Shape
Chemberzhy

Сообщений: 13142
Откуда: Измаил
Дата регистрации: 28.04.2009
LED
No PARAMETR Statement is found.

LED
thisform.Shadow


------------------
Что-то с памятью моей стало, всё что было не со мной- помню.
Ratings: 0 negative/0 positive
Re: Тень на Shape
Sawradym

Сообщений: 2244
Откуда: Винница
Дата регистрации: 15.05.2007
DO form с:\F2.scx name thisform.Shadow noshow linked with this
Вы вызываете форму с параметром this, вот его и нужно принять в init формы f2.
Ratings: 0 negative/0 positive
Re: Тень на Shape
LED

Сообщений: 204
Дата регистрации: 22.07.2006
Вот я и ставлю в форму f2.scx в Init
LPARAMETERS this

Выходит сообщение с ошибкой
Какую переменную надо ставить после LPARAMETERS
Если ставлю любую, то не проходит

lnFlags = GetWindowLong(.HWND, GWL_EXSTYLE) &&Gets the existing flags from the window

Ошибка.
Ratings: 0 negative/0 positive
Re: Тень на Shape
Sawradym

Сообщений: 2244
Откуда: Винница
Дата регистрации: 15.05.2007
Очевидно, что код, который Вы привели - это лишь фрагмент в котором входной параметр никак не используется. Также очевидно что этот фрагмент обрамлен With EndWith, потому и ошибка по поводу .HWND
Ratings: 0 negative/0 positive
Re: Тень на Shape
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
LED
Вот я и ставлю в форму f2.scx в Init
LPARAMETERS this

Выходит сообщение с ошибкой
Какую переменную надо ставить после LPARAMETERS
Если ставлю любую, то не проходит

lnFlags = GetWindowLong(.HWND, GWL_EXSTYLE) &&Gets the existing flags from the window

Ошибка.
Трындец... Вы совсем не различаете понятия "формальный параметр" и "значение параметра"?
После LPARAMETERS ставят имя, под которым параметр будет обрабатываться в нижестоящем коде. Вы этого не знаете?


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Тень на Shape
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
LED
Надо создать тень под формой F1
И вы решили создать её путём помещения под неё еще одной, полупрозрачной формы? И не боитесь сложностей с координированием этих форм? Что вы увидите во время перетаскивания формы по экрану?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Тень на Shape
Божья_коровка

Сообщений: 25731
Дата регистрации: 23.08.2001
LED
Я не совсем разобрался в коде который создал Piva
Если можно было бы связаться с Piva, я его бы попросил, но у меня нет его почты.
Напишите ему в ЛС тут на форуме, он порой отвечает. Еще его можно точно "поймать" на форуме 16 января и 10 августа.


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...




Исправлено 2 раз(а). Последнее : Божья_коровка, 23.10.20 13:42
Ratings: 0 negative/0 positive
Re: Тень на Shape
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Мтк, тоже, с тенями заморачиваться для вычислительной программы, это немного перебор... )
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 20 (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика