Anonymní profil Boox – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Boox – Programujte.comAnonymní profil Boox – Programujte.com

 

Příspěvky odeslané z IP adresy 93.90.162.–

C / C++ › hexadecimální číslo na decim…
31. 10. 2013   #183055

Nebo další řešení 

std::string hex = "FF"; // vstup z konzole
unsigned long dec = std::strtoul(hex.c_str(), nullptr, 16);
std::cout << dec; // 255

Jinak doporučuju použít switch místo několikanásobného elseif

C / C++ › kniznica na gui
31. 10. 2013   #183053

framework není nic jinýho, než nějaká sada objektů (tříd, struktůr, typů apod.), který můžeš používat a přidat si tak do tvého aktuálního projektu

některý jsou ale dost komplexní, že doslova mění skoro vše (používáš na všechno ten framework), ale čistý C++ můžeš ofc. používat stále.. takto to třeba dělá zmiňovaný C++/Qt nebo C++/CLI, ale například tyhle 2 nemají moc rádi, když mícháš třeba stl s jejich fw

ale vždy platí to, že se musíš naučit používat ten framework, nestačí ti jen znát základy C++

C / C++ › kniznica na gui
31. 10. 2013   #183049

#6 dielmy
při jaký situaci předpokládáš, že se bude "měnit"? při kompilaci nebo při použití frameworku?

Java › double exponent
31. 10. 2013   #183046

#6 KIIV
to víš, jsou chvilky, kdy se ti to chce udělat a někdy stačí pár vlídných slov :)

krom toho teď naivně očekáváme, že jeho řešení bude úplně jiné

Java › double exponent
31. 10. 2013   #183043

#3 sleepy
cože? tak tohle opravdu nevím jestli bude fungovat :) Zkoušel sis zadat těch tvých pow(3.1415297,5) při počtu iterací 32? Ano, opravdu vyjde nekonečno ;)

jinak nepřijde ti tohle jednodušší?

double pow(double n, int e)
{
    double r = n;
    for (int i = 1; i < e; i++) r *= n;
    return r;
}
Java › double exponent
31. 10. 2013   #183039

#1 lekejs
A co je na tom těžkýho? Důležitý je si uvědomit, jak funguje Math.pow() a co vlastně dělá

když přes pow dáš 3^3 = 3*3*3, když exp bude 5, tak 3*3*3*3*3

už tě teda něco napadá?

Rec. řešení je takto 

int pow(int n, int e)
{
    if (e == 0) return 1;
    return pow(n, e - 1) * n;
}
.NET › ScrollBar
30. 10. 2013   #182997

No, to bude trochu problém. Ta oblast se scollbarem je speciální a nefungujou na ní klasické události, takže to musíš řešit více mimo samotnej framework 

udělej si novou komponentu a na ní tohle naimplementuj (tu logiku se scollbarem), ty události stisknutí a uvolnění myši můžou být třeba takto

    public partial class UserControl1 : RichTextBox
    {
        public event Action ScrollMouseDown = delegate { };
        public event Action ScrollMouseUp = delegate { };
        private bool lastDown = false;

        public UserControl1()
        {
            InitializeComponent();
        }

        protected override void WndProc(ref Message m)
        {
            // HScroll, VScroll
            if (m.Msg == 0x114 || m.Msg == 0x115)
                return;

            // pokud se kurzor nachází na scrollbaru
            if (m.WParam == (IntPtr)7)
            {
                if (m.Msg == 0xA1)
                {
                    lastDown = false;
                    ScrollMouseDown();
                }
                else
                {
                    if (!lastDown)
                    {
                        lastDown = true;
                        ScrollMouseUp();
                        
                        // zde je potreba jeste vyresit posun scollbaru
                    }
                }
            }
            base.WndProc(ref m);
        }
    }
C / C++ › Binární číslo
30. 10. 2013   #182993

#4 KIIV
zajímavý řešení, se mi líbí ta část *(vstup++) - '0' by mě nejspíš nenapadlo

