- Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
- Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
- Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen TV-t vegyek?
- Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Vezetékes FEJhallgatók
- Autós kamerák
- SSD kibeszélő
- Házimozi belépő szinten
- Apple notebookok
- Modern monitorokra köthető 3dfx Voodoo kártya a fészerből
Hirdetés
-
Spyra: akkus, nagynyomású, automata vízipuska
lo Type-C port, egy töltéssel 2200 lövés, több, mint 2 kg-os súly, automata víz felszívás... Start the epic! :)
-
Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
ph Az ASTRIA 600 ARGB ráadásul a hűtési teljesítmény szempontjából sem szégyenkezhet.
-
Megjelenési dátumot kapott a Star Wars: Hunters
gp A tervek szerint június elején végre befut a teljes kiadás mobilokra/tabletekre és Nintendo Switch-re.
Új hozzászólás Aktív témák
-
mgoogyi
senior tag
válasz Tomi_78 #4247 üzenetére
Nem vagyok otthon a Borland TTimer témában, de egy gyors google keresésnél ezt találtam:
https://programmersheaven.com/discussion/357230/creating-component-with-timer-in-it
Ez alapján:
Timer = new TTimer(this);
Timer->Interval = 5;
Timer->OnTimer = (TNotifyEvent) &alakmozgatas;
Timer->Enabled = true;
void __fastcall alakmozgatas(TComponent* Sender)
{
..... Do some stuff .....
}[ Szerkesztve ]
-
mgoogyi
senior tag
válasz Tomi_78 #4252 üzenetére
AlakokKepe->LoadFromFile("alak\\alak_all.bmp");
kepei[0] = AlakokKepe;
kepei[2] = AlakokKepe;
AlakokKepe->LoadFromFile("alak\\alak_lep1.bmp");
kepei[1] = AlakokKepe;
AlakokKepe->LoadFromFile("alak\\alak_lep2.bmp");
kepei[3] = AlakokKepe;Anélkül, hogy érteném a teljes kódod, ez a rész biztosan rossz.
Az AlakokKepe egyetlen objektum pointere (memóriacíme).A memóriacím egy szám, ami eldől akkor, amikor a new neked helyet foglal a memóriában:
Graphics::TBitmap *AlakokKepe = new Graphics::TBitmap;
És innentől kezdve ez az érték nem változik.A kepei nevű ugyanilyen pointereket tároló tömbbe berakod ugyanazt a számértéket(pointert/memóriacímet) minden indexre.
Teljesen mindegy, hogy mit csinálsz közben a LoadFromFile függvénnyel.Az AlakokKepe változóra nincs szükséged. Első körben csináld azt, hogy minden alakok elemre ([0], [1], [2], stb.) a benne lévő kepe adattagot külön külön létrehozod
= new Graphics::TBitmap;
hívással és ezeken az alakok[ 0/1/2/.. ] . kepe objektumokon hívod meg a LoadFromFile-t.Azt is megeteheted, hogy nem pointert használsz:
Graphics::TBitmap* kepe;
->Graphics::TBitmap kepe;
és akkor nem kell new sem.[ Szerkesztve ]
-
dabadab
titán
válasz Tomi_78 #4256 üzenetére
Amit meg kell érteni jelen esetben az, hogy egyetlen darab AlakokKepe objektumod van és beállítottad azt, hogy mind a négy helyen erre az egyetlen egyre mutató link legyen.
A kód, amit írtál, pontosan azt csinálja, mintha ebben a sorrendbe írtad volna:
.
AlakokKepe->LoadFromFile("alak\\alak_all.bmp");
AlakokKepe->LoadFromFile("alak\\alak_lep1.bmp");
AlakokKepe->LoadFromFile("alak\\alak_lep2.bmp");
kepei[0] = AlakokKepe;
kepei[2] = AlakokKepe;
kepei[1] = AlakokKepe;
kepei[3] = AlakokKepe;és ebből következően az, aminek igazából hatása van, csak annyi, hogy
.
AlakokKepe->LoadFromFile("alak\\alak_lep2.bmp");
kepei[0] = AlakokKepe;
kepei[2] = AlakokKepe;
kepei[1] = AlakokKepe;
kepei[3] = AlakokKepe;[ Szerkesztve ]
DRM is theft
-
mgoogyi
senior tag
válasz Tomi_78 #4256 üzenetére
A pointernek és a LoadFromFile-nak nincs köze egymáshoz.
A pointer csak egy logikai memóriacím.A programod változói mind a memóriában vannak valahol.
Az, hogy valami hol van, azt elrakhatod egy pointerbe, mint pl. egy int * p;
Ebbe a p-be berakhatsz egy memóriacímet és utána azt tudod, hogy azon a memóriacímen - ami a p-ben van - van egy int értéked, azaz 4 byte-od egymás után.Az egyszerűség kedvéért 0-tól 1000-ig legyenek a lehetséges memóriacímek.
Amikor leírok egy olyat, hogy new int, akkor a programod a memóriából kér magának 4 byte-ot egymás után, ahol majd az integer-ed tartalma lesz és ebből a 4 byteből az elsőnek a címét visszaadja. (A másik 3 byte közvetlen utána van.)
Ezért tudod megtenni azt, hogy aint * p = new int;
esetén a baloldalt ott van a p, ami értéket kap. Mégpedig ennek az 1. byte-nak a memóriában lévő sorszámát.Itt egy példakód megdebuggolva:
A programom a (hexadecimális) 12461a8-as byte-tól kezdve kapott összesen 4 byte-ot.
És erre a 4 byte-ra a 3-nak megfelelő adat lett beírva.Ez így világos?
Olvasd el sokszor, ha nem érted, elég fontos, hogy ez meglegyen. -
dabadab
titán
-
dabadab
titán
válasz Tomi_78 #4276 üzenetére
"UINT_PTR idozito1;"
Az a helyzet, hogy a SetTimer() signature-je teljesen el van cseszve, ennek nem UINT_PTR-nek, hanem simán uintnek kellene lennie. A SetTimer() második paraméternek egy azonosítószámot vár, adj neki azt.
A case meg azért nem működik, mert fordításkor tudnia kell a fordítónak, hogy annak a case-nek mi lesz a konkrét értéke - az meg változókkal nem megy.
Szóval kb ez kell neked (fejből, nem próbáltam ki):
const unsigned int TIMER_ID=0x12345;
idozito = SetTimer(hwnd, TIMER_ID, 100, NULL);
case WM_TIMER:
switch (wParam)
{
case TIMER_ID:
//csinál valamit
break;
}
break[ Szerkesztve ]
DRM is theft
-
Silεncε
őstag
válasz Tomi_78 #4278 üzenetére
Ilyen esetben mindkettőt (konstans változó/define) szokás használni, mindkettőnek az lesz a végeredménye, hogy a korábban megadott szám fog bekerülni a paraméterlistába. A különbség az, hogy hogyan: a const int egy változó, ami konstans (futásidő), a #define ezzel ellentétben a preprocessornak szóló makró, így ő fordítási időben fog működni: a preprocessor megtalálja jelen esetben az idozito1 szoveget a forrásban, akkor oda simán beilleszti a korábban a #define-ban megadott stringet (ő simán stingcopyt végez a forrásban).
Az hogy melyiket érdemes használni, konvenciófüggő, én C++-ban inkább a const-ot szoktam.
[ Szerkesztve ]
-
dabadab
titán
válasz Tomi_78 #4278 üzenetére
A C++ tulajdonképpen két nyelv egyben: egyrészt ott van benne a C, amit mindenestül átvett, másrészt meg ott van benne a C++, ami az elején egy elég szerény OO-s kiegészítés volt, de már már tulajdonképpen az is szinte teljes nyelvvé nőtte ki magát, ennek eredményeképpen C++-ban egy csomó dolgot meg lehet csinálni C-ben meg C++-ban is (és persze ha lehet, akkor inkább az utóbbit jó használni.)
Ez egy ilyen: a konstansok kezelésére a #define a C-s megoldás, a const int meg a C++-os.
(#4279) Silεncε: a const int is compile time, különben nem menne vele a switch / case
[ Szerkesztve ]
DRM is theft
-
Silεncε
őstag
válasz Tomi_78 #4299 üzenetére
Neked egy Bitmap típusú objektum kell, annak lesz egy olyan metódusa hogy MakeTransparent, amit a doksiban látható módon tudsz paraméterezni.
Névtérből alapvetően tényleg nincs System definiálva, de magadnak olyan nevűt hozol létre, amilyet szeretnél, itt a könyvtár írói definiálták (illetve a System itt se névtér, hanem Class, de ilyen szempontból hasonlóan működnek, de egyébként különböző a két dolog!)
[ Szerkesztve ]
-
dabadab
titán
válasz Tomi_78 #4299 üzenetére
Amit találtál, az egy külön megvehető library API-ja, amivel mindenféle fileformatumokat tudsz írni meg olvasni (röviden: tutira nem ez kell neked )
A standard C++-ban nincs semmi, amivel rajzolni tudnál a képernyőre, szóval biztosan már most is valami külső könyvtárat használsz erre, innen kezdve az a kérdés, hogy mit és hogy az tud-e ilyet.
DRM is theft
-
dabadab
titán
válasz Tomi_78 #4308 üzenetére
azt hittem, hogy te valami kívülről származó eljáráskönyvtárról írtál, amit állítólag használok a progimban, ez meg alapban benne van a C++-ban
Jól hitted, pont erről beszéltem és ez nincs benne alapból a C++-ban
Ez egy Windows-only könyvtár, amit gondolom a Codeblocks alapbeállításoknál behúz.A hiba, amit kidob, az azért van, mert a WM_PAINT ágban deklarálsz egy változót, amit csak ott inicializálsz, viszont mindenhol látható. A megoldás az, hogy a case WM_PAINT: utána részt kapcsos zárójelek közé rakod, mert az ott egy külön blokk.
DRM is theft
-
sztanozs
veterán
válasz Tomi_78 #4380 üzenetére
A grafikus konyvtar - amit hasznalsz - tamogatja a unicode stringeket?
Ha jol remlik, akkor a parancs amit kiadtal, csak a konzolra vonatkozik.JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
kispx
addikt
válasz Tomi_78 #4384 üzenetére
The wingdi.h header defines TextOut as an alias which automatically selects the ANSI or Unicode version of this function based on the definition of the UNICODE preprocessor constant. [link]
1) A project beállítások között definiáld a UNICODE preprocesszor konstanst.
2) használj wchar_t-n alapuló stringet: LPCWSTR (emiatt strlen helyett wcslen függvényt kell majd használnod kell majd használnod 5. paraméterként
3) a forrásfájl karakterkódolása is legyen Unicode -
kispx
addikt
válasz Tomi_78 #4386 üzenetére
Nagyon sok éve nem láttam a Code :: Blocks-ot, így fejből nem tudom.
Ha még releváns ez a 2017-es fórum, akkor project szinten nem tudod beállítani, csak MAKE fájl szerkesztésével. Vagy globálisan (minden projectre kiterjedően) a #define fülön
A harmadik pontot pedig az Edit > File encoding menüponttal tudod elméletileg beállítani. -
DrojDtroll
addikt
válasz Tomi_78 #4388 üzenetére
windows - How to get screen resolution in C++? - Stack Overflow
Google a barátod. -
jattila48
aktív tag
válasz Tomi_78 #4392 üzenetére
A GetWindowRect bool típussal tér vissza. Mit akarsz abból kiszedni? Azt csak ellenőrizni kell, hogy sikerült-e a fv. hívás. A RECT típusú 'kijelzo' változóban (struktúrában) vannak a keresett értékek:
ablakszel=kijelzo.right-kijelzo.left;
ablakmag=kijelzo.bottom-kijelzo.top;Bizonyos esetekben a left és top tagok negatívak is lehetnek (a drop shadow miatt?), de itt ez nem fordul elő.
[ Szerkesztve ]
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
válasz Tomi_78 #4394 üzenetére
"WM_CREATE-ből átraktam a program tetejére a változók létrehozását, illetve a képernyőméret lekérdezést az ablak létrehozása elé."
Nem ezen múlik a dolog. Az ablakkezelő WM_CREATE ágát a CreateWindow fc. hívja meg. A legtöbb inicializálás (ablakhoz kapcsolódó, főablak esetén ptogramhoz kapcsolódó is) itt szokott megtörténni. Az itt létrehozott objektumokat (handle-kat, stb.) a WM_DESTROY ágban (amit a WM_CLOSE ágban kiadott DestroyWindow fv. fog meghívni) kell lebontani, lezárni.
Az, hogy az ablaknak van-e címsora, vagy méretezhető-e, a CreateWindow (vagy CreateWindowEx) fv. dwStyle (és dwExStyle) flag paramétereivel kell megadni, vagy esetleg az ablakosztály megfelelő stílusát (WNDCLASSEX típusú struktúra style tagja) kell beállítani, mielőtt a RegisterClassEx fv.-t meghívod.„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
dabadab
titán
válasz Tomi_78 #4443 üzenetére
Disclaimer: se CodeBlocksot, se wxWidgetset nem használtam soha.
Ez azt jelenti, hogy nem találja a wxmsw31ud.lib könyvtárat (gondolom ez lehet a wxWidgets). Ennek oka lehet pl. az, hogy a 3.2.4-es verzióban ez wxmsw32ud.lib néven fut (vagyis szólni kellene a Code Blocksnak, hogy ne 3.1-et akarjon használni) ésvagy nincs jól beállítva a CodeBlocksban a wxWidgets elérési útja.
[ Szerkesztve ]
DRM is theft
-
cog777
senior tag
válasz Tomi_78 #4449 üzenetére
Koszi, az elsot nem tolti be. Igen, bar nekem evekkel korabban a Google sokszor nagyon alap kvizeket adott ki, ezt pl 25-bol 24-et sikerult eltalalnom, tul alap.
Most rakeresve "c++ quiz" kifejezesre, tobb tesztet talaltam, pl c++20 teszt. Bocs a zajt.
[link] , [link] , [link]HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Autós topik
- Szevam: Érzelmi magabiztosság/biztonság - miért megyünk sokan külföldre valójában?
- Milyen TV-t vegyek?
- Nők, nőügyek (18+)
- Politika
- Kerékpárosok, bringások ide!
- Trollok komolyan
- A pápa egyre jobban tart a romlott AI veszélyeitől
- Xbox Series X|S
- További aktív témák...
- AKCIÓ Új Dobozos Macbook Pro dokkoló új ára 70.000 forint
- ThinkPad Hybrid USB -C USB -A Dock 40AF Új ára 80.000 Forint Ingyen szállítás
- Xiaomi Redmi Note 9s 128/6 GB 34.9E !!!
- Új Hp Pavilion 15-eh Fémházas Szuper Laptop 15,6" -30% AMD Ryzen 7 5700U 8Mag 16/1TB FHD MATT
- ATI RADEON RX 480 -8 gb DDR5 256 bit videokártya