Window docking BETA test

23 отговора 361 прегледа
#1

Window docking BETA test

Imam problem prikachvaneto na prozorec kum kraq na ekrana. Dosta rabotih po tazi istoriq i spored men skalupih neshto naitina hubavo. Tukmo si mislih, che sum izdokaral rabotata, kogato se okaza che vednnuj vurvi, drug put ne. Ne moga da usetq kude e problema (sumnqvam se dori v Winbouz-a). Napravih edna programka za demonstraciq, zashtoto ne iskam da izkarvam celiq kod tuk. Kachih source-a (4KB) v internet na adres:

[линк]

Nqkoi shte mi pomogne li?

100x in advance

by Wise Guy
[email protected]
Отговор
в отговор на WiseGuy #2

EXE i Help

Eto exe i help file (ako moga da go narecha taka)

[линк] - exe demo
[линк] - help file

Aide nqkoi da kaje neshto

by Wise Guy
[email protected]
Отговор
в отговор на WiseGuy #3

Re: EXE i Help

Eto kazvam neshto:
njamam Delphi 6 i mi dava che ne znae DesignSize
propertyto kakwo e.
Osven towa mi lispva Variants.dcu.
Dali wopshte moje da trugne pod Delphi 5?

Отговор
в отговор на naki #4

Re: EXE i Help

ne si katcil palnata instalatcia na Delphi 6 , za tova ne ti katva Variants.dcu!
a drugata osobenost pri nego e, tce kogato izpolzvash promenlivi tip Variant, triabva dopalnitelno sam da dobavish unit-a , inatce ne ti gi priema i dava greshka

Отговор
в отговор на Eмилиo #5

Re: EXE i Help

Ama az njamam Delphi 6...

Отговор
в отговор на naki #6

Re: EXE i Help

opa ne sam dogledal dobre...
natci v po niskite versii na Delphi, Variants.dcu e v drugite sistemni biblioteki, taka tce za da ti tragne , prosto go mahni ot tam deto ti go tarsi, i vsitcko ste tragne :)

Отговор
в отговор на WiseGuy #8

Re: Window docking BETA test

Прав си, не работи добре...
С малки стойности на оня ЕдитБокс нещо не става...
Па и не знам дали си забелязал, ама може част от прозореца
да излезе извън екрана, тъй като курсора на мишката
"се придърпва" като връщаш чрез програмата прозореца
където му е мястото.
Аре от мен да мине, ще ти го направя...
Не знам дали си чел моя пост в Програмисти за custom window caption.
Сега тия дни си играх с Custom About Box с използване на
ShellAbout - направих иконата на моята програма в Аbout Boxa
да се движи нагоре надолу, Copyright-a да не е на Майкрософт ;),
и да е шарено. Въобще ми е забавно да си играя с Win32 API,
че и мишката използвам с разд. способност под 1 пиксел (с ДирестХ).
Така че не виждам как няма и това да направя...

Отговор
в отговор на WiseGuy #9

Re: Window docking BETA test

Абе я кажи ти какво искаш,
прозореца да се закачи за някой от краищата на екрана, т.е. да мърда
само по X, но не и по Y или обратното,
или пък да си ходи където си иска, но винаги да се вижда целия,
т.е. да не излиза от екрана?
Щото и двете са възможни...

Don't do it the Delphi way, do it the Win32 API way...

Отговор
в отговор на WiseGuy #10

Re: Window docking BETA test

Ей WiseGuy, отде изкопа
тая константа SC_DRAGMOVE?
В целия MSDN я няма...
Я кажи за какво служи (то си личи ама...)

Отговор
в отговор на naki #11

Re: Window docking BETA test

Ta tova s About Box-a stava kato mu hvanesh Handle na controlite nali ?

Pone taka sus sigurnost mojesh da si prevedesh nqkoi standartni dialozi. Abe i az sum chel tui onui

SC_DRAGMOVE qvno nqkoi go e prosledil, 4e Windows-a si go izpolzva. Az go vidqh v edin tip za mestene na prozoreca 4rez kakuvto ti padne control

Za docking-a... Trqbva mi neshto kato na Winamp. Moeto v momneta e sushtoto samo deto ne raboti za dolu i dqsno. Za izlizaneto ot ekrana ne se trevoji. Samo trqbva da se obraboti i tozi variant. Sega gledam purvo da se opravq s dilemata, zashto ot ednata strana stava a ot drugata ne

by Wise Guy
[email protected]
Отговор
в отговор на WiseGuy #12

Re: Window docking BETA test

Това ми е субкласващата функция:

