Skocz do zawartości

Omega

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Wszystko napisane przez Omega

  1. Omega

    Obsluga ListBox'a

    1. Musisz nadac mu styl LBS_NOTIFY i wtedy w WM_COMMAND listbox bedzie przekazywal reakcje zmiany zaznaczenia poprzez LBN_SELCHANGE. Oczywiscie nie przekarze mumeru wpisu. Musisz wtedy sam pobrac informacje poprzez SendMessage ze stala LB_GETCURSEL.
  2. Omega

    DialogBox

    DialogBox powoduje utworzenie okna modalnego, dlatego...ja tez zle odpowiedzialem, ale nie mozna uzyc akceleratorow bo jak wyzej. Poprostu jak wywolujesz funkcje DialogBox to dlasza czesc kodu dopiero wykonuje sie po zamknieciu DialogBoxa. Aby uzyc akceleratory w oknach dialogowych to wywolaj je poprzez CreateDialog.
  3. WM_CTLCOLORSTATIC:begin if (lparam=uchwytedita) then begin //ten odcinaek bedzie tylko wykonany dla kontrolki, ktora reprezentuje uchwyt "uchwytedit" SetBKColor(wparam,RGB(0,255,0)); result:=CreateSolidBrush(RGB(0,255,0)); end; end;
  4. Dlatego, ze ma wiele ulatwien zwiazanych z grafika i dlatego. Ja narazie korzystam ze starego gdi, bo gdi+ nie jest jeszcze tak bardzo rozpowszechnione. Ja mam windwos 98 i bym musial instalowac jakas pewnie nakladke aby u mnie to dzialalo.
  5. Problem polega na tym, ze wszystkim wystarcza gdi. Wiadomo, ze gdi+ jest lepszy, ale my mamy swoje sposoby na zapisywanie plikow do innych formatow niz bmp. Jest to ciezsza robota, ale uczy.
  6. Omega

    DialogBox

    1. Nic nie stoi na przeszkodzie aby do dialogboxow przypisac akcelerator klawiatury. Blad pewnie lezy w zlym napisaniu algorytmu przez ciebie. 2. Mozna, ale sam musisz odrysowywac taki caption - rowniez z tekstem. Zapoznaj sie z takimi komunikatami jak WM_NCPAINT. 3. Jezeli nie twoj to co sie martwisz?   Na pewno blad lezy...patrz na punkt nr. 1.
  7. Omega

    Bitmapy znowu...

    Czekasz na odpowiedz? Stary zastanow sie albo czasami skorzystaj z pliku pomocy typu win32.hlp. Jezeli nie masz to ci moge przyslac. Musisz wiedziec, ze jak do kontekstow przypiszesz przed operacja bitblt z parametrem SRCAND inny kolor pedzla niz jest standardowy to moga sie zamienic kolory, ktore beda "przeswitujace".
  8. Jezeli lparam rowna sie uchwtytowi kontrolki edit to dla niej to zastosuj. Stary, czy ty tylko czekasz na gotowce, czy rzeczywiscie nie wiesz, ze w tym komunikacie oprocz jego samego sa takie parametry jak lparam i wparam. I wlasnie lparam zwraca uchwyt kontrolki, ktora akurat obsluguje.
  9. Omega

    Bitmapy znowu...

    Wystarczy odmalowac poprzez bitblt, z tym, ze na koncu dac parametr SRCAND - kopiuje obraz za wyjatkiem bialych kolorow, czyli tam gdzi biale to bedzie spod.
  10. to zrob tak jak napisalem, tylkow komunikacie WM_CTLCOLORSTATIC, czyli: WM_CTLCOLORSTATIC:begin SetBKColor(wparam,RGB(0,255,0)); //aby tlo pod tekstem mialo kolor result:=CreateSolidBrush(RGB(0,255,0)); //aby ogolnie tlo mialo kolor end;
  11. Czy sie da skopiowac przyslonietego okna to niewiem, bo nie probowalem. Ale ogolnie, to nie jestem pewien czy da sie tak standardowo skopiowac obraz odrysowywany przez DirectX. Pierwsza uwaga to za duzo tego kodu w WM_PAINT. Powinien byc tylko kod do odrysowania, a nie tez do pokazania komunikatow. No i ten UpdateWindow w tym komunikacie? Poza tym zrobiles zegar i komunikat chyba nie zdazy takiej ilosci wykonac naraz - zalezne jest to od sprzetu i jaki zadales interwal czasowy na SetTimer. WM_Paint poiwnien prawidlowo wygladac tak: WM_PAINT:begin dc:=beginpaint(okno,ps); ... //tutaj kod do odrysowania. Odrysowujac na oknie masz kontekst dc, lub ps.hdc. zawsze jak tworzysz nowekonteksty w pamieci to pamietaj aby je na koncu zwalniac. Jezeli odrysowujesz ciagle te same okno to po co naokraglo odwolywac sie do niego w tym komunikacie. Wystarczy raz pobrac np. w WM_CREATE i np. w zegarze sprawdzac czy caly czas jest. Bo jesli nie to po co wywlywac odrysowanie okna poprzez InvalidateRect? endpaint(okno,ps); end;
  12. WM_CTLCOLOREDIT:begin SetBKColor(wparam,RGB(0,255,0)); //aby tlo pod tekstem mialo kolor result:=CreateSolidBrush(RGB(0,255,0)); //aby ogolnie tlo mialo kolor end;
  13. Aby skopiowac cokolwiek z ekranu wystarczy urzyc nastepujacego algorytmu: var dc,screen:hDC; bm:HBITMAP; begin screen:=getdc(0); bm:=createcompatiblebitmap(screen,200,200); //200 to np. rozmiar wyskosci i szerokosci kopiowanego okna dc:=createcompatibledc(screen); selectobject(dc,bm); bitblt(dc,0,0,200,200,screen,50,50,SRCCOPY); //50 to polozenie okna (x,y) releasedc(0,screen); ... i bm jest uchwytem zrzuconej mapy. A jezeli chcesz pobrac polozenie okna wystarczy zastosowac GetWindowRect.
  14. A nie latwiej obsluzyc komunikat WM_SIZE i tam przesowac okna dzieci przez np. SetWindowPos?
  15. Omega

    Zapisywanie bitmapki

    no to drugi link: https://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_7zfp.asp
  16. Omega

    PChary

    Nawet specjalista od delphi nic nie pomoze, bo tak troche jak pokazales to wydaje sie dobrze. Musial bys pokazac jak wywolujesz ta funkcje i ta funkcja musiala by byc pokazana w calej okazalosci.
  17. Omega

    jak zrobic skiny?

    Aby zastapic oryginlna funkcje kontrolki musisz zrobic np. tak: function NewWndProc(Handle: HWND; Msg: Integer; wParam, lParam: Longint):Longint; stdcall; if msg=WM_PAINT then begin i tu obsluga odrysowania end; result := CallWindowProc(WProc, Handle, Msg, wParam, lParam); end; WProc:=pointer(SetWindowLong(Edit1.Handle,GWL_WNDPROC,Longint(@NewWndProc)));
  18. Omega

    Zapisywanie bitmapki

    Zobacz jak zapisac na przykladzie z zasobow do pliku: https://members.fortunecity.com/shetzl/svbmres.html
  19. Omega

    Zapisywanie bitmapki

    Jezeli korzystasz zdelphi i bezposednio z VCL, to nie lepiej zkorzystac juz z klas, w tym przypadku TBitmap z modulu Graphics?
  20. Omega

    Wyciągnąć z resów

    Jezeli masz zamiar dostac sie do katalogu fontow, to nie lepiej skorzystac z funkcji SHGetSpecialFolderLocation ze stala CSIDL_FONTS?
  21. Omega

    Wyciągnąć z resów

    var res,ACFont,plik:THandle; ACData:pointer; HM:cardinal; begin Res:=FindResource(hinstance, 'CLASSIC', 'TTF'); ACFont:=LoadResource(hinstance, Res); ACData:=LockResource(ACFont); HM:=SizeofResource(hinstance, res); Plik:=CreateFile('classic.ttf', GENERIC_WRITE, 0, nil, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, 0); WriteFile(Plik, ACData^, HM, HM, nil); CloseHandle(Plik); end. Sam skonfrontuj swoje bledy
  22. Omega

    jak zrobic skiny?

    Najlatwiej to chyba subclassowac.
  23. Omega

    Wyciągnąć z resów

    No stary, jak to nie wiesz? Linkiem praktycznie zalatwilem wszystko. A wiec jesli chcesz wyciagnac zasob z programu, ktory wlasnie ma to zrobic to juz nie musisz korzystac z funkcji LoadLibrary, lub LoadLibraryEx (ta druga najczesciej jest stosowana do wyciagania zasobow z plikow 16 bitowych), tylko wystarczy zrobic tak (kod w delphi): hres:=FindResource(nil,'CLASSIC','TTF'); //hres - uchwyt zasobu. Jesli blad to zwroci 0; hMem := LoadResource(nil, hResource); //bedzie blad to jw. W windows od 95 nie musisz stosowac pozniej FreeResource, bo system robi to automatycznie lpResource := LockResource(hMem); //pobierasz wskaznik do danych size:=SizeofResource(nil,hres); //pobierasz rozmiar lpresource to wskaznik a size to rozmiar bloku zasobu. Chyba wiecej nic ci do szczescia nie potrzeba. Wszystko pisalem praktycznie z pamieci i byc moze cos zle wklepalem (ale nie wydaje mi sie) to wal.
  24. Omega

    Wyciągnąć z resów

    Zapisac do pliku plik? Nie zabardzo moze rozumiem o co ci chodzi. Czy chcesz zapisac cala strukture jakiegos pliku do zasobow czy na odwrot z zasobow wyciagnac dane do pliku?...Zapisac do pliku plik TTF o nazwie CLASSIC???? Czy TTF moze jest nazwa zasobu. W zasobach nie ma plikow tylko sa dane, ktore moga byc pobrane i dopiero z nich moze byc utworzony plik. P.S. Zmien kodowanie polskich znakow na swojej stronie bo ich nie widac - krzacza sie.
  25. Omega

    Skalowanie Bitmap

    StretchBlt jest jednym z mozliwosci jezeli wykorzystujesz uchwyt. Jezeli chcesz dzialac bezposrednio na bitach rysunku to wykorzystaj: StretchDIBits Przyklad na StretchBlt (w delphi): Var mapa:HBITMAP; PS:TPaintStruct; DC:hDC; x,y:integer; //x,y - rozmiar jaki bedzie wyswietlany rzeczywiscie - czyli przeskalowany xo,yo: integer; //xo,yo - rozmiar oryginalny bitmapy ... WM_PAINT:begin beginPaint(Okno,PS); DC:=CreateCompatibleDC(PS.hDC); SelectObject(DC,mapa); StretchBlt(PS.hDC,0,0,x,y,DC,0,0,xo,yo,SRCCOPY); DeleteDC(DC): EndPaint(Okno,PS); end; Dodatkowo mozesz wykorzystac funkcje SetStretchBltMode, zktorej wykorzystujac odpowiednie stale mozesz sprawdzic z ktora najladniej wychodzi. Powyzsza metoda moze byc wykorzystana do bezposredniej zmiany rozmiaru mapy - przedtawilem to na przykladzie pokazania bezposredniego. Chociarz takie kombajny jak photoshop wykorzystuja wlasne algorytmy i wyglada to miejwiecej tak jak opisuje Nicon. Dodatkowo ten program ma wybor zmiany rozmiaru obrazka. Nie pamietam jak to dokladnie sie nazywa, ale chyba metoda sasiadujaca, dwuszescienna i dwuliniowa.
×
×
  • Utwórz nowe...