Textverarbeitung unter Winapi
-
Hallo,
Ich hätte eine Frage zur Winapi Programmierung.
ich Prgrammiere mit MV 2010 Express unf für MS Systeme.
Folgendes möchte ich machen.
Ich habe eine TXT Datei die wie Folgt ausieht:
09.09.10 gdghgdMistfhsgh Äpfel dadMistfsfg 3.55 asfsjaMistfgh
09.09.10 g<sfhgMistfhfhf Birnen asdMistfsfg 1.78 asfsjaMistfgh
09.09.10 gdähgdMistfoogh Pflaumen dudMistfiufg 0.79 aasdsjaMistfhbgfIch möchte diese TXT in ein Fenster Laden und dabei gleich Etwas Sortieren und bearbeiten.
Also soll Z.b sowas alles Raus gelöscht werden gdghgdMistfhsgh und der Rest soll dann mit unterschiedlichen Farben Angezeigt werden. Etwa So:
09.09.10 Äpfel(in rot) 3.55
09.09.10 Birnen (in Gelb) 1,78
09.09.10 Birnen (in Blau) 0,79Das bekomme ich bis jetzt hin:
Ich kann den gesamten Text rein laden und alles augeben.
Hier der Code(zum Teil von www.pronix.de):LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { //...zeug case WM_COMMAND: switch(LOWORD(wParam)) { case ID_FILE_EXIT: PostMessage(hwnd, WM_CLOSE, 0, 0); break; case ID_FILE_OPEN: OpenFileBox(hwnd); break; case ID_VERSION: MessageBox(NULL, "Version 1.0","Version",MB_OK ); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } void OpenFileBox(HWND hwnd) { OPENFILENAME ofn; char szFileName[MAX_PATH] = ""; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hwnd; ofn.lpstrFilter = "Text Datei (*.txt)\0*.txt\0" "C Datei (*.c)\0*.c\0" "Alle Dateien (*.*)\0*.*\0"; ofn.lpstrFile = szFileName; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; ofn.lpstrDefExt = "txt"; if(GetOpenFileName(&ofn)) { HWND hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT); if(LoadText(hEdit, szFileName)) { SendDlgItemMessage(hwnd, IDC_MAIN_STATUS, SB_SETTEXT, 0, (LPARAM)"Geöffnet..."); SendDlgItemMessage(hwnd, IDC_MAIN_STATUS, SB_SETTEXT, 1, (LPARAM)szFileName); } } } BOOL LoadText(HWND hEdit, LPCTSTR pszFileName) { HANDLE hFile; BOOL bSuccess = FALSE; hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if(hFile != INVALID_HANDLE_VALUE) { DWORD dwFileSize; dwFileSize = GetFileSize(hFile, NULL); if(dwFileSize != 0xFFFFFFFF) { LPSTR pszFileText; pszFileText =(char *) GlobalAlloc(GPTR, dwFileSize + 1); if(pszFileText != NULL) { DWORD dwRead; if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL) ) { pszFileText[dwFileSize] = '\0'; bSuccess = Textausgabe(pszFileText, hEdit); } GlobalFree(pszFileText); } } CloseHandle(hFile); } return bSuccess; } BOOL Textausgabe(LPSTR text, HWND hwd) { // ihr würde ich jetzt die Textbearbeitung machen SetWindowText(hwd, text); rueckgabe = TRUE; return rueckgabe; }Nur weiß ich nicht wie ich einzelne Text stellen herausfilter kann.
Weiß da jemand was?
Ich hätte mir gedacht das ich den Text in einzelne Strings einteile und dann verschieden Überprüfungen machen und diesen dann einzeln ausgebe.Da ich noch neu in der Winapi Programmierung bin würde ich mich über Beispiel Codes freuen.
Mfg
Turis
-
Also Text zeilenweise mit
fgetseinlesen
Zeile dann mitsscanf(buffer,"%s %*s %s %*s %s,datum,obst,preis...parsen
if (strcmp(obst,"Birne")==0) Color=RGB(weiss,jetzt,nich); //Blauund dann in einem Richedit ausgeben (hab diese funktion mal wo gefunden
void AddText(HWND hwnd, char *szTextIn, COLORREF crNewColor) { char *Text = (char *)malloc(lstrlen(szTextIn) + 5); CHARFORMAT cf; int iTotalTextLength = GetWindowTextLength(hwnd); int iStartPos = iTotalTextLength; int iEndPos; char txt[50]; int line,zeichen; int ret; strcpy(Text, szTextIn); strcat(Text, "\r\n"); SendMessage(hwnd, EM_SETSEL, (WPARAM)(int)iTotalTextLength, (LPARAM)(int)iTotalTextLength); SendMessage(hwnd, EM_REPLACESEL, (WPARAM)(BOOL)FALSE, (LPARAM)(LPCSTR)Text); free(Text); cf.cbSize = sizeof(CHARFORMAT); cf.dwMask = CFM_COLOR | CFM_UNDERLINE | CFM_BOLD; cf.dwEffects = (unsigned long)~(CFE_AUTOCOLOR | CFE_UNDERLINE | CFE_BOLD); cf.crTextColor = crNewColor; iEndPos = GetWindowTextLength(hwnd); SendMessage(hwnd, EM_SETSEL, (WPARAM)(int)iStartPos, (LPARAM)(int)iEndPos); ret=SendMessage(hwnd, EM_SETCHARFORMAT, (WPARAM)(UINT)SCF_SELECTION, (LPARAM)&cf); SendMessage(hwnd, EM_HIDESELECTION, (WPARAM)(BOOL)TRUE, (LPARAM)(BOOL)FALSE); SendMessage(hwnd, EM_LINESCROLL, (WPARAM)(int)0, (LPARAM)(int)1); line=SendMessage(hwnd,EM_GETLINECOUNT,0,0); /*if (line>6) //auf 6 Zeilen einschränken { zeichen=SendMessage(hwnd,EM_LINELENGTH,0,0); SendMessage(hwnd, EM_SETSEL, (WPARAM)(int)0, (LPARAM)(int)zeichen+2); SendMessage(hwnd, EM_REPLACESEL, (WPARAM)(BOOL)FALSE, (LPARAM)(LPCSTR)""); */ } }
-
Ich danke dir, ich werd mich ran setzen und ein wenig was ausprobieren.
-Turis
-
Hallo,
ich hätte da noch eine Frage.
Mein Text sieht jetzt nicht so aus: "Birne Datum Preis"
Sonders so: "Birne,Datum,Preis" wie kann ich beim Parsen jetzt am "," trennen?-Turis