NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
jaroox
Člen
Avatar
jaroox:10.4.2017 18:11

Ahoj, mám takový problém.
Potřeboval bych pomocí třídy Graphics něco vykreslit. Problém je v tom, že když prvku, ve kterém chci vykreslovat dám nějakou šířku a pak něco chci vykreslit přes celou tuto šířku, třída Graphics vykresluje nějak divně - ne ve stejných jednotkách, jako je zadána šířka prvku. Dá se to obejít pomocí trojčlenky, ale i tak mi to přijde divné. Děkuji za odpověď :)

 
Odpovědět
10.4.2017 18:11
Avatar
HONZ4
Člen
Avatar
Odpovídá na jaroox
HONZ4:10.4.2017 19:46

vykresluje se to podle toho jakou jednotku máš nastavenou v PageUnit

 
Nahoru Odpovědět
10.4.2017 19:46
Avatar
jaroox
Člen
Avatar
Odpovídá na HONZ4
jaroox:10.4.2017 20:00

Vyzkoušel jsem všechny možnosti, co tam jsou, ale ani jedna nepomáhá. Je to divné. Opravdu se výška a šířka formuláře zadává v pixelech?

 
Nahoru Odpovědět
10.4.2017 20:00
Avatar
HONZ4
Člen
Avatar
Odpovídá na jaroox
HONZ4:10.4.2017 20:28

ano v pixelech (pokud jde o WinForm).
ps. Takhle bez kódu ti těžko někdo poradí.

Editováno 10.4.2017 20:31
 
Nahoru Odpovědět
10.4.2017 20:28
Avatar
jaroox
Člen
Avatar
jaroox:10.4.2017 20:33

Tady je. V podstatě tohle by mělo udělat velký čtverec, přes celé okno. Ale vždycky ho to udělá větší.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Width = 300;
        this.Height = 300;
    }
    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Graphics kp = e.Graphics;
        kp.PageUnit = GraphicsUnit.Pixel;
        kp.FillRectangle(Brushes.Red, 0, 0, 300, 300);
    }
}
 
Nahoru Odpovědět
10.4.2017 20:33
Avatar
Odpovídá na jaroox
Tomáš Vitek:10.4.2017 20:36

Já si většinou všechno zakresluji na samostatnou bitmapu a pak to dám do pictureboxu, ve kterém nastavím sizemode na zoom a mám po problémech. Na druhou stranu to asi je trochu pomalejší. Jinak už jsem se s tím taky setkal a je to divné.

 
Nahoru Odpovědět
10.4.2017 20:36
Avatar
jaroox
Člen
Avatar
Odpovídá na Tomáš Vitek
jaroox:10.4.2017 20:40

Ten čtverec byl jen ukázka. Tohle mi nepomůže. Na tento problém jsem narazil při programování hry, kde budu potřebovat přesné vykreslení. Ale díky za tip. :)

 
Nahoru Odpovědět
10.4.2017 20:40
Avatar
Odpovídá na jaroox
Tomáš Vitek:10.4.2017 20:42

Není třeba možné, že to, do čeho zakresluješ, má délku a šířku 300, zatímco čtverec, který kreslíš, má délku a šířku o 1 větší, protože kreslíš od 0 ?

 
Nahoru Odpovědět
10.4.2017 20:42
Avatar
HONZ4
Člen
Avatar
Odpovídá na jaroox
HONZ4:10.4.2017 20:43

udělej to jak píše Tomáš, takhle se ti do toho rozměru připočítávají okraje a titulek okna. A picturebox se bude vykreslovat rychleji.

 
Nahoru Odpovědět
10.4.2017 20:43
Avatar
jaroox
Člen
Avatar
Odpovídá na Tomáš Vitek
jaroox:10.4.2017 20:44

Tím to nebude. To bych asi od oka nepoznal. Výchylka bude cca 20%.

 
Nahoru Odpovědět
10.4.2017 20:44
Avatar
jaroox
Člen
Avatar
Odpovídá na HONZ4
jaroox:10.4.2017 20:45

Problém je v tom, že to samé se děje v např. v panelu.

 
Nahoru Odpovědět
10.4.2017 20:45
Avatar
HONZ4
Člen
Avatar
Odpovídá na jaroox
HONZ4:10.4.2017 20:54

Aha, teď jsem si to zkusil a dokonce to funguje i tak jak to máš ty.
Je to zajímavé, pokud se ti to nevykresluje..

 
Nahoru Odpovědět
10.4.2017 20:54
Avatar
Tomáš Vitek:10.4.2017 21:08

Už jsem na to asi přišel.
Když jsem u daného formu, do kterého vykresluji, nastavil vlastnost AutoScaleMode na none, všechno funguje jak má.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
10.4.2017 21:08
Avatar
jaroox
Člen
Avatar
Odpovídá na Tomáš Vitek
jaroox:10.4.2017 21:10

Ano! To je nejspíš ono. Teď to funguje. Děkuji moc.

 
Nahoru Odpovědět
10.4.2017 21:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.