Programiranje - pomoć

poruka: 18
|
čitano: 4.627
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
neaktivan
offline
Programiranje - pomoć

Pozdrav programeri. Ja bih trebao napraviti mali program ili aplikaciju koja bi bila mala ikonica(kao neki mali krugić ili tako nešto) i da se vidi preko otvorenog programa, znači da se ne "skriva" automatski kad ja radim u npr. browseru. Kako da to napravim? Koji je to programski jezik? Kako da napravim to da se ne skriva nego da se vidi cjelo vrijeme?

Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Programiranje - pomoć

Pomoću API funkcije SetWindowPos s parametrom HWND_TOPMOST.

http://www.chess.com/livechess/profile/Tracer1808
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje - pomoć

Može li mi to netko pojasniti jer ja neznam baš puno o programiranju jer tek učim

12 godina
neaktivan
offline
Re: Programiranje - pomoć

Neprecizniji user story nisam davno čuo. Mislim da ti je Tracer dobro odgovorio.

 

enivej, koje ti je iskustvo? I preciznije opiši upotrebu i svrhu programa.

13 godina
neaktivan
offline
Programiranje - pomoć

Znači trebam aplikaciju koja bi na monitoru predstavljala mali krug(jako mali) i ona bi se vidla preko mog browsera(znači na browseru radim(nešto pišem ili tako nešto) a ta aplikacija se vidi preko browsera) znači ta aplikacija predstavlja samo taj krug ništa drugo ona ne radi nego je samo otvorena... Sad mene zanjima kako da ja napravim taj krug i kako da stavim da se vidi stalno odnosno da se ne "skriva" kad ja otvorim npr. browser ili neki folder. Nisam neki programer jer još učim.....

Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Re: Programiranje - pomoć

Ti zapravo tražiš da ti netko ovdje drži tečaj, a za to nitko nema vremena. Napisao sam ti koju funkciju trebaš pogledati i to je to. Nitko umjesto tebe neće napisati taj program.

http://www.chess.com/livechess/profile/Tracer1808
12 godina
neaktivan
offline
Re: Programiranje - pomoć

Želiš napraviti štosnu aplikaciju koja korisniku prekrije cijeli ekran, ili radiš aplikaciju "Cenzura" s crnim krugom preko nepoćudnog sadržaja?

 

To je napredno trenutačno, koji jezik učiš? C++? C#? Python?

14 godina
neaktivan
offline
Re: Programiranje - pomoć

Dobro tracer kaze, za tecaj nitko nema vremena, ali programcic sâm po sebi i nije toliko problematican, meni je cak bilo i zanimljivo za pisati ga jer nikada nisam crtao preko drugih prozora :D Ocito program ima svojih problema (iscrtavanje je veoma sirovo obavljeno, pa uneredi neke prozore kada ih vuces preko kruga), i nedostaje mu nekakav nacin za prekidanje programa (trenutno ga moras ubiti u task manageru). Ali za ovoliko malo linija kôda, rekao bih da radi savim ok.

 

#include <windows.h>

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{
    int centerx=GetSystemMetrics(SM_CXFULLSCREEN)/2;
    int centery=GetSystemMetrics(SM_CYFULLSCREEN)/2;
    int radius=50;

    HDC hdc;

    while (1)
    {
        hdc=GetDC(0);
        Ellipse(hdc, centerx-radius, centery-radius, centerx+radius, centery+radius);
        ReleaseDC(0, hdc);
        Sleep(50);
    }

    return 0;
}

 

Objasnjaviti WinAPI ovdje ne kanim, ako ti nesto nije jasno trazi pojedine funkcije i konstante na msdn-u

 

EDIT: ako koristis mingw kompajler, trebas linkati sa libgdi32.a bibliotekom, za ostale kompajlere ne znam...

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put pon 19.12.2011 14:02 (rustweaver).
12 godina
neaktivan
offline
Re: Programiranje - pomoć
rustweaver kaže...

Objasnjaviti WinAPI ovdje ne kanim

To se podrazumjeva, zapravo zar se on može objasniti?

Programming is understanding. – Kristen Nygaard
14 godina
neaktivan
offline
Re: Programiranje - pomoć
royalhero kaže...

To se podrazumjeva, zapravo zar se on može objasniti?

Pa neke koncepte kao recimo device context i cemu on sluzi, ili funkcije i konstante koje gornji program koristi...

