Syntax Highlighting



  • Hallo,

    ich hab einen kleinen Texteditor (MDI) teils
    selbst, teils aus vorhandenen Sourcen gebastelt.
    Jetzt wollte ich Syntax Highlighting einbauen,
    dummerweise weiss ich nur nicht wo ich
    ansetzten soll....

    Jemand eine Idee?
    Ich wollte nicht den ganzen Sourcecode
    posten, ich hab mal die Teile rausgesucht
    an denen wohl eingegriffen werden muss:

    BOOL LoadFile(HWND hEdit, LPSTR pszFileName)
    {
       HANDLE hFile;
       BOOL bSuccess = FALSE;
    
       hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
          OPEN_EXISTING, NULL, NULL);
       if(hFile != INVALID_HANDLE_VALUE)
       {
          DWORD dwFileSize;
          dwFileSize = GetFileSize(hFile, NULL);
          if(dwFileSize != 0xFFFFFFFF)
          {
             LPSTR pszFileText;
             pszFileText = LPSTR(GlobalAlloc(GPTR, dwFileSize + 1));
             if(pszFileText != NULL)
             {
                DWORD dwRead;
                if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
                {
                   pszFileText[dwFileSize] = 0; // Null terminator
                   if(SetWindowText(hEdit, pszFileText))
                      bSuccess = TRUE; // It worked!
                }
                GlobalFree(pszFileText);
             }
          }
          CloseHandle(hFile);
       }
       return bSuccess;
    }
    

    Der File Öffnen Dialog:

    BOOL GetFileName(HWND hwnd, LPSTR pszFileName, BOOL bSave)
    {
       OPENFILENAME ofn;
    
       ZeroMemory(&ofn, sizeof(ofn));
       pszFileName[0] = 0;
    
       ofn.lStructSize = sizeof(ofn);
       ofn.hwndOwner = hwnd;
       ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0\0";
       ofn.lpstrFile = pszFileName;
       ofn.nMaxFile = MAX_PATH;
       ofn.lpstrDefExt = "txt";
    
       if(bSave)
       {
          ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
          if(!GetSaveFileName(&ofn))
             return FALSE;
       }
       else
       {
          ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
          if(!GetOpenFileName(&ofn))
             return FALSE;
       }
       return TRUE;
    }
    

    Wenn man auf den Öffnen Button drückt:

    case CM_FILE_OPEN:
    {
       MDICREATESTRUCT mcs;
       HWND hChild;
       char szFileName[MAX_PATH];
    
       if(!GetFileName(hwnd, szFileName, FALSE))
          break;
    
       mcs.szTitle = szFileName;
       mcs.szClass = g_szChild;
       mcs.hOwner  = g_hInst;
       mcs.x = mcs.cx = CW_USEDEFAULT;
       mcs.y = mcs.cy = CW_USEDEFAULT;
       mcs.style = MDIS_ALLCHILDSTYLES;
    
       hChild = (HWND)SendMessage(g_hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);
    
       if(!hChild)
       {
          MessageBox(hwnd, "MDI Child creation failed.", "Oh Oh...",
             MB_ICONEXCLAMATION | MB_OK);
       }
    }
    break;
    

    und was das MDI-Window macht

    LRESULT CALLBACK MDIChildWndProc(HWND hwnd, UINT Message, WPARAM wParam,
       LPARAM lParam)
    {
       switch(Message)
       {
          case WM_CREATE:
          {
             char szFileName[MAX_PATH];
             HWND hEdit;
    
             hEdit = CreateWindowEx(    WS_EX_CLIENTEDGE,   
                                        "EDIT", 
                                        "",
                                        WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN,
                                        CW_USEDEFAULT, 
                                        CW_USEDEFAULT, 
                                        CW_USEDEFAULT, 
                                        CW_USEDEFAULT,
                                        hwnd, 
                                        (HMENU)IDC_CHILD_EDIT, 
                                        g_hInst, 
                                        NULL);
    
             SendMessage(hEdit, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));
    
             GetWindowText(hwnd, szFileName, MAX_PATH);
             if(*szFileName != '[')
             {
                if(!LoadFile(hEdit, szFileName))
                {
                   MessageBox(hwnd, "Couldn't Load File.", "Error.",
                      MB_OK | MB_ICONEXCLAMATION);
                   return -1; //cancel window creation
                }
             }
          }
          break;
    


  • Das schaffst du eh nicht, du bist viel zu dumm.
    @Mods: Bitte schließen!



  • Das stimmt wirklich. Du bist eindeutig zu dumm. Warum postest du irgendwelchen Code wo du Fenster erstellst, den Dateinamen abfragst etc., wenn du Syntax-Highlighting haben willst? 😕 😕



  • Original erstellt von <Headhunter>:
    Das stimmt wirklich. Du bist eindeutig zu dumm. Warum postest du irgendwelchen Code wo du Fenster erstellst, den Dateinamen abfragst etc., wenn du Syntax-Highlighting haben willst? 😕 😕

    Netter Ton hier im Forum...

    Wie wäre es mit einem konstruktiven Vorschlag, ein Beispiel
    oder ein Hinweis welchen Teil des Programms ich posten soll 😮



  • OK sorry, du hast recht
    Du musst alle WM_TIMER-Nachrichten abfangen und dann alle Texte nach Syntaxes durchscannen, die in ne INI schreiben, nachher wieder rausladen im text suchen und dann kopieren in word einfügen farbig machen zurückkopieren in quellcode neu kompilieren und du hast es!



  • Poste am besten den Code, wo du versuchst den Text zu syntaxhighlighten.



  • @robby

    hör nicht auf die trolle

    seitdem das forum so groß ist.. und natürlich immer, wenn schulferien sind und die gören sich langweilen, brauchen sie sowas..

    ich wäre ja für basketball.. aber sie wollen unbedingt ihre klugheit zum besten geben..

    warte einfach auf eine vernünftige antwort 😉



  • ES SIND KEINE SCHULFERIEN!! VERDAMMT NOCHMAL! 😡



  • 😮 ein troll mit witz 😃

    Edit-Felder kann man nicht einfärben, dafür brauchst du Richtext-Felder.



  • womit er sich als göre geoutet hat

    na denn mal schön hausaufgaben machen ...



  • Aber bei uns ist schneefrei 🙂



  • Original erstellt von C Newbie:
    **😮 ein troll mit witz 😃

    Edit-Felder kann man nicht einfärben, dafür brauchst du Richtext-Felder.**

    Oh da hab ich ja eine Lawine losgetreten 😮

    Erstmal Danke an Elise 😃

    @C Newbie:
    Hast Du evtl. ein Stück Sourcecode oder irgendwas
    oder einen Hinweis nachdem ich dann suchen kann???



  • ich bin eine göre

    na und? außerdem bin ich wie gesagt STOCKSCHWUL

    und bin schon längst aus der Schule raus.

    :p



  • Über die Forensuche hab ich das hier gefunden! ist zwar mfc, aber vielleicht hilft es dir ja







  • Original erstellt von <Headhunter (hilfreich)>:
    http://www.google.de/search?hl=de&lr=&ie=UTF-8&oe=UTF-8&q=richedit+%2Bsyntax+highlighting&spell=1

    *wow* mal was hilfreiches von Dir 😮 😮 😮

    Danke, das hilft mir schon weiter genau wie der Hinweis
    von C Newbie!!!

    Danke
    (Es geht doch wenn man sich anstrengt nett und hilfsbereit zu sein)



  • (Es geht doch wenn man sich anstrengt nett und hilfsbereit zu sein)

    Danke, das hat mich einiges an Überwindung gekostet. 🙂

    Aber eigentlich war es nicht wirklich hilfreich,

    du hättest es ja einfach selbst suchen können. Wenn du das nicht alleine

    schafst bist du wirklich zu dumm. 😃



  • Original erstellt von <Headhunter>:

    schafst

    hübsches wörtlein



  • ITIHBT 🙄



  • ITIHBT (I think I have been trolled)


Anmelden zum Antworten