Skocz do zawartości

Aspect

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Aspect

  1. Zgadzam sie z przedmowca - posprawdzaj sobie co NAPRAWDE znajduje sie w poszczegolnych zmiennych, sproboj odegrac dzwiek wpisujac do sndPlaySound "na sztywno" nazwe z pelna sciezka do jakiegos pliku, ktory wiesz, ze na pewno istnieje.
    Sproboj tez te kilka linijek, w ktorych zapisujesz nazwe do wav zamienic taka:

    sprintf(wav,"%s%c%s",sciezka,wczytaj[i],sciezka2);

    moze to cos zmieni.

  2. Salwadore napisał:
    Nie lubisz Visual'a? Mi się wydaje lepszy od Dev.

    No to mamy podobne zdania :).
    Ja tez lubie "Wiżuala" i też uważam, że jest dużo leszy od Dev (dowodem na to moze byc brak zdefiniowania tych stałych), ale staram się nie uzależniać od jednego środowiska ;-). Bawie sie tym wszystkim na razie i sprawdzam sobie rozne zabawki :).
    Trudno sie tez spodziewac, zeby darmowy produkt byl lepszy od produktu, za za ktory placi sie niemala kaske - takie sa prawa rynku :? .

  3. Z kompilatorem to podejrzewam, że nic wspólnego nie ma, ale jak porównałem plik commctrl.h, którego używa Dev z tym, który używa Microsoft Development Studio .NET, to okazało się, że w tym z Dev-Cpp nie ma zdefiniowanych niektorych stalych np. TB_SETIMAGELIST.

  4. Maciej Pacuła napisał:
    A wywołałeś funkcję InitCommonControls?

    Właśnie o to mi chodziło!!!
    Teraz (po wywołaniu InitCommonControls) wszystko pieknie dziala. Dziekuje za rozwiazanie mojego problemu.

  5. No to chyba sie pochlastam, bo mi nei dziala ani z najnowsza wersja Dev ani z manifestami ;). Moze oprocz zwyklego dodania jednej linijki do pliku .rc cos jeszcze zrobiliscie.
    Czy moglbym prosic o przykladowy programik na maila?

    "Odkrylem" wlasnie ze w Dev nie trzeba nic recznei wklepywac - wystarczy tylko w opcjach projektu zaznaczyc pole "Support Windows XP Themes" i juz manifesty sie same dodaja:). Co nie zmienia faktu, ze moje dialog-boxy sa nadal niewidzialne ;).

    Dobra. Doszedlem do wniosku, ze to wina mojego kompa/ustawien WinXP. Na drugim komputerze (Win95) dialog-boxy sa widoczne (ale rzeczjasna nie maja wygladu XP :)  ).

  6. Bardzo dziękuję!
    Nie spodziewałem się, ze tak szybko dostanę tak wyczerpującą odpowiedź. Dodam jeszcze tylko, że jeśli ktoś chce użyć załączonego kodu w Dev-Cpp, to musi sobie zamienić następujące identyfikatory:
    TBSTYLE_FLAT na 2048 (choc wyglada, ze jest to zalezne od wersji Internet Explorera)
    TB_SETMAXTEXTROWS na WM_USER + 60
    TB_SETIMAGELIST na WM_USER + 48.
    U mnie bez tego nie dzialalo.
    Sprawdzilem commctrl.h w Dev. Nie ma tam zdefiniowanych identyfikatorow TB_SETMAXTEXTROWS, TB_SETIMAGELIST :(.
    Chyba powroce jednak do starego, dobrego "Wiżuala" ;-).

    Hurra!!! Mozna zmieniac posty :).
    Chcialem jeszcze dodac, ze zeby program zadzialal to trzeba "dolinkowac" comctl32.lib (w VC++) lub libcomctl32.a (w Dev-Cpp) do projektu.

  7. Po przeczytaniu artykułu/lekcji na temat dostosowania aplikacji do WinXP, od razu poczułem nieodpartą potrzebę aby moje programy (pisane pod Dev-Cpp) także miały taki "pienkny" wygląd ;-). Podejrzałem więc jakie zmiany zachodzą w pliku .rc po dodaniu do zasobow XMLa i okazało się, że została dodana tylko jedna (znacząca) linijka:

    1                       24      DISCARDABLE     "plik.xml"

    Niestety, po dodaniu jej do pliku zasobow w Dev, i skompilowaniu moje okienka dialogowe, a nawet MessageBoxy przestaly sie pojawiać.
    I oto, w końcu, moje pytanie:

    Czy ktoś już się tym bawił w Dev i wie może co żle zrobiłem, albo czego jeszcze nie zrobiłem?
    (Od razu mowie, ze plik ma taka sama nazwe jak jest napisana w pliku zasobow, sciezka jest prawidlowa, a zawartosc pliku .xml jest IDENTYCZNA z ta w artykule. Ponadto: przy kompilacji nie wychodza zadne bledy, ani ostrzezenia, tylko po prostu po kliknieciu na pozycje menu wywolujaca dany Dialog albo MesssageBox NIC sie nei dzieje - a bez w/w linijki się działo ;-) )

    Z góry dziękuję za wyczerpujące odpowiedzi.
    Pozdrawaim.

  8. TinS napisał:
    Powinienem zajac sie zbieraniem znaczkow, a nie programowaniem - za glupi na to jestem :(

    Nie, to jest wszystko proste, tylko ja tak zamieszalem - sorry.
    Oto przykladowy kod o ktory prosiles, moze bardizej Ci pomoze. W razie jak bys nie wiedzial co robia niektore funkcje to sobie poczytaj o nich na stronei https://msdn.microsoft.com/library/. No dobra, daje juz ten kod:
    Plik .rc:

    #include <windows.h>
    #include "resource.h"
    
    IDM_MAIN MENU
    {
            POPUP "Program"
            {
                    MENUITEM "Okno dialogowe",IDM_DIALOG
                    MENUITEM SEPARATOR
                    MENUITEM "Zamknij",IDM_CLOSE
            }
    }
    
    IDD_DIALOGBOX DIALOGEX 0, 0, 240, 80
            STYLE DS_CENTER | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
            CAPTION "Dialog Box"
            FONT 8, "MS Sans Serif", 0, 0, 0x0
            {
                    LTEXT           "To jest przykladowy DialogBox.",IDC_STATIC,10,11,120,11,SS_NOPREFIX
                DEFPUSHBUTTON   "OK",IDOK,180,10,50,15,WS_GROUP
                PUSHBUTTON      "Cancel",IDCANCEL,180,27,50,15
            }
    

    Plik resource.h:

    #define IDC_STATIC        -1
    #define IDM_DIALOG      100
    #define IDM_CLOSE       101

    W pliku .cpp musisz zamienic linie:

    wincl.lpszMenuName = NULL;

    na

    wincl.lpszMenuName = "IDM_MAIN";

    .
    Do funkcji WindowProcedure dodaj:

            case WM_COMMAND:
                    switch(LOWORD(wParam))
                    {
                            case IDM_DIALOG:
                        DialogBox(GetModuleHandle(NULL),"IDD_DIALOGBOX",hwnd,(DLGPROC)DialogProcedure);
                        break;
                            case IDM_CLOSE:
                            PostMessage(hwnd,WM_CLOSE,0,0);
                            break;
                    }
    

    ,
    i do calego kodu dodaj jeszcze funkcje:

    LRESULT CALLBACK DialogProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
            switch (message)
            {
                    case WM_INITDIALOG:
                                    return TRUE;
    
                    case WM_COMMAND:
                            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
                            {
                                    EndDialog(hdlg, LOWORD(wParam));
                                    return TRUE;
                            }
                            break;
            }
        return FALSE;
    }
    

    Mam nadziueje, ze bedzie dzialac.
    Powodzenia.

  9. Czakol napisał:
    Na poczatek napisze "WIelki Dzieki! bialy" ;)

    He he... nie ma sprawy...;-)
    A tak serio. Sorki, ze nie udalo mi sie rozwiazac Twojego problemu, ale mialem wrazenie, ze wynikiem Twojego kodu i tak bedzie dopisanie calego stringa wyniki do stringa wav.
    Sproboj w takim razie dodac przed lina 14 takie dwie linijki kodu:

    char* p;
    p=&wczytaj;

    a w linii 14 daj p zamiast wczytaj.

    Mam nadzieje ze teraz udalo mi sie choc troszke pomoc Ci w rozwiazaniu problemu ;-).
    Powodzenia!

  10. Hmmm...
    No ja Ci powiem, ze u mnie to dzialalo bez zadnego includa w pliku .cpp (natomiast do pliku .rc, czyli tego, w ktorym wklepujesz wyzej napisany kod warto dodac #include <windows.h> ;-) ).
    Jezeli chodzi o ten plik naglowkowy, to zazwyczaj uzywa sie go, aby identyfikatory zasobow (ktore sa zwyklymi wartosciami liczbowymi) zdefiniowac tak, zeby potem latwiej bylo ich uzyc w programie. Na przyklad wklepujesz tam linie:

    #define MENU_PLIK_OTWOZ 100

    i juz nie musisz pamietac, ze pozycja menu Plik->Otworz ma przypisany numer 100, a jedynie, ze ma identyfikator MENU_PLIK_OTWORZ, ktory sobie juz spokojnie uzywasz w programie.
    Ten plik naglowkowy nalezy wtedy dolaczyc zarowno do pliku .cpp jak i .rc.

  11. W Dev (w przeciwieństwie do Visual Studio czy Borland Buildera) wszystkie zasoby musimy niestety wklepywac recznie (chyba, ze o czyms nie wiem i w takim wypadku prosze o szybkie sprostowanie). Wyglada to mniej wiecej tak:
    1. Tworzysz nowy projekt (lub otwierasz stary ;-) )
    2. Wyberasz z menu File New a potem Resource File (pojawia sie nowy czysciutki plik)
    3. W tym pliku wklepujesz kod DialogBoxa, ktory mniej wiecej wyglada tak:

    IDENTYFIKATOR /*bedziesz go potem uzywal w funkcji tworzacej dialog*/ DIALOGEX /*teoretycznie mozna uzyc zamiast tego DIALOG, ale DIALOGEX ma wiecej mozliwosci*/ POZYCJAX,POZYCJAY,ROZMIARX,ROZMIARY /*polozenie i rozmiar dialogboxa*/
    STYLE /*po tym znaczniku umieszczasz rozne identyfikatory stylow okna oddzielona znakiem |. Przykladowe identyfikatory to: DS_SYSMODAL | DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_VSCROLL | WS_SYSMENU | WS_THICKFRAME*/
    EXSTYLE /*style rozszerzone, np.:WS_EX_PALETTEWINDOW | WS_EX_LEFTSCROLLBAR | WS_EX_APPWINDOW*/
    CAPTION "Tytul okna DialogBoxa" /*nie trzeba tlumaczyc*/
    MENU IDENTYFIKATOR_EWENTUALNEGO_MENU
    FONT /*czcionka jaka ma byc wyswietlana w dialogboxie, np.: 8, "MS Shell Dlg", 400, 0, 0x1*/
    {*/w tym miejscu wprowadzasz kontrolki dialogboxa, np.:*/
    PUSHBUTTON "OK",IDOK,10,10,50,15 /*zwykly przycisk*/
    }

    Nastepnie w kodzie programu wywolujesz jaks funkcje tworzaca DialogBoxa (np DialogBox w ktorej drugim parametrem jest wlasnie nasz identyfikator), definujesz funkcje obslugi komunikatow i w ten oto prosty sposob masz DialogBoxa. Powodzenia!

    W razie jakichkolwiek watpliwasci albo bledow od razu pisz(cie).

  12. mam klopoty tu, pierwsze to: linia 12, i mam pytanie jesli jest zle to jak od liczby 65-112 powiedzmy losowac obojetnie jaka liczbe? iprzypisac zmiennej "x"??

    Rozumiem, że chcesz wylosować liczbę z przedziału np. 65-112?
    Przyjmujac, ze a - poczatek przedzialu i b - koniec przedzialu, szukana przez Ciebie wartosc moze byc obliczona w nastepujacy sposob:

    x=rand()%(b-a) + a;//rand nei pobiera zadnych parametrow, % to operacja modulo (reszta z dzielenia)

    drugie yo wers 14 gdzie wczytaj to String a BCB pokazuje blad ze to int i ze nie moze inta przypisac do wav :/ gdzie wav to tablica wav[4323];

    Sproboj przesunac te operacje za petle for i wywal z neij to "". Wtedy wczytaj bedzie wskaznikiem na CALY string i funkcja strcat() doda CALY string NA RAZ (a nie po kolei kazdy znak) ;-).

    A jeszcze do tematu: char jest po prostu wartoscia z przedzialu 0..255, a to ze zostaje czasem wyswietlony jako literka jest juz zasluga funkcji, które to robią.

×
×
  • Utwórz nowe...