Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Zablokowanie możliwości wpisania określonych znaków w kontrolce EDIT.

Ostatnio zmodyfikowano 2013-12-24 19:13
Autor Wiadomość
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 :)
P-99991
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.

tylko jak to zrobić ?
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.
P-99994
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:
C/C++
case WM_COMMAND:
if( wParam == 100 )
{
    DWORD dlugosc2 = GetWindowTextLength( hText2 );
    LPSTR Bufor2 =( LPSTR ) GlobalAlloc( GPTR, dlugosc2 + 1 );
    GetWindowText( hText2, Bufor2, dlugosc2 + 1 ); //pobranie ścieżki i nazwy pliku
    //
    DWORD dlugosc = GetWindowTextLength( hText );
    LPSTR Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 );
    GetWindowText( hText, Bufor, dlugosc + 1 ); //pobranie tekstu
    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 );
}
P-99996
xevuel
» 2013-12-23 21:18:20
Przeiteruj po stringu? Co do
\
 lub
/
 uznaj po prostu że oznaczają one kolejny folder w ścieżce.
P-99998
Zdziwiony
Temat założony przez niniejszego użytkownika
» 2013-12-23 21:24:53
Czyli coś takiego ?

C/C++
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() ); //przeliterowane, ale nadal nie wiem co dalej... ;/
    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 )
P-99999
xevuel
» 2013-12-23 21:29:02
Przeiteruj ≠ Przeliteruj..
P-100000
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...
P-100002
RazzorFlame
» 2013-12-23 21:49:17
Chodziło mu o osobne sprawdzenie każdego ze znaków i sprawdzenie ich poprawności.
P-100004
« 1 » 2 3
  Strona 1 z 3 Następna strona