JoDiK: Tak nešlo mi o složitost, ale že i tady můžeš použít pow :)

C / C++ › Binární číslo
30. 10. 2013   #182988

zapomeň na nějaké pow

proč ?   

int toDec(const char* bin)
{
    const int length = strlen(bin);
    int exp = length - 1;
    int dec = 0;

    for (int i = 0; i < length; ++i, --exp)
        dec += *(bin + i) == '1' ? pow(2, exp) : 0;

    return dec;
}
C / C++ › Realokace paměti
29. 10. 2013   #182944
.NET › Nezastavenie premennej ktora…
29. 10. 2013   #182943

#26 Tayson
nic takovýho nejde a logicky je to i blbost, hlavní vlákno nemůžeš zastavit, je to i "rodič" všech podvláken. Pokud ho zastavíš, tak zastavíš vše, ale to už víš.

Prostě na hlavním vláknu vyhod třeba okno s textem "načítám" a jakmile se to načte, tak se okno zavře (pokud se to nepodaří, tak ukončí třeba program), ale nemůžeš zastavovat hlavní vlákno

.NET › Nezastavenie premennej ktora…
29. 10. 2013   #182931

#24 Tayson
to co jsem napsal, je nejkratší zápis události (jsem na to zvyklej).. a to co si napsal, tak to je událost s vlastním delegátem (taky může být, není to chyba)

nemusí to být ve jmenným prostoru, můžeš to dát klidně do třídy, která s tím bude pracovat (musí to být vždy public)

tu událost potom vyšleš (emitneš) v místě, kde potřebuješ (při tom čtení) a zachytíš mimo třídu, ale na tohle si prostuduj události.. osobně si myslím, že to je jednoduchá věc a v C# se události vytvářejí snad nejsnáze ze všech prog. jazyků :)

.NET › Nezastavenie premennej ktora…
29. 10. 2013   #182920

#22 Tayson
hlavně v tom, že ty to chceš porovnat jen tehdy, když přijde string... kdyby se ti to ukládalo do statický proměnný, tak je to jednak bezpečnostní blbost a taky nepoznáš. kdy se hodnota aktualizovala.. by si tam musel mít další vlákno který bude synchronizovaný s tím čtecím a bude oznavovat (opět nějakým způsobem) = zbytečně komplikovaný řešení

.NET › Nezastavenie premennej ktora…
29. 10. 2013   #182916

#20 Tayson
vše tam můžeš dělat v tom jednom vlákně a už jsem ti psal, že to můžeš udělat přes událost... se mi zdá, že hledáš nějaký složitý řešení

jediny co vlastně, chceš, je číst ze serveru, kde jsem teda pochopil, že to stále odesílá a ty chceš jen zachytávat a vykovávat akce.. nepotřebuješ složitý řešení

pokud to chceš zachytávat v další třídě, tak bud přes událost nebo delegátem, protože to potřebuješ zachytit jen tehdy, když to přijme ten string.. podivej se na moji ukázku pro Klienta a jeho použití, tam to mám

.NET › Nezastavenie premennej ktora…
29. 10. 2013   #182909

#18 Tayson
"No presne tak isto to mam spravene" -> vážně? neřekl bych...

a ty se divíš, když máš WaitOne() v hlavním vlákně? ti zastaví vše... tohle se dělá obráceně, že WaitOne má druhý vlákno a hlavní to řídí

C / C++ › Alokace paměti pro strukturu…
25. 10. 2013   #182784

#5 Hitokage
nic jako "mezi" stack a heap neexistuje.. buď je to tam nebo tam

tu glob. proměnnou co tam máš, máš stejně špatne - obj Model; tam by měl být ukazatel správně, takto je to jen reference na existující objekt, ty potřebuješ ukazatel = dynamicky naalokovat model do paměti

ale tu glob. proměnnou vyhod, správně by si globálky neměl používat vůbec - je to takový "nečistý"

