Skocz do zawartości

Omega

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Wszystko napisane przez Omega

  1. Omega

    WS_TABSTOP ?

    Wystarczyło, że wszedłem na stronę https://www.programmersheaven.com i znalazłem odpowiedź na tamtym forum. Ogólnie dużo osób się o to pyta, a odpowiedź jest bardzo prosta. Wystarczy w pętli komunikatów okna wykorzystać funkcję IsDialogMessage. A co najlepsze, otwieram plik pomocy win32.hlp, szukam informacji o tej funkcji (myslałe, że ona jest tylko wtedy potrzebna gdy wykorzystujemy w naszym głównym oknie okienka dialogowe z zasobów) i pisze jak wół o korzystaniu z tej funkcji też dla tabulacji: ... Remarks Although the IsDialogMessage function is intended for modeless dialog boxes, you can use it with any window that contains controls, enabling the windows to provide the same keyboard selection as is used in a dialog box. When IsDialogMessage processes a message, it checks for keyboard messages and converts them into selection commands for the corresponding dialog box. For example, the TAB key, when pressed, selects the next control or group of controls, and the DOWN ARROW key, when pressed, selects the next control in a group. ...
  2. Omega

    WinAPI + Clean DOS

    Napewno w delphi ich się nie uzywa (chociarz tak naprawdę to nie wiem). Ale nie jest prawdą, że tylko BCB bo i w turbo assemblerze oraz w masm32 też je widziałem. Może poszukaj coś w helpie twojego kompilatora.
  3. Omega

    WS_TABSTOP ?

    Nie na MSDN. Wszedłem na google, wpisałem WS_TABSTOP i kliknąłem enter
  4. Omega

    Zasoby

    Standardowe zasoby, jak np. bitmapa to pobiera się z funkcji LoadBitmap(hinstance,'nazwabitmapy.bmp'). funkcja zwraca uchwyt bitmapy. Jeżeli zaś chodzi o niestandardowe zasoby to robi się tak: FindResource(nil,'nazwazasobu',typ) jeżeli znajdzie to zwraca uchwyt. I dalej: LoadResource(nil,uchwyt z findresource) lockresource(uchwyt globalny zwrocony z powyższej funkcji) funkcja zwraca wskaźnik do zasobów. Aby znać rozmiar skorzystaj z funkcji: SizeofResource(nil,uchwyt z findresource) Na zwalniasz uchwyty Freeresource
  5. Omega

    WS_TABSTOP ?

    Nie wydaje mi się. Poszukałem i troche poczytałem Wiem, że tworzy się kontrolki, która pierwsz musi mieć styl (oprócz WS_TABSTOP) WS_GROUP. Nastepne tylko WS_TABSTOP. Robi się to aby określić grupę kontrolek, które będą mogły być fokusowane przez strzałki. No ale cholera tworze tak i nic - a pisało jak wół. Napewno to działa tylko chyba coś źle robię.
  6. Omega

    Zasoby

    Z plików res, czy exe (dll itp)?
  7. Ale rzeczywiście po co twaorzyć takiego edita, chyba że autor chce co pewien czas przywracać mu możliwość wpisania do niego czegoś. bo jeżeli nie to lepiej utworzyć wspomnianego statica.
  8. Omega

    WinAPI + Clean DOS

    Nie wiem czemu masz błędy, ale i tak nie będę wiedział bo pisze w delphi. Interesowałem sie kiedyś stubami, ale mi przeszło. I kiedyś zainstalowałem Borland C++ i z programów przykładowych (nie skompilowanych) wprowadziłem odpowiedni wpis do pliku def i kompilator c++ skompilował go tak jak zamierzałem. Opisałem to wyżej.
  9. Omega

    WS_TABSTOP ?

    Nie jest to złe spostrzerzenie, bo też o tym zaczynam tak mysleć. Ale to po co jest ten WS_TABSTOP. Bo po co dodawać tyle kodu (samemu obsługiwać procedure) jak przecierz ta stała jakoś musi być wykorzystana.
  10. Omega

    WS_TABSTOP ?

    Jak to jest w rzeczywistości z kontrolkami (np. buttonami), którym dodajessz styl WS_TABSTOP a oknu głównemu przypisujesz styl WS_EX_CONTROLPARENT i co? I nic. Klikasz tabulacją, a fokus wcale nie przeskakuje do następnej kontrolki ze stylem WS_TABSTOP
  11. Omega

    FlatButton

    Ja sam jak kiedyś chciałem zrobić taki przycisk, to tworzyłem standardowy button tylko z stylem BS_OWNERDRAW. I taki przycisk trzeba obslużyć w WM_DRAWITEM, tzn. odmalowując płaskie krawędzie w momencie gdy myszka jest nad klawiszem. Ale jest jeszcze jedna ważna rzecz. Chodzi o moment, kiedy myszka "zchodzi" z przycisku. Bo jak dzieje się to bardzo szybko i kursor ucieknie poza okno główne, to system już nie obsłuży tego okna i zostanie ci odrysowany klawisz jakby nad nim była mysz. Dlatego do takiego przycisku trzeba utworzyć zegar, który co pewien czas bedzie sprawdzał kursor i jeśli jest zupełnie gdzie indziej to walisz na klawisz invalidrect aby go odmalował tak, jakby tam nie było myszy
  12. Subclassing w tym przypadku dla edita to rewelacja. Przez to można np. w edicie wprowadzać tylko cyfry ale zmiennoprzecinkowe. Samemu trzeba w procedurze "nieoryginalnej" obsłurzyć klawiature tak, aby można było wprowadzać tylko liczby i jedną kropkę lub przecinek (może to być uzalerznione od tego jak w systemie ustawione są przecinki w liczbach zmiennoprzecinkowe).
  13. Omega

    Re: taki sam

    No to ja wam opowiem na jakiej zasadzie to działa. Programy, które otwierają zasoby plików wykonywalnych typu PE (32-bitowe aplikacje) najpierw odczytują ich nagłówek i w miejscach (w nagłówku głównym) gdzie wpisane są takie informacje jak adresy wirtualne funkcji importowanych, eksportowanych odczytuje czy jest wpis dla zasobów. I jeżeli jest to sprawdza w której sekcji (najczęściej w ostatniej). Z niej sprawdza adres fizyczny i przeskakuje do miejsca zasobów. Tam są wszystkie informacje o zasobach (ile zasobów, jakie i jakie wersje językowe) w postaci nagłówku rozbudowanego jako struktura drzewa. Każdy zasub ma swój adres w pamięci, który najczęściej znajduje się za nagłówkiem. Inaczej jest to po spakowaniu np. UPX'em. Program ten też pakuje zasoby, ale nie nagłówek zasobów, bo by była awaria podczas uruchomienia programu. Oczywiście, jeśli zasób ma ikonę to UPX jej nie pakuje, bo by była niezauwarzalna w eksploatorze windows. Tak samo i nie pakuje wiadomości o pliku, widoczne gdy sprawdzimy właściwości tego programu. I tak spakowany plik nie pokaże nigdy zasobów - oczywiście jeśli wyłączymy tą opcje w pakerze to zasoby będą widoczne. Właśnie robię program, który szyfruje plik wykonywalny (PE) i jednocześnie uniemożliwia wyciąganie zasobów z pliku, ale właśnie co do tego - przecierz też istnieją szyfratory plików wykonywalnych.
  14. Zostawmy komunkaty standardowe gdzie ich miejsce. Jeżeli już wysłać samemu komunikat to utworzyć poprostu nowy komunikat, np: WM_KOMUNIKAT = WM_USER + 123 i wysłać SendMessage(Okno,WM_KOMUNIKAT,0,MojeDane) lub postmessage (bez kolejki) Chociarz równie dobrze mojedane można umieścić w wparam
  15. Omega

    Odświeżanie ikon

    No właśnie. Czy zna ktoś funkcje API, która powoduje odświeżenie ikon. Załóżmy, że do danej ikony przypisałem poprzez rejestr rozszerzenie danego pliku. No i co dalej? Jak teraz odświeżyć ikony żeby był widoczny rezultat. Kiedy taką operacje robimy np. w Win98 to po zaakceptowaniu zmiany ikony dla danego pliku widać odświeżenie, a jak to zrobić samemu. Aha, żadna symulacja klawiszem F5 (odświeżanie), czy nawet wykorzystanie InvalidRect globalnie też nie działa.
  16. Widocznie się poprostu nie da. Parametr ten zwraca jakieś informacje, ale jakie to sam nie wiem. A nie możesz poprostu ustawić jakąś zmienną globalną przed createwindowex i w komunikacie WM_CREATE wykorzystać ją?
  17. Nie wiem czemu Ci sie nie skompilowało. Ja zrobilem i dziala. Może źle wpisałeś komende programu kompilacyjnego. Spróbuj tak: BRCC32 -foPlikWynikowy.res PlikWejsciowy.rc Oczywiście nie jest to pewnie kompilator zasobów ten, który ty używasz. Ale być może ma podobne opcje kompilacji i dlatego podaje je z kompilatora zasobów od borlanda.
  18. Omega

    taki sam

    Miałem podobny problem z utworzeniem rebaru w delphi. Okazało się, że funkcja InitCommonControlsEx zwraca zawsze false. W takim przypadku zainicjowałem ją zwykłym InitCommonControls i działa. A wogule funkcja wygląda tak: function InitCommonControl(CC: Integer): Boolean; var ICC: TInitCommonControlsEx; begin ICC.dwSize := SizeOf(TInitCommonControlsEx); ICC.dwICC := CC; Result := InitCommonControlsEx(ICC); if not Result then InitCommonControls; end;
  19. Omega

    Zmiana rozmiaru okna

    Zrobiłem cholerny błąd wpisując do tego obsługę WM_NCHITTEST. Stary, wystarczy odpowiednia obsługa WM_SIZING. Przyznam szczerze że dopiero teraz się tego nauczyłem. Chodzi o to że LParam'etr tego komunikatu przetszymuje wskaźnik do struktury RECT. I wystarczy sprawdzić czy dolna krawędź (rect.bottom) i prawa (rect.right) jest mniejsza lub równa od minimalnej długości limitowanej przez ciebie. Jeśli tak, to musisz przypisać rect.bottom, lub rect.right limitowaną wielkość. Mogę dać przykład tylko w delphi, bo praktycznie tylko w nim programuje (w porywach tez w asemblerze): if msg=WM_SIZING then begin R:=POINTER(LParam); //zmienna R to PRect, czyli zwykły rect, ale jako wskaźnik If R^.bottom<=MinCY then R^.bottom:=MinCY; If R^.Right<=MinCX then R^.right:=MinCX; Result:=1; //w tym komunikacie należy zawsze zwrócić wartość true dla procedury okna end;
  20. Omega

    Zmiana rozmiaru okna

    Musisz odebrać komunikat WM_SIZING, który odpowiada za zmianę rozmiaru, która z koleii odbywa się aktualnie. I tak jeśli rozmiar przekroczy, lub bedzie rowny rozmiarowi, który jest minimalny dla tej chwili to wstaw do jakiejś zmiennej globalnej że został przekroczony limit. I tak obsługuj tez komunikat WM_NCHITTEST, który w sobie musi zwracać do procedury wartość z funkcji DefWindowProc. Po wykonaniu tej funkcji sprawdzasz czy zmienna globalna nie akceptuje dalszego zmniejeszenia ramki. Jeśli nie to sprawdzasz dalej czy result ze wspomnianej funkcji dla procedury obsługi okna wynosi HTRIGHT , HTLEFT, HTTOP, HTTOPLEFT i HTTOPRIGHT. Jeśli tak to zwróć wartośćw result zero.
  21. Jest możliwość zablokowania kombinacji klawiszy ALT+CTRL+DEL, ale tylko w windowsach nie opartych na NT, tylko takich jak np. właśnie W95 lub 98. Blokuje się to funkcją: SystemParametersInfo(97,Word(True),nil,0); a odblokowuje: SystemParametersInfo(97,Word(False),nil,0);
  22. Omega

    WinAPI + Clean DOS

    Napewno wiesz co to jest plik definicji (*.def). Aby w nim włączyć przy kompilacji jakiś nie standardowy stub należy w tym pliku dodać linię: STUB 'MojProgramDosowy.exe'
  23. Omega

    WinAPI + Clean DOS

    Programik, który uruchamia się w samym dosie, np. we wspomnianym Regedit.exe nazywamy stub'em. Każdy plik wykonywalny 32-bitowy (PE) czy 16 bitowy posiada takowy. Aby go wtrącić do swojego programu należy odpowiednio wpisać go do pliku definicji przed kompilacją programu wynikowego. Plik definicji musi zawierać ścieżkę do pliku wykonywalnego tylko dosowego.
  24. Omega

    takis am

    Aby rysowac tekst bez bialego tla pod nim, nalezy przed wywolaniem procedury pisania wywołać procedure SetBKMode(hDC,TRANSPARENT).
  25. Omega

    HEH

    Wystarczy zrobić globalnego hooka. Ale to nie wszystko. Globalny hook powinien być umieszczony w bibliotece dll, których zmienne podlegają pamięci dzielonej.
×
×
  • Utwórz nowe...