LPRECT rect;
// при оразмеряване
// за мене няма проблем да се ресайзва,
// ти си си направил твоя прозорец да не може
// да се ресайзва
if(Message.Msg==WM_EXITSIZEMOVE)
{

if(dir==1)
Left=desktop.left;
else if(dir==2)
Left=desktop.right-Width;
else if(dir==3)
Top=desktop.top;
else if(dir==4)
Top=desktop.bottom-Height;
}
// тука се прави проверка дали се сменя размера или
// мястото на таскбара
if(Message.Msg==WM_SETTINGCHANGE)
{
if(Message.WParam==SPI_SETWORKAREA)
{
// тази фунция е ключът към всичко
// викам я и в началото на програмата за да имам началните
// размери на десктопа (клиентската част)
// а тук се опреснява при промяна
// като глобална променлива имам RECT desktop
SystemParametersInfo(SPI_GETWORKAREA,NULL,&desktop,NULL);
// и се лепи на новото място
if(dir==1)
Left=desktop.left;
else if(dir==2)
Left=desktop.right-Width;
else if(dir==3)
Top=desktop.top;
else if(dir==4)
Top=desktop.bottom-Height;
}
}
if (Message.Msg == WM_MOVING)
{
rect=(LPRECT)Message.LParam;
if(left->Checked)
{

rect->left=desktop.left;
rect->right=desktop.left+Width;
if(rect->top<desktop.top)
{
rect->top=desktop.top;
rect->bottom=desktop.top+Height;
}
if(rect->bottom>desktop.bottom)
{
rect->top=desktop.bottom-Height;
rect->bottom=rect->top+Height;
}
}
else if(right->Checked)
{
rect->left=desktop.right-Width;
rect->right=desktop.right;
if(rect->top<desktop.top)
{
rect->top=desktop.top;
rect->bottom=desktop.top+Height;
}
if(rect->bottom>desktop.bottom)
{
rect->top=desktop.bottom-Height;
rect->bottom=rect->top+Height;
}
}
else if(up->Checked)
{
rect->top=desktop.top;
rect->bottom=desktop.top+Height;
if(rect->left<desktop.left)
{
rect->left=desktop.left;
rect->right=desktop.left+Width;
}
if(rect->right>desktop.right)
{
rect->left=desktop.right-Width;
rect->right=desktop.right;
}
}
else if(down->Checked)
{
rect->top=desktop.bottom-Height;
rect->bottom=rect->top+Height;
if(rect->left<desktop.left)
{
rect->left=desktop.left;
rect->right=desktop.left+Width;
}
if(rect->right>desktop.right)
{
rect->left=desktop.right-Width;
rect->right=desktop.right;
}

}
}
WndProc(Message);


Модифицирай го така че да не е твърдо залепено
като в мойта програма, а да е както ти го искаш.
А ти щом искаш да е като УинАмп значи трябва
да имаш поне 2 (ДВА) прозореца, а не 1 (ЕДИН).

Редактирано от naki на

Отговор
в отговор на naki #13

Re: Window docking BETA test

А УинАмп поне на моя компютър има бъг -
като имаш главен прозорец и плейлист прозорец
и местиш главния се местят и двата.
Да ама иконите по десктопа премигват
все едно че:
v - Плейлист на УинАмп
*** **** < - главен прозорец на УинАмп
***
***
е там вдясно дето е под главния прозорец мига, като
че ли прозореца е един, но е с прозрачност, която обаче
не е много добре направена.

Редактирано от naki на

Отговор
в отговор на naki #14

Re: Window docking BETA test

za workareata go vidqh

q vij tova tvoito mojesh li akto e zakacheno da go otlepish s klaviaturata (ot system menu-to) ili kato go mestish cursor-a s po edin pixel. Mesteneto zapochva kato si stignal drugiq krai na ekrana. V tova se sustoi vuprosa...

by Wise Guy
[email protected]
Отговор
в отговор на WiseGuy #15

Re: Window docking BETA test

Не може!
Като се залепи за някой от краищата на екрана,
никоя сила на света (клавиатура и т.н.) не е в състояние да
го отлепи докато не дадеш "Отлепи" от менюто.

Отговор
в отговор на WiseGuy #16

Re: Window docking BETA test

Това за другия край нещо не го разбрах...

Отговор
в отговор на WiseGuy #17

Re: Window docking BETA test

Trqbva da moje da se mesti po normalen nachin i samo kato se namira v dadena zona da se prilepq. Awe ti pusnal li si EXE-to mi da vidish za kakvo stava vurpos..

by Wise Guy
[email protected]
Отговор
в отговор на WiseGuy #18

Re: Window docking BETA test

Най-после разбрах какво искаш да направиш...
Но сега съм зает и нямам време да го правя...
Надявам се, че това за WorkArea-та ще те приближи
към достигането до работеща както ти искаш програма.
И все пак смятам, че докинга основно служи когато
имаш поне ДВА прозореца.

Отговор
в отговор на naki #19

Готов си, мой човек!

Пратих ти EXE на мейла.
Ще ти пратя и сорс ако си доволен от творението
ми.

Отговор