C / C++ › Alokace paměti pro strukturu…
25. 10. 2013   #182782

#3 Hitokage
stack má omezenou velikost, tam se ti ukládaj takový ty dočasný věci jako proměnný ve funkcích nebo statický alokace

na heap leze všechno co je dynamický, resp. přes "new, malloc, calloc...", tam to musíš potom i ručně uvolnit!
pokud např. ztratíš nebo nastavíš ukazatel na model jako NULL, tak v paměti bude stále a bude brát místo podle velikosti modelu

a tak jak to máš to můžeš více-méně nechat, jen bych se pokusil zrušit všechny globální proměnný a někam potom ukládat všechny načtený modely (pole s ukazatelema na modely)

a ta struct Model múže obsahovat víc věcí, jak cestu k modelu, jeho název, velikost a hlavně ukazatel, kde je umístěnej v paměti.. a hlavně pokud model nepotřebuješ už, tak ho uvolnit

C / C++ › Alokace paměti pro strukturu…
25. 10. 2013   #182780

Tak můžeš ho nahrát do paměti (na heap), je to potom rychlejší, ale pokud těch modelů máš hodně nebo jsou dost velký (třeba přes 2GB) tak to nemá smysl, ale pokud jsou menší, tak ho normálně nahraješ do paměti a vezmeš si ptr na něj 

typedef unsigned char byte;

struct Model
{
    char* name;
    byte* data;
};

Model* loadModel(const char* modelPath)
{
    // pokud vrátí NULL, tak se model nepodařilo načíst
}

Dost záleží o jaký modely se jedná a kde a jak je chceš používat.. od toho vychází i kód potom

Java › vysvětlení panitComponent(Gr…
25. 10. 2013   #182778

#1 felix
paintComponent se volá automaticky, když na komponentě nastane změna, třeba změna velikosti nebo okno získá opět focus, maximalizace a min. apod.

pomocí repaint() tuhle funkci zavoláš manuálně a ta funkce render() je nějaká tvoje, to komponenta snad neobsahuje tušim

C / C++ › Výplň trojúhelníku v c
25. 10. 2013   #182771

#6 miklel
že by to bylo tím, že to je v C++?

C / C++ › Dynamické jednorozměrné pole
24. 10. 2013   #182752

Zkusil jsem to na rychlo udělat a nějak takto by to mohlo být.. pokud teda jde čistě o kontrolu hotového sudoku

sudoku.h 

#pragma once
#include <iostream>

#define SUDOKU_SIZE 9

typedef unsigned char ubyte;

bool isValidSudoku(const ubyte* sudoku);

sudoku.cpp 

#include "sudoku.h"

static bool existsInBuffer(const ubyte* buffer, const ubyte value, const int bufferSize)
{
    for (int i = 0; i < bufferSize; ++i)
    {
        if (*(buffer + i) == value)
            return true;
    }
    return false;
}

static bool areValidRow(const ubyte* sudoku, const int rowIndex)
{
    ubyte buffer[SUDOKU_SIZE] = { 0 };

    for (int i = 0; i < SUDOKU_SIZE; ++i)
    {
        ubyte value = *(sudoku + rowIndex + i * sizeof(ubyte));

        if (!existsInBuffer(buffer, value, i))
        {
            *(buffer + i) = value;
        }
        else return false;
    }
}

bool isValidSudoku(const ubyte* sudoku)
{
    ubyte buffer[SUDOKU_SIZE];
    bool state = false;

    for (int n = 0; n < SUDOKU_SIZE; ++n)
    {
        if (!areValidRow(sudoku, SUDOKU_SIZE * n))
            return false;
    }
    return true;
}

main.cpp 

#include "sudoku.h"
#include <iostream>

int main()
{
    ubyte sudoku[] = {
        1,2,3,4,5,6,7,8,9,
        2,3,4,5,6,7,8,9,1,
        3,4,5,6,7,8,9,1,2,
        4,5,6,7,8,9,1,2,3,
        5,6,7,8,9,1,2,3,4,
        6,7,8,9,1,2,3,4,5,
        7,8,9,1,2,3,4,5,6,
        8,9,1,2,3,4,5,6,7,
        9,1,2,3,4,5,6,7,8
    };

    std::cout << (isValidSudoku(sudoku) ? "Sudoku je v poradku!" : "Sudoku neni spravne!");
    std::cin.get();

    return EXIT_SUCCESS;
}
C / C++ › Dynamické jednorozměrné pole
24. 10. 2013   #182746

nevim jestli ti to nějak pomůže, ale:

1) sudoku je matice, takže můžeš použít normální pole a né dvojrozměrný char**, protože tam stejně budeš mít jen čísla 0-9 a velikost je vždy 9

unsigned* matice = (unsigned *)calloc(9 * 9, sizeof(unsigned));

2) jako globální můžeš nastavit velikost matice, protože je vždy 9 

#define SIZE 9

3) kdyb to bylo C++, tak můžeš použít třídy, ale v C dej hlavní pole matice do main() a jako parametr budeš vždy předávat jen ukazatel na pole, protože velikost znáš 

void generujMatici(unsigned* matice, unsigned obtiznost)
{
    // ...
}

int main()
{
    unsigned* matice = 0; // alokace (bod 1.)
    
    // neni nutne potom vynulovat matici, protoze calloc ji vynuluje pri alokaci.. takze muzes jen generovat a pracovat s tim
    generujMatici(matice, 1); // obtiznost treba 1-5

    return 0;
}

Další funkce, který budeš používat už máš nebo si uděláš, ale vždy bude stačit a bude i nutnost dávat jako parametr unsigned*

.NET › Problém s pointery c#
24. 10. 2013   #182741

#9 Kalgys
nevím co myslí tím "zarážka".. zeptej se jí na to

.NET › Problém s pointery c#
24. 10. 2013   #182739

#7 Kalgys
však tam se taky třída používá, sice to můžeš dát jako struct, ale přijde mi to zbytečně komplikovaný... musel by si vytvořit nullable struktůru

a pokud říkal s ukazateli, tak po vás chce C/C++ nikoliv C# nebo Javu.. osobně si myslim, že tohle se nejlíp dělá právě v těchto jazykách

.NET › Problém s pointery c#
24. 10. 2013   #182736

#4 Kalgys
No tak vyhoď pointery a udělej to normálně, fakt nevim, proč cpeš c++ do C# 

    class Node
    {
        public int value;
        public Node next;
    }

    class Program
    {
        private static Node first = null;
        private static Node act = null;

        static void addNode(int value)
        {
            Node node = new Node();
            node.value = value;
            node.next = null;

            if (first == null)
            {
                first = node;
            }
            else
            {
                act.next = node;
            }
            act = node;
        }
    }
.NET › Problém s pointery c#
24. 10. 2013   #182733

Jinak tu chybu ti to hází proto, že nealokuješ Nod. Nemůžeš do null nastavovat hodnoty.. správně by to mělo být takto, ale fakt to nedoporučuju v C# 

    unsafe struct Node
    {
        public int value;
        public Node* next;
    }

    unsafe class Program
    {
        private static Node* first = null;
        private static Node* act = null;

        static void addNode(int value)
        {
            Node* node = stackalloc Node[sizeof(Node)];
            node->value = value;
            node->next = null;

            if (first == null)
            {
                first = node;
            }
            else
            {
                act->next = act;
            }
            act = node;
        }

        static void Main(string[] args)
        {
            addNode(10);
            addNode(20);

            Console.ReadKey();
        }
.NET › Problém s pointery c#
24. 10. 2013   #182729

#1 Kalgys
a co použít LinkedList ? Pochybuju, že máte používat pointery

Java › Abeceda pes metody
23. 10. 2013   #182710

Takto by to vypadalo, pokud to seřadíš podle ASCII 

class Root
{
    public static void main(String[] args)
    {
        String text = "Dobrý den, jak se dnes máte?";
        List<Integer> data = new ArrayList();
        
        for (int i = 0; i < text.length(); i++) {
            int c = (int) text.charAt(i);
            if (!data.contains(c)) { // odebere duplicity
                data.add(c);
            }
        }
	
        Collections.sort(data);
		
        // ,?Dabdejkmnorstáý        for (int c : data) {
            System.out.printf("%c", c);
        }
    }
}
Java › Abeceda pes metody
23. 10. 2013   #182707