My computer once beat me at chess, but we got even after a round of boxing.
12 godina
neaktivan
offline
Re: Programiranje - pomoć

Ma imaju na webu o tome...

http://www.relisoft.com/win32/index.htm

Programming is understanding. – Kristen Nygaard
12 godina
neaktivan
offline
Programiranje - pomoć

Vidim da baš i ne razumijete što je WINAPI...

 

Dakle, to možete shvatiti kako skupinu biblioteka (najčešće dll-ova) koji sadrže sistemske funkcije i objekte koje možete iskoristiti u svojim programima. Npr. kada kreirate user interface (gumbi, liste itd.) tada zapravo koristite windows-ov user32.dll, ili kada koristite Open i Save dijaloge onda comdlg32.dll itd.. Tu je i hrpa drugih sistemskih funkcija skrivenih po dll-ovima kojima se može upravljati dijelovima OS-a itd.. Većina njih je zapravo integrirana u programskim okruženjima tako da se mogu direktno pozivati.

 

Naravno, i vi možete pisati svoje dll-ove koji bi sadržavali neke vaše funkcije ili COM objekte, dok ako vam trebaju vizualne komponente onda OCX (što je zapravo isto što i dll ali zbog sadržaja ima ekstenziju ocx). To omogućuje i da npr. običnu desktop aplikaciju spremite u nekakav dll i koristite ju u web pregledniku (samo IE) kao da je riječ o web aplikaciji. No tu je onda mali problem sigurnosti itd itd.. Potrajalo bi predugo da sad sve objašnjavam.

 

Edit: Evo s mog youtube-a...

 

Dll-ovi

 

ActiveX-COM

http://www.chess.com/livechess/profile/Tracer1808
Poruka je uređivana zadnji put sri 21.12.2011 20:32 (TracerCPP).
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje - pomoć
TracerCPP kaže...

Vidim da baš i ne razumijete što je WINAPI...

Kako tko, ali je na forumu slabo zastupljen (s dobrim razlogom ili ne, nije bitno), pa je stoga nekima poput pandorine kutije. Danas kada svi zele nabrzinu nekakav tutorijal za nesto, nitko se ni ne usudi primirisati ovome, jer iziskuje puno citanja :D

My computer once beat me at chess, but we got even after a round of boxing.
12 godina
neaktivan
offline
Re: Programiranje - pomoć

s dobrim razlogom ili ne, mislim da covjeku nisi olaksao zivot svojim kodom. neznam ni ja kakav bi GetDC(0) trebao biti, mogu pretpostaviti no... keep it simple. bez obzira sto je to tocno ono sto je covjek trazio... mislim zamisli sad da zheli nesto uciniti na klik na tu elipsu. :D

Poruka je uređivana zadnji put sub 24.12.2011 6:02 (xin).
12 godina
neaktivan
offline
Programiranje - pomoć

HDC jednostavno nije dobar pristup u ovom slučaju iz niza razloga. Sve se riješi s dvije API funkcije. Jednu sam već gore napisao. Primjer;

 

http://www.box.com/s/9nst49vifv1mpr4opq3a

http://www.chess.com/livechess/profile/Tracer1808
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje - pomoć

