Ray Napisano Listopad 8, 2019 Autor Zgłoś Udostępnij Napisano Listopad 8, 2019 Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Trace Napisano Listopad 9, 2019 Zgłoś Udostępnij Napisano Listopad 9, 2019 Do ustawiania tekstu w staticu i edicie używasz funkcji SetWindowText. I to tutaj tkwi problem, gdyż funkcja ta służy do innych celów. Zamiast tego skorzystaj z SetDlgItemText(podając uchwyt okna-rodzica oraz id kontrolki), bądź wyślij bezpośrednio do kontrolki komunikat WM_SETTEXT. case 201: { /* Tu pojawia się mój pierwszy problem. Chcę, aby po kliknięciu w button Szukaj, w staticu hPoletxt[1] pojawił się tekst "!!!", jednak się nie pojawia :( */ // id hPoletext[1] to 251 SetDlgItemText(hwnd, 250 + 1, "!!!"); break; } Teraz listbox. Z tego co pomiętam, rodzic jest zawiadamiany o podwójnym kliknięciu w listboxie poprzez komunikat LBN_DBLCLK. Musisz więc zmienić: case 209: // ListBox /* Tu pojawia się mój drugi problem Chcę, aby po podwójnym kliknięciu na element z listboxa zawartosc pola została skopiowana do pola hEdit1 */ { // intrukcja switch, która tu się znajdowała, jest zbędna :P if (HIWORD(wParam)==LBN_DBLCLK) { index = SendMessage (hList, LB_GETCURSEL, 0, 0 ) ; // to LB_GETTEXT było wysyłane do hwnd... Rozumiem, że to tylko niedopatrzenie :P SendMessage (hList, LB_GETTEXT, index, (LPARAM) wyraz ) ; SetDlgItemText(hwnd, 207, wyraz); return 0; } break; } A tak na marginesie, to nie rozumiem, dlaczego wszystkie zmienne są globalne i zadeklarowane na początku programu... Nawyki z Pascala(Delphi)? Niewiem jak sądzą inni, ale dla mnie kod staje się przez to mniej czytelny. Pozdrawiam. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Ray Napisano Listopad 9, 2019 Autor Zgłoś Udostępnij Napisano Listopad 9, 2019 Thx. ListBox działa bez żadnych problemów za co wielkie dzięki. Jednak pojawia się problem z case 201: { /* Tu pojawia się mój pierwszy problem. Chcę, aby po kliknięciu w button Szukaj, w staticu hPoletxt[1] pojawił się tekst "!!!", jednak się nie pojawia :( */ // id hPoletext[1] to 251 SetDlgItemText(hwnd, 250 + 1, "!!!"); break; } Program nie zmienia tekstu w staticu. Próbowałem dodać: UpdateWindow(hPoletxt[1]); ale nic nie pomogło. Posłuchałem rady i użyłem WM_SETTEXT: case 201: { char *lpsz="test"; lParam = (LPARAM)(LPCTSTR)lpsz; SendMessage(hPoletxt[1], WM_SETTEXT, 0,lParam); break; } Jednak to również nie dało żadnego skutku :( Nie wiem co dalej z tym robić :( Może źle zadeklarowałem Static ?? Używam kompilatora: C++BuilderX Mam WinXP Home Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Trace Napisano Listopad 9, 2019 Zgłoś Udostępnij Napisano Listopad 9, 2019 Błąd popełniasz przy tworzeniu statica. Na HMENU rzutujesz jedynie wartość 250, a dopiero potem dodajesz do tego i. To powoduje, że id kontrolki jest inny, niż zamierzony. Aby to naprawić, wystarczy wstawić (250+i) w nawiasy :). Wtedy wartość całego wyrażenia będzie rzutowana na HMENU i w konsekwencji id kontrolki będzie miał właściwą wartość. hPoletxt[i] = CreateWindow("static", "tekst", WS_CHILD | WS_VISIBLE, 11, 136+(i*18), 388, 18, hwnd, (HMENU)(250+i), hInst, NULL); Po tej zmianie SetDlgItemText będzie działał jak należy. WM_SETTEXT nie działał ci, ponieważ zapomniałeś tablicę hPoletxt zadeklarować jako static (była usuwana zaraz po zakończeniu WM_CREATE), więc komunikat wysyłałeś do jakiegoś całkowicie dowolnego obszaru pamięci :P To by było na tyle. Pozdrawiam. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Ray Napisano Listopad 9, 2019 Autor Zgłoś Udostępnij Napisano Listopad 9, 2019 Dzięki. W KOŃCU działa mi static :) Kolejny krok na przód :) Jeszcze raz dzięki. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.