#5 Michal
Když nad tím nebudeš moc přemýšlet, tak to můžeš udělat tak, že si do mapy uložíš všechny znaky (některý, tam budou víckrát - proto mapa) nebo do Listu, ale lepší je na tohle mapa. Potom je seřadíš a vypíšeš. To je celé.

C / C++ › rovnoramenny trojuhelnik
23. 10. 2013   #182705

#4 Jakub
Ty vlastně nic nemáš, takže ano, musel by si to udělat celý znova. To, co jsem psal je jednoduchý řešení. Prostě si vypočteš počet mezer na řádce a počet hvězdiček a to potom vypíšeš a hodíš nový řádek a znovu na novým řádku.

Jde to udělat i jinak, že si zjistíš maximální délku řádku a stačí ti jeden cyklus a jen podmínky a další možnosti, je jich víc, vyber si ;)

C / C++ › rovnoramenny trojuhelnik
23. 10. 2013   #182702

Možností je několik, mě napadlo tohle třeba, dalo by se to celý udělat i pomocí 1-2 cyklu, ale toto bylo rychlejší :)

#include <stdio.h>

int main()
{
    int i, j;
    int size = 5;
    
    for (i = 1; i <= size; i++)
    {
        for (j = 1; j <= size - i; j++) putchar(' ');
        for (j = 2; j <= i * 2; j++)    putchar('*');
        putchar('\n');
    }
    return 0;
}
C / C++ › rovnoramenny trojuhelnik
23. 10. 2013   #182701

Otevři si texták a namaluj si tam: 

     *
    * *
   *****
  *******
 *********
***********

přesně vidíš, kde jsou mezery a kde hvězdičky.. takže první průchody budou:

5 mezer + 1 *
4 mezery + 2 *
3 mezery + 5 *
2 mezery + 7 *
1 mezery + 9 *
0 mezery + 11 *

a teď zkus vymyslet cyklus :)

.NET › MessageBox bez tlacidiel
23. 10. 2013   #182693

Přesně tak. Udělej vlastní formulář, dej do něj Label a přidej tam další vlákno, který formulář zavře za X sekund.

Boox
Java › Vlastní události
22. 10. 2013   #182654

Já události dělám takto zatím http://ideone.com/BS45It může tam být někde chyba/překlep, psal jsem to z hlavy.. ale jde mi o to, jestli je tento způsob správněj nebo existuje elegantnější řešení

Boox
Java › Vlastní události
21. 10. 2013   #182641

aha, ale v použití je potom jen jedna metoda update, kde se zachytí všechny události a pomocí instanceof? Takže když tam bude třeba 5 událostí a ja si budu chtít zachytit jen jednu, tak to nějak jde přes observer?

Boox
Java › Vlastní události
21. 10. 2013   #182638

#6 lukber

na to jsem koukal, ale nějak to nechápu.. tam je v rozhraní jenom invoke() ale nemůžu si tam dát vlastní/další, abych nenarušil struktůru observeru nebo se pletu?

můžeš mi zkusit udělat jednoduchej příkad na tu ukázku v C# co jsem psal? resp. to přepsat do Javy, jak by to vypadalo, pokud možno co nejelegantněji :)

Boox
Java › Vlastní události
18. 10. 2013   #182549

Škoda no, když budu mít 5 tříd, kde každá bude mít nějaký události, tak pro každou třídu musím mít další 3 třídy jen pro události, čili z 5ti tříd se mi stane 20 =D To je maso prostě a až to začíná být lehce nepřehledný

Boox
Java › Vlastní události
17. 10. 2013   #182498

Fakt nikdo nevíte?

Momentálně to dělám takto, ale přijde mi to dost neohrabaný http://www.java2s.com/Code/Java/Event/CreatingaCustomEvent.htm

Proste vytvářet 3 soubory +1 ten hlavní, kde se to použije mi přijde zbytečně komplikovaný. Sice to můžu dát jako vnořený třídy, ale potom se to stává nepřehledný trochu a přijde mi to takový "nečistý" :-/

Boox
Java › Vlastní události
17. 10. 2013   #182481

Zdravim,

existuje v jave nějaká možnost nebo udělat vlastní třídu, která by fungovala a pracovala s vlastníma událostma podobně jako to má C# ?

Tím myslim, že v C# se jednoduše výtváří události (klíčové slovo "event" a pomocí delegáta). Šlo by něco podobného udělat i v Jave? Nějak se mi nelíbí a přijde mi komplikovaný dělat 2-3 objekty (EventListener, EventHandler, [EventObject])

V C# to vypadá třeba takto: 

class NumbersDB
{
    // vytvoreni udalosti pro pridani cisla
    public event Action<int> OnNewNumber(int number) = delegate { }

    // pridani cisla a zavolani udalosti
    public void AddNumber(int number)
   {
       OnNewNumber(number);
   }
}

class MainClass
{
    private NumbersDB db = new NumbersDB();

    public MainClass()
    {
        // zachyti udalost pridani cisla
        db.OnNewNumber += number => { Console.WriteLine(number); };

        // prida cislo
        db.AddNumber(100);
    }
}

A moje otázka tedy je, jak toto naprogramovat v Jave, aby to bylo takto jednoduchý :)

Díky

Hardware › Rozšíření RAID 5 o další disk
2. 8. 2013   #179816

Zdravim,

chci se zeptat jak je to s RAID 5 a jeho rozšířením.

Řekněme, že si spojim 3 stejný disky do RAID 5, po roce si řeknu, že bych to rozšířil a přidal další disk (čili 4 disky v RAID 5). Jak se to zachová? Normálně přepočítá parity a rozdělí data na všechny disky, nebo to vůbec nejde?

Vim, že třeba u Intel Rapid to pro RAID 0 jde, sice přepočet trvá třeba den (v závislosti na velikosti disku), ale funguje to. Ale u RAID 5 nevim. Hlavně já mám BIOS UEFI a když to nastavim tam (čili přes HW, nikoli přes SW - intel rapid), tak to půjde takto rozšířit nebo ne?

Díky

C / C++ › Piškvorky 10x10 problem s te…
31. 5. 2013   #177028

nechce se mi to celý kontrolovat, ale na první pohled ti tam chybějí závorky ve funkci "kontrola", takto se ti cyklus vykoná jen pro první podmínku

potom nechápu, proč máš matici typu char, použij bool, případně unsigned (stačí ti jen hodnoty 1/0)

dále se zamysli trochu nad optimalizací, představ si pole pro piškvorky 100x100 nebo větší, timto způsobem by to nešlo moc dobře :)

.NET › Specifikátor přístupu třídy…
30. 5. 2013   #176984

jen pozor, že třída nemá modifikátor private, ale internal (ve výsledku je to prakticky stejný)

a nezmění, všechny modifikátory musíš měnit ručně, nic se ti nenastaví automaticky v závisloti na nějakým nadřazeným  modifikátoru... čili když změníš třídu na public, tak členy budou stále private

a doporučuju psát všude modifikátory.. i když to někde bere jako výchozí private, tak tomu ještě ručně dopsat private, je to pak na první pohled jasný