Koje cjepidlacenje pobogu. {#}

 

xin kaže...

s dobrim razlogom ili ne, mislim da covjeku nisi olaksao zivot svojim kodom. neznam ni ja kakav bi GetDC(0) trebao biti, mogu pretpostaviti no... keep it simple.

http://msdn.microsoft.com/en-us/library/dd144871%28v=vs.85%29.aspx

 

U dokumentaciji jasno stoji sto se dogada kada se GetDC pozove sa NULL parametrom, tako da to nije nikakav nedokumentirani hack. Svatko koga zanima sto GetDC radi ce otici na MSDN, a tamo ce naci crno na bijelome slijedeci dio teksta:

hWnd [in]

A handle to the window whose DC is to be retrieved. If this value is NULL, GetDC retrieves the DC for the entire screen.

 

TracerCPP kaže...

HDC jednostavno nije dobar pristup u ovom slučaju iz niza razloga.

Nisam ni rekao da je dobar pristup. Meni je prvome bilo jasno sto radim, i da ce to biti daleko od idealnog. Mogao sam napisati pravilno, ali nisam. Buduci da sam i sâm trenutno u GDI vodama ovaj programcic mi je dao povoda da isprobam kako bi bilo da jednostavno uzmem DC od ekrana i crtam preko njega. Evo nesto ovako bi bilo miljama bolje:

 

#include <windows.h>

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
void Paint(HWND);

char szClassName[]="WindowsApp";

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;
    HRGN hrgn;

    wincl.hInstance     = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc   = WindowProcedure;
    wincl.style         = CS_DBLCLKS;
    wincl.cbSize        = sizeof(WNDCLASSEX);

    wincl.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wincl.lpszMenuName  = NULL;
    wincl.cbClsExtra    = 0;
    wincl.cbWndExtra    = 0;
    wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND;

    if (!RegisterClassEx(&wincl))
        return 0;

    int centerx=GetSystemMetrics(SM_CXFULLSCREEN)/2;
    int centery=GetSystemMetrics(SM_CYFULLSCREEN)/2;
    int radius=20;

    hwnd = CreateWindowEx(0, szClassName, "Windows App", WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, radius*2, radius*2, HWND_DESKTOP, NULL, hThisInstance, NULL);
   
    hrgn = CreateEllipticRgn(0, 0, radius*2, radius*2);
    SetWindowRgn(hwnd, hrgn, FALSE);
    SetWindowPos(hwnd, HWND_TOPMOST, centerx-radius, centery-radius, radius*2, radius*2, SWP_SHOWWINDOW);

    while (GetMessage(&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }

    return messages.wParam;
}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

    switch (message)
    {
        case WM_DESTROY:
             PostQuitMessage(0);
             break;
       
        case WM_PAINT:
             Paint(hwnd);
             break;
            
        case WM_RBUTTONDOWN:     //desni klik zatvara prozor
             PostQuitMessage(0);
             break;
       
        /*case WM_NCHITTEST:     //ukloniti komentar ovdje kako bi se prozor
             return HTCAPTION;*/ //mogao pomicati povlacenjem klijent podrucja

        default:
             return DefWindowProc(hwnd, message, wParam, lParam);
    }

    return 0;
}

void Paint(HWND hwnd)
{
     PAINTSTRUCT ps;
     RECT rect;
     HDC hdc;
    
     GetClientRect(hwnd, &rect);
    
     hdc=BeginPaint(hwnd, &ps);
     Ellipse(hdc, 0, 0, rect.right-1, rect.bottom-1);
     EndPaint(hwnd, &ps);
    
     return;
}

 

Zadovoljan? U biti mogu garantirati da neces biti, negdje ces vec nesto iskopati, a ako kojim slucajem ne iskopas ti, vec ce se netko drugi naci sa primjedbom. Naucio sam odavno da jednostavno ne mozes zadovoljiti sve, pa se uglavnom ne trudim ikoga zadovoljavati :D

 

Sve najbolje za blagdane. Zelim vam manje kôda, a vise dobre klope i druzenja sa obitelji i prijateljima ;)

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put sub 24.12.2011 21:42 (rustweaver).
12 godina
neaktivan
offline
Re: Programiranje - pomoć
rustweaver kaže...

Koje cjepidlacenje pobogu. {#}

 

Nisam ni rekao da je dobar pristup. Meni je prvome bilo jasno sto radim, i da ce to biti daleko od idealnog. Mogao sam napisati pravilno, ali nisam.

I sam si napisao da si mogao napisati pravilno, ali nisi, i kada ti se ukaže na grešku tu glumiš neku povrijeđenost. Na tvom mjestu bi malo promjenio svoj stav jer ako nisi siguran u ono što pišeš, a za to isto nisi očito spreman primiti kritiku - onda to jednostavno nemoj pisati. Samo zbunjuješ autora topica.

 

http://www.chess.com/livechess/profile/Tracer1808
Poruka je uređivana zadnji put sub 24.12.2011 22:00 (TracerCPP).
12 godina
neaktivan
offline
Re: Programiranje - pomoć
rustweaver kaže...
A handle to the window whose DC is to be retrieved. If this value is NULL, GetDC retrieves the DC for the entire screen.

to sam i pretpostavio. nije mi ni padalo napamet da radish neke hackove kolega. samo sam iznjeo svoje misljenje o metodi. ovaj drugi kod lajkam. ugl. vrijeme je da prestanem komentirat pijan. sretan bozic svima!

Poruka je uređivana zadnji put ned 25.12.2011 6:06 (xin).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice