Skocz do zawartości

Omega

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Omega

  1. Pewnie masz racje, tylko mi chodzilo w tym przypadku o delphi. W kodach zdodlowych MessageBox jest przypisany bezposrednio do MessageBoxA. I wlasnie w delphi sie stosuje AnsiChar na AnsiString i na odwrot WideChar jako WideString. A przyznam szczerze nie wiedzialem tak naprawde do czego praktycznie sluzy te WideChar. Funkcje do knwersji zankow to:
    MultiByteToWideChar i WideCharToMultiByte

  2. A i W Oznacza typ znakow. I tak A to AnsiChar a W to WideChar. Ten pierwszy to standardowy typ znakow jaki znasz, czyli np. MARIUSZ. Zas drugi to dodatkowo do kazdego znaku dodawane jest zero, czyli: M0A0R0I0U0S0Z0. Taki sposob zapisu stosowany jest np. w nazewnictwie zasobow. Sa odpowiednie funkcje API, ktore moga formatowac naprzemiennie lancuch znakow. I teraz co do MessageBox, ta funkcja to to samo co MessageBoxA, ale nie to co MessageBoxW. W tej drugiej musial bys przekonwertowac odpowiedni lancoch Ansi do WideChar.
    Najczesciej w programowaniu uzywa sie AnsiChar. Ale zobacz w strukture pliku wordowskiego (*.doc). Wszystkie teksty zapisywane sa jako WideChar.
    Praktycznie wszystkie funkcje API, ktore w paramtrach potrzebuja lancucha znakow maja styl wyboru funckcji ( z koncowka A lub W).

  3. 1. W oknie dialogowym ustaw dodatkowy przycisk (ten ktory ma sie pokazywac) jako niewidoczny i gdy ktos wcisnie z okna (z CreateWindowEx) przycisk wyslij komunikat do dialogboxa (SendMessage lub PostMessage) z komunikatem wymyslonym przez ciebie. A w komunikacie utworz funkcje pokazujaca tan button.
    2. Musisz to chyba zrobic w sposob taki, ze przydzielasz poprostu dynamicznie kawalek pamieci dla zmiennej dla danej osoby w postaci zwroconego uchwytu. Z tym, ze przecowywany uchwyt by byl np. w rekordzie wspolnie z nazwa zmiennej, ktora by byla wlasnie identyfikatorem.

  4. Sam kiedys mialem ten problem z odswiezeniem ikon. Zadalem pytanie na forum, ale tez nikt nie wiedzial. I do tej pory nie wiem jak to zrobic, a imalem sie roznych sposobow, np:

    SendMessage(HWND_BROADCAST ,WM_SETTINGCHANGE,SPI_SETNONCLIENTMETRICS,NULL);

    Ale w Win98 nie dziala. A napewno jest na to sposob bo sam system sobie z tym radzi i WinRAR, kiedy w programie przypiszemy, ktore ikony ma otwierac, a ktore nie.

  5. Nie spotkałem się z taką funkcją, która by sprawdziła różnice dat. W takim przypadku nie masz wyjscia, tylko sam zaprojektowac taki algorytm, lub poszukac w necie - byc moze sa jakies biblioteki udostepnione, ktore maja taka funkcje.

  6. 1. Luknij na procedure GetFileVersionInfo
    5. Co do tej odpowiedzi Nicona to bym się troche kłucił. Podane procedury tylko zliczaja okna uruchomione w systemie, a przecierz niektore programy dzialaja w tle i nie maja okienek, zwlaszcza np. jakies trojany. W tym wypadku w windowsie nie opartym na NT wykorzystal bym funkcje CreateToolhelp32Snapshot i do tego Process32First i Process32Next. Funkcje zwracaja wszystkie informacje o uruchamianych procesach ze scierzkami dostepu. Jezeli chodzi o system NT to wykorzystuje sie biblioteke...No wlasnie, nie pamietm, ale z powyzszych funkcji nie skorzystasz. Mam gdzies opis ich w knigach, ale niestety pozyczylem znajomemu.
    4. Aby najszybciej sprawdzic zawartosci plikow to najlepiej jest wykorzystac odwzorowanie pamieciowe pliku (CreateFileMapping).

    Dodane (01.04.04):
    Wiem, ze dzis prima - aprilis ale nie bede oszukiwal :D . Chcialem dopisac cos do pkt. 5. Otorz w windows opartym na NT wykorzystuje sie biblioteke PSAPI, ktora zostala juz wspomniana. Bo zniej mozna wykorzystac funkcje EnumProcesses. I jesli bys chcial swoj program wykorzystac na wielu platformach, to najlepiej by bylo powyzsze funkcje do zliczania procesow sprobowac zaladowac dynamicznie.

  7. 1. Aby cos wogole rysowac po kontekscie, wczesniej musi byc do niego przypisana mapa (SelectObject()). Ona ma wyznaczona wysokosc i szerokosc obrazka i tylko wzgledem tych rozmiarow bedzie widoczne jakiekolwiek rysowanie. Aby zapisac ta mape do pliku nie pobiera sie nic z tego kontekstu tylko bezposrednio z uchwytu tej mapy. A wykonuje sie to za pomoca funkcji GetObject(HBitmap, sizeof(DibSection), DibSection). Z tych informacji mozna juz zainicjowac BitmapInfoHeader, rozmiar mapy DIB itd. I z tych informacji (oczywiscie trzeba tez zainicjowac BITMAPFILEHEADER) mozna juz zapisac mape. Funkcja GetDIBits zwraca nam dane mapy.
    2. Nie ma takiego komunikatu. Ale chyba jezeli znasz rozmiar klienta (GetClientRect) to chyba bedziesz wiedzial czy rysujesz poza obszar.
    3. Nie odrysowuj nigdzie indziej jak w komunikacie WM_PAINT, poprzez BeginPaint i EndPaint.

  8. Co cool? Cieszysz sie ze ci wywalil blad. Sprobuj debugowac, albo chociarz zobacz w ktorym momencie wywala ci blad? Wszystko zalezne jest tez od wersji kompilatora. Ja uzywam D 6 i to co przedstawilem wczesniej sprawdzilem - zero bledow i COOL!!!

  9. Jako pchar mozna uzysc zwyklej tablicy (jak wspomnial Piasiu) i zawsze wszystko bedzie gralo TIP-TOP (Pierwsza liczba tablicy musi byc 0), np:

    var P:array[0..512]of char;
    
    ---
     GetWindowText(Okno,P,SizeOf(P));
     MessageBox(okno,P,'nic',MB_OK);
    ---
    

    Ale jesli mimo wszystko uparles sie na typ tylko pchar to musisz zrobic tak:

    var P:pchar;
    ----
     getMem(P,512);
     GetWindowText(Okno,P,512); //tutaj w zyciu nie stosuj sizeof(P), jak poprzednio, bo p jest wskaznikiem
     MessageBox(okno,P,'nic',MB_OK);
     freemem(P,512);
    ---
    
×
×
  • Utwórz nowe...