Zdziwiony Temat założony przez niniejszego użytkownika |
[WinAPI] Zablokowanie możliwości wpisania określonych znaków w kontrolce EDIT. » 2013-12-23 20:49:06 Witam. Mam do Was pytanie: Jako, że robię sobie imitacje notatnika, stworzyłem sobie dwie kontrolki EDIT, z jednej odczytuję nazwę pliku, a z drugiej jego zawartość.
No i mam mały problem co do pierwszej kontrolki... właśnie zauważyłem, że jeśli wpiszę jako nazwę pliku np. "teścik :) ) i wybiorę Plik->zapisz to plik owszem zapisze się, ale będzie zajmował 0 bajtów, a próba usunięcia pliku się nie powiedzie, bo Windows wywali komunikat w stylu "Plik o nazwie 'teścik' nie istnieje" no i klops... ani usunąć takiego pliku się nie da, ani zmienić mu nazwy... żeby cokolwiek z nim zrobić trzeba użyć specjalistycznego programu. Powodem takiego stanu rzeczy jest oczywiście to, że Windows (nie mam pojęcia czemu) nie pozwala na wprowadzenie w nazwie pliku znaków typu: "/" ":" itd.
No cóż w związku z powyższym muszę jakoś uniemożliwić użytkownikowi wpisanie w kontrolce EDIT znaków "/" ":" itp. No właśnie... tylko jak to zrobić ?
Pozdrawiam i proszę o pomoc :) |
|
xevuel |
» 2013-12-23 21:05:00 Windows (nie mam pojęcia czemu) nie pozwala na wprowadzenie w nazwie pliku znaków typu: "/" ":" itd. |
/ używa się do zapisu ścieżki, : np. do ADS'ów. Inne znaki też mają jakieś logiczne wytłumaczenie. Gdy użytkownik zatwierdzi ścieżkę sprawdzaj czy jest prawidłowa i wyświetlaj komunikat. Możesz też subclassować kontrolkę i przechwytywać WM_CHAR lub podobne (w zależności co konkretnie będziesz potrzebował), ale to o wiele więcej zabawy. |
|
Zdziwiony Temat założony przez niniejszego użytkownika |
» 2013-12-23 21:14:48 / używa się do zapisu ścieżki, : np. do ADS'ów. Inne znaki też mają jakieś logiczne wytłumaczenie. |
hmm... To jest jakieś wyjaśnienie, ale czemu wtedy kiedy nazwę tak plik, to Windows stworzy plik o rozmiarze 0 bajtów, którego nie da się usunąć (bo ponoć nie istnieje, ale zaśmieca pulpit :P) Ale wracając do tematu... Mógłbyś mi jakoś dokładniej nakreślić jak sprawdzić czy string (w moim przypadku nazwałem go Bufor 2) nie zawiera niedozwolonych znaków ? Poza tym, to chyba nie będzie takie proste... bo w moim programie w kontrolce EDIT, podaje się nazwę pliku i ew. lokalizację, która MUSI zawierać znak "\" jednak w nazwie jego być nie może bo wszystko się pochrzani ;/ Dla zobrazowania fragment mojego kodu: case WM_COMMAND: if( wParam == 100 ) { DWORD dlugosc2 = GetWindowTextLength( hText2 ); LPSTR Bufor2 =( LPSTR ) GlobalAlloc( GPTR, dlugosc2 + 1 ); GetWindowText( hText2, Bufor2, dlugosc2 + 1 ); DWORD dlugosc = GetWindowTextLength( hText ); LPSTR Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 ); GetWindowText( hText, Bufor, dlugosc + 1 ); std::ofstream plik( Bufor2 ); plik.close(); plik.open( Bufor2 ); if( plik.good() == true ) { plik << Bufor; MessageBox( hwnd, "Plik tekstowy zapisano!", "INFO", MB_ICONINFORMATION | MB_OK ); } else MessageBox( hwnd, "Nie można zapisać pliku!", "Błąd!", MB_ICONERROR | MB_OK ); plik.close(); GlobalFree( Bufor ); } |
|
xevuel |
» 2013-12-23 21:18:20 Przeiteruj po stringu? Co do \ lub / uznaj po prostu że oznaczają one kolejny folder w ścieżce. |
|
Zdziwiony Temat założony przez niniejszego użytkownika |
» 2013-12-23 21:24:53 Czyli coś takiego ? case WM_COMMAND: if( wParam == 100 ) { DWORD dlugosc2 = GetWindowTextLength( hText2 ); LPSTR Bufor2 =( LPSTR ) GlobalAlloc( GPTR, dlugosc2 + 1 ); GetWindowText( hText2, Bufor2, dlugosc2 + 1 ); std::string nazwa; nazwa = Bufor2; DWORD dlugosc = GetWindowTextLength( hText ); LPSTR Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 ); GetWindowText( hText, Bufor, dlugosc + 1 ); std::ofstream plik( Bufor2 ); plik.close(); plik.open( nazwa.c_str() ); if( plik.good() == true ) { plik << Bufor; MessageBox( hwnd, "Plik tekstowy zapisano!", "INFO", MB_ICONINFORMATION | MB_OK ); } else MessageBox( hwnd, "Nie można zapisać pliku!", "Błąd!", MB_ICONERROR | MB_OK ); plik.close(); GlobalFree( Bufor ); } Sorki, że tak męczę, ale jeszcze nie nabrałem zbytniej wprawy w kodzeniu :P (w sumie uczę się niecałe 2 miesiące więc dość długo, ale widać wolno chłonę wiedzę :P ) |
|
xevuel |
» 2013-12-23 21:29:02 Przeiteruj ≠ Przeliteruj.. |
|
Zdziwiony Temat założony przez niniejszego użytkownika |
» 2013-12-23 21:32:40 Przeiteruj ≠ Przeliteruj.. |
Sorki... Źle przeczytałem :P Łudząco podobne słowa. A swoją drogą... co to jest Przeiterowanie ?! Nigdy o takim czymś nie słyszałem... |
|
RazzorFlame |
» 2013-12-23 21:49:17 Chodziło mu o osobne sprawdzenie każdego ze znaków i sprawdzenie ich poprawności. |
|
« 1 » 2 3 |