Window docking BETA test
23 отговора
361 прегледа
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]
[линк]
Nqkoi shte mi pomogne li?
100x in advance
by Wise Guy
[email protected]
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]
[линк] - exe demo
[линк] - help file
Aide nqkoi da kaje neshto
by Wise Guy
[email protected]
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?
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?
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
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
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 :)
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 :)
Re: Window docking BETA test
Прав си, не работи добре...
С малки стойности на оня ЕдитБокс нещо не става...
Па и не знам дали си забелязал, ама може част от прозореца
да излезе извън екрана, тъй като курсора на мишката
"се придърпва" като връщаш чрез програмата прозореца
където му е мястото.
Аре от мен да мине, ще ти го направя...
Не знам дали си чел моя пост в Програмисти за custom window caption.
Сега тия дни си играх с Custom About Box с използване на
ShellAbout - направих иконата на моята програма в Аbout Boxa
да се движи нагоре надолу, Copyright-a да не е на Майкрософт ;),
и да е шарено. Въобще ми е забавно да си играя с Win32 API,
че и мишката използвам с разд. способност под 1 пиксел (с ДирестХ).
Така че не виждам как няма и това да направя...
С малки стойности на оня ЕдитБокс нещо не става...
Па и не знам дали си забелязал, ама може част от прозореца
да излезе извън екрана, тъй като курсора на мишката
"се придърпва" като връщаш чрез програмата прозореца
където му е мястото.
Аре от мен да мине, ще ти го направя...
Не знам дали си чел моя пост в Програмисти за custom window caption.
Сега тия дни си играх с Custom About Box с използване на
ShellAbout - направих иконата на моята програма в Аbout Boxa
да се движи нагоре надолу, Copyright-a да не е на Майкрософт ;),
и да е шарено. Въобще ми е забавно да си играя с Win32 API,
че и мишката използвам с разд. способност под 1 пиксел (с ДирестХ).
Така че не виждам как няма и това да направя...
Re: Window docking BETA test
Абе я кажи ти какво искаш,
прозореца да се закачи за някой от краищата на екрана, т.е. да мърда
само по X, но не и по Y или обратното,
или пък да си ходи където си иска, но винаги да се вижда целия,
т.е. да не излиза от екрана?
Щото и двете са възможни...
Don't do it the Delphi way, do it the Win32 API way...
прозореца да се закачи за някой от краищата на екрана, т.е. да мърда
само по X, но не и по Y или обратното,
или пък да си ходи където си иска, но винаги да се вижда целия,
т.е. да не излиза от екрана?
Щото и двете са възможни...
Don't do it the Delphi way, do it the Win32 API way...
Re: Window docking BETA test
Ей WiseGuy, отде изкопа
тая константа SC_DRAGMOVE?
В целия MSDN я няма...
Я кажи за какво служи (то си личи ама...)
тая константа SC_DRAGMOVE?
В целия MSDN я няма...
Я кажи за какво служи (то си личи ама...)
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]
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]
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 (ЕДИН).
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 на
Re: Window docking BETA test
А УинАмп поне на моя компютър има бъг -
като имаш главен прозорец и плейлист прозорец
и местиш главния се местят и двата.
Да ама иконите по десктопа премигват
все едно че:
v - Плейлист на УинАмп
*** **** < - главен прозорец на УинАмп
***
***
е там вдясно дето е под главния прозорец мига, като
че ли прозореца е един, но е с прозрачност, която обаче
не е много добре направена.
като имаш главен прозорец и плейлист прозорец
и местиш главния се местят и двата.
Да ама иконите по десктопа премигват
все едно че:
v - Плейлист на УинАмп
*** **** < - главен прозорец на УинАмп
***
***
е там вдясно дето е под главния прозорец мига, като
че ли прозореца е един, но е с прозрачност, която обаче
не е много добре направена.
Редактирано от naki на
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]
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]
Re: Window docking BETA test
Не може!
Като се залепи за някой от краищата на екрана,
никоя сила на света (клавиатура и т.н.) не е в състояние да
го отлепи докато не дадеш "Отлепи" от менюто.
Като се залепи за някой от краищата на екрана,
никоя сила на света (клавиатура и т.н.) не е в състояние да
го отлепи докато не дадеш "Отлепи" от менюто.
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]
by Wise Guy
[email protected]
Re: Window docking BETA test
Най-после разбрах какво искаш да направиш...
Но сега съм зает и нямам време да го правя...
Надявам се, че това за WorkArea-та ще те приближи
към достигането до работеща както ти искаш програма.
И все пак смятам, че докинга основно служи когато
имаш поне ДВА прозореца.
Но сега съм зает и нямам време да го правя...
Надявам се, че това за WorkArea-та ще те приближи
към достигането до работеща както ти искаш програма.
И все пак смятам, че докинга основно служи когато
имаш поне ДВА прозореца.
Готов си, мой човек!
Пратих ти EXE на мейла.
Ще ти пратя и сорс ако си доволен от творението
ми.
Ще ти пратя и сорс ако си доволен от творението
ми.