Diskuze: Pohybování s oknem
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 29 zpráv z 29.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
tohle má dělat, že pokud klepneš na form a táhneš myší, že se okno bude
hýbat?
Zkus tohle
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
int WM_NCHITTEST = 0x84;
if (m.Msg == WM_NCHITTEST)
{
int HTCLIENT = 1;
int HTCAPTION = 2;
if (m.Result.ToInt32() == HTCLIENT)
m.Result = (IntPtr)HTCAPTION;
}
}
Jen to přidej jako metodu do formu, do kterého potřebuješ.
(nejjednodušší použití)
Pak form reaguje jako rámeček.
No záleží na tom, kde to používáš. Pokud chceš maximalizaci zakázat
celému formu tak stačí Form1.maximize = false nebo přímo v designeru
klepneš na form a dole je Maximize tak dáš hodnotu false.
Jenom té fci co jsem ti poslal bychom museli nějak přepracovat, tohle funguje
tak, že předává vše co jí myší dáš tomu rámečku nebo titlebaru jak
se tomu říká.
Ale to jsem chtěl - nepotřebuji specifikovat jak, nebo kde musí hráč
kliknout. 
Takže potřebuješ aby když klepneš na form a táhneš aby se ti okno hýbalo a když klepneš 2x aby se nic nestalo. A maximalizce má fungovat jenom při klepnutí na příslušné tlačítko v titlebaru?
Ne - maximalizovat okno stejně nejde - nastavil jsem pevnou velikost okna - jen nechci, aby když na to hráč dvakrát klikne, aby se to zbytečně maximalizovalo - maximalizuje se to, ale velikost nezmění - zbytečně to s oknem hází - a když to hráč udělá omylem,...
Tím ne mám na mysli, ne nechci aby se to maximalizovalo příslušným
tlačítkem - vypadá to tam docela přísně - to ne - to se omlouvám.
Mám form absolutně osekaný - jen
prázdné okno - všechny tlačítka si dělám sám a maximalizaci
nechci,...
Stačí nastavit Maximize na false, jak jsem již psal...
No ve form properties je maximálně maximize box.
Ale nastavím to tím příkazem v
inicializaci,...
To je jedno a to samé 
No vlastně když se podíváš do Form1.designer tak zjistíš, že vše co
nastavuješ v grafickém rozhraní IDE sám přepisuje do tohoto souboru. Takže
se vlastně nastaví maximize na true a pak jej v programu anstavíš ty na
false, takže se jeho hodnota 2x změní. To ničemu nevadí, jen je to takový,
že já když se něco takovýho děje, že mě to štve a furt si do toho rejpu

Tak ten příkaz mi to nebere. Zkoušel jsem kombinovat. Když chci minimalizovat (tím mojím tlačítkem), tak používám FormWindowState (to mi funguje).
Ale když kliknu dvakrát myší, tak se mi to maximalizuje - tak mám
halucinace? 
Já nevěděl jak to přesně je:
this.MaximizeBox = false;
Maximize box mám false - to jsem dělal ještě před 2 hodinama. Pak jsem
chtěl povolit posouvání a to už jsem psal sem.
Když na to 2X kliknu maximalizuje
se to. mazimizeBox dle mého názoru bude tlačítko - protože tím jsem se
toho tlačítka zbavil,...
Aha, koukám no. Ono to totiž nefunguje, když vypneš ten titlebar
(FormBorderStyle = none). Pak ti to jde maximalizovat. Kouknu na to dej mi
chvilku 
Sem se díval a ten tvůj kód je asi nejvhodnější no 
Toto dáš někam do onoho formu:
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd,
int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
Pak si v grafickém náhledu na form klepneš na události (takový blesk v
properties panelu).
Tam si najdeš MouseDown event. dvakrát klepneš do toho prázdného políčka
a do vytvořené metody vložíš:
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
Nechci tě zklamat, ale nejde to:
private void Form1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
Tak se neomlouvám - skutečně to nejde
:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
Jop a je tam funkční ukázka ke stažení se zdrojovými kódy. Tak si ji
stáhni a podívej se kde máš chybu 
Zobrazeno 29 zpráv z 29.