a smysl je v tom, že privátní členy třídy nejsou viditelný z venku nebo u dědičnosti, jsou použitelný pouze pro potřeby třídy

.NET › Specifikátor přístupu třídy…
30. 5. 2013   #176975

tak za 1) to neni žádnej specifikátor ale modifikátor

2) internal je pro vnitřní použití, je to výchozí nastavení a používá se hlavně u DLL, kde nechceš umožnit přístup z venku

.NET › Static Class vs. Private Con…
30. 5. 2013   #176974

   

class A
{
    protected int cislo;

    private A() { } // zakáže bezparametrický konstruktor
    public A(int cislo) { this.cislo = cislo; }
}

// třída B nyní může používat pouze konstruktor s parametrem int
// případně nějaký vlastní, ale nelze vytvořit bezparametrický!
class B : A
{
    // zavolá konstruktor z rodiče
    public B(int cislo)
        : base(cislo) { }
}
.NET › Static Class vs. Private Con…
29. 5. 2013   #176925

u statický třídy nejde vytvořit instance a nejde ofc dědit (konstruktor se uvádí jako static)

u třídy která ma privátní konstruktor lze vše, jen nelze zavolat ten privátní konstruktor

zde je důležité to klíčové slovo static

C / C++ › Odhalení diakritiky
28. 5. 2013   #176872

#4 vitamin
no jo, jsem úplně zapoměl ze utf8 mají 2byte, no tak opravim.. původní text překonvertovat na wchar_t

wchar_t* toCharArrayW(const char* text)
{
    size_t size = strlen(text) + 1;
    wchar_t* arr = new wchar_t[size];
    mbstowcs(arr, text, size);
    return arr;
}
C / C++ › Odhalení diakritiky
28. 5. 2013   #176868

nebo "klasickej" zápis přes pole znak po znaku, pokud nezmáš moc iterátory.. takováto funkce pro test diakritiky

bool textDiakritiky(char* text, int length)
{
    for (int i = 0; i < length; ++i)
    {
        if (text[i] > 127)
            return true;
    }
    return false;
}
.NET › [c#] Pohyb objektu pomoci kl…
28. 5. 2013   #176861

#29 Nonameboy
ok, tak tahle... důvod proč ti to bliká je, že kreslíš na jedno "plátno", který se musí jak aktualizovat tak kreslit ve stejnej čas, tohle se řeší backBufferem - DoubleBuffer, kde se kreslí na jedno a aktualizuje druhý a potom se prohoděj, takže nevzniká blikání (bufferů může být samozřejmě víc)

co se týče toho co jsem psal, tak je dobrý si udělat objekt, kterej bude řešit vše (jak vlastní vykreslení, tak pohyb), takže něco takovýho třeba 

    public class Block
    {
        private Form parent;
        private Rectangle rect = new Rectangle(0, 0, 50, 50);
        
        public Block(Form parent)
        {
            this.parent = parent;
            this.parent.KeyDown += UpdateKeys;
            
            Speed = 4;
        }
        
        public Block(Form parent, int x, int y, int width, int height)
            : this(parent)
        {
            rect = new Rectangle(x, y, width, height);
        }
        
        public int Speed { get; set; }
        
        public Rectangle Rectangle
        {
            get { return rect; }
            set { rect = value; }
        }
        
        public void Draw(Graphics g)
        {
            g.FillRectangle(Brushes.Black, rect);
        }
        
        private void UpdateKeys(object sender, KeyEventArgs e)
        {
            bool validKey = true;
            
            switch (e.KeyCode)
            {
                case Keys.Left:
                    rect.X -= Speed;
                    break;
                    
                case Keys.Right:
                    rect.X += Speed;
                    break;
                    
                case Keys.Up:
                    rect.Y -= Speed;
                    break;
                    
                case Keys.Down:
                    rect.Y += Speed;
                    break;
                    
                default:
                    validKey = false;
                    break;
            }
            
            if (validKey)
                parent.Invalidate();
        }
    }

a potom v samotným formu nebude nic jinýho, než toto 

    public partial class MainForm : Form
    {
        private Block block;
        
        public MainForm()
        {
            InitializeComponent();
            DoubleBuffered = true; // zapne DoubleBuffer (aby to neblikalo)
            
            block = new Block(this, 100, 100, 50, 50);
        }
        
        protected override void OnPaint(PaintEventArgs e)
        {
            block.Draw(e.Graphics);
        }
    }

Pokud máš nějaký dotazy ohledně kódu, tak sem napiš

.NET › [c#] Pohyb objektu pomoci kl…
28. 5. 2013   #176857

Tvůj hlavní problém je, že ti chybí samotná struktůra.. měl by sis udělat speciální objekt, kterým chceš pohybovat, ten by měl třeba rozhraní pro vykreslení a aktualizaci (pohyb)

tohle potom naimplementovat do formu... a proboha, v žádný případě nevolej překreslení ve funkci na vykreslení

.NET › C# kde je chyba ?
23. 5. 2013   #176527

dej instanci Random přímo jako instanci třídy (prostě ji vyhoď z tý funkce)

a nebylo by snažší dát v tý funkci jenom return rnd.Next(4); ? To tvoje pole mi přijde zbytečný

nebo dát přímo do těch cyklů d.orientacia = rnd.Next(4);

.NET › Ovladanie ineho programu C#
21. 5. 2013   #176396

tak můžeš posílat data pomocí protokolu, třeba jednoduchej tcp nebo udp server/client

C / C++ › programovanie v c++
21. 5. 2013   #176377

do int** můžeš přiřadit referenci na jinej ukazatel typu int*



int cislo = 10; // hodnota
int* ptr = &cislo; // ukazatel typu int na cislo (hodnotu)
int** ptr2 = &ptr; // ukazatel na ukazatel typu int*

int** používáš nejčastije na matici, resp. pole polí

.NET › "Skrytá nápověda"
15. 5. 2013   #176222

Tooltip?

.NET › webbrowser
15. 5. 2013   #176217

#18 freedom
to se musíš podívat do dokumentace jak se tam řeší cookie a jeho nastavení, jedině to nastavení ukládat do souboru a při spuštění app ho zas načíst, ale jde o to API pro webkit, jestli tohle umí, prostě se musíš podívat do Doc no

.NET › webbrowser
14. 5. 2013   #176170
.NET › webbrowser
14. 5. 2013   #176167
C / C++ › c++ a MySql
14. 5. 2013   #176165

musíš si stáhnout dev verzi mysql, která obsahuje jak include tak libs, pokud to nenajdeš, tak to musíš skompilovat (tak jsem to dělal v Qt)

.NET › webbrowser
14. 5. 2013   #176164

WebBrowser používá IE, tahle komponenta není dělaná pro prohlížeč, ale pouze jako náhled třeba části webu nebo pro reklamy, logy apod. co se načítá jako HTML stránka (napr. v launcherech u her)

pokud chceš prohlížeč, tak bud vlastní jádro nebo nějaký externí třeba webkit (v podobě .dll)

C / C++ › Převod do String^
13. 5. 2013   #176148

1) nevim proč mícháš std s .net... každej má vlastní typy

2) pokud převádíš String^ na char* tak to nezapoměň uvolnit, ta pamět se alokuje

.NET › MATLAB - hladanie najkratsej…
3. 5. 2013   #175738

by mě zajímalo, co tě vedlo do sekce .NET když potřebuješ MATLAB  

Java › Porovnávání polí
3. 5. 2013   #175713

no tak základní pointa je v tom, že kolekce Set nemůže uchovávat duplicity, takže si všechny pole převedu do Setu a potom jen filtruju ty, který mají stejný prvky, takže nemám duplicity a funguje to i pro X polí a co se týče toho procenta, tak to máš jednoduchej vzorec... (100f * počet_stejnych_prvků / minimalni_velikost_pole)

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý