kaldemor Geschrieben 19. Februar 2008 Geschrieben 19. Februar 2008 Viele kennen bestimmt das Projekt CGridCtrlDemo von Chris Maunder. Es gibt auch ein Grid mit CRichEditCtrl Unterstützung (CInPlaceRichEdit, ES_WANTRETURN | ES_MULTILINE, usw.). Leider funktioniert es nicht so richtig. Erstes Problem: Wenn ich mehre Textzeilen in einer Zelle erfasse und diese dann verlasse so wird immer nur die erste Zeile angezeigt. Ich hab versucht die Funkt. Drawtext() anzupassen (DT_CALCRECT |DT_WORDBREAK). Ohne sichtbaren Veränderungen. Zweites Problem: In der Zelle markiere ich eine(n) Text bzw. Buchstabe und verändere die Schriftgröße. Wird auch richtig ausgeführt, aber die Zellenhöhe (row) wird nicht bzw. falsch angepaßt. Ist ja auch logisch da bei zeichnen und rowheight ermitteln Richedittext verwendet wird. Mein Problem ist, wann und welcher Stelle ich den Richedittext in ein String umwandeln soll!? Hat jemand eine Idee? mfg, kaldemor Zitieren
Klotzkopp Geschrieben 19. Februar 2008 Geschrieben 19. Februar 2008 Viele kennen bestimmt das Projekt CGridCtrlDemo von Chris Maunder. Das möchte ich bezweifeln. Alles, was Google dazu ausspuckt, stammt offenbar von dir selbst. Hast du vielleicht einen Link? Zitieren
kaldemor Geschrieben 20. Februar 2008 Autor Geschrieben 20. Februar 2008 Genau so einen Grid suche ich bzw. versuche es zu programmieren. TAdvStringGrid example 30 oder im diesem Projekt http://www.codeproject.com/KB/miscctrl/gridctrl.aspx hab ich die Projektklassen von http://www.codeproject.com/KB/miscctrl/mdricheditgrid.aspx eingefügt. DT_SINGLELINE durch DT_WORDBREAK ersetzt. Bei Create von Richeditfeld setze ich die Parameter ES_MULTILINE und ES_WANTRETURN um multiline usw. zu unterstützen CInPlaceRichEdit::CInPlaceRichEdit() { DWORD dwEditStyle = WS_BORDER|WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL|ES_MULTILINE| ES_WANTRETURN|dwStyle; if (!Create(dwEditStyle, rect, pParent, nID)) return; } Meiner meiner Meinung liegt das Problem in der Funktion BOOL CGridCellRich::Draw() Danke für die Antworten! mfg, kaldemor Zitieren
Klotzkopp Geschrieben 20. Februar 2008 Geschrieben 20. Februar 2008 Das Problem ist nicht das In-Place-Steuerelement, sondern das ganz normale Rich Edit Control, das zum Rendern der Texte benutzt wird. In CRichEditGridDlg::OnInitDialog muss man bei m_RichEditTemp.Create zusätzlich ES_MULTILINE angeben. Zusätzlich muss man in CInPlaceRichEdit::OnChar die Sonderbehandlung der Entertaste entfernen und im In-Place-Steuerlement ES_MULTILINE und ES_WANTRETURN hinzufügen. Zitieren
kaldemor Geschrieben 21. Februar 2008 Autor Geschrieben 21. Februar 2008 Entschulding, hab die Frage etwas falsch gestellt. Die Probleme mit Create(..|ES_MULTILINE|ES_WANTRETURN) sowie mit der Eingabe im Richeditfeld (OnChar) habe gleich am Anfang gelöst. Die eigentlichen Probleme liegen mit Darstellung von mehrzeiligen Text, wo auch Returns (\r\n) vorhanden sind, Fontgröße ändern. Es immer nur die erste Zeile sichtbar. Danke, kaldemor Zitieren
Klotzkopp Geschrieben 22. Februar 2008 Geschrieben 22. Februar 2008 Es immer nur die erste Zeile sichtbar.Wie du das beheben kannst, habe ich auch schon geschrieben. Zitieren
kaldemor Geschrieben 22. Februar 2008 Autor Geschrieben 22. Februar 2008 Jetzt weiß ich es warum ich es nicht funktiniert hat. Im Projekt gridctrl_demo226 wird ein Benutzersteuerelement IDC_GRID verwendet. In der Datei GridCtrlDemo.rc hab ich die Style wie folgt CONTROL "Custom1",IDC_GRID,"MFCGridCtrl",WS_TABSTOP |ES_MULTILINE|ES_WANTRETURN,7,7,477,297 geändert. Projekt bereinigt und neu erstellt. Das hat leider keine Änderungen bei Darstellung von mehrzeiligen Text bewirkt. Die Lösung: Benutzersteuerelement IDC_GRID löschen und Element, wie Projekt RichEditGrid erstellen: m_RichEditTemp.Create (WS_CHILD|ES_MULTILINE|ES_WANTRETURN, CRect(0,0,0,0),this,IDC_RICHEDIT_TEMP); Vielen Dank für Hilfe an Klotzkopp! Mfg, kaldemor Zitieren
kaldemor Geschrieben 22. Februar 2008 Autor Geschrieben 22. Februar 2008 Ich bin auch so blind! Es ist ja nicht IDC_GRID Element gemeint sondern Richeditelement! Problem in beiden Projekten behoben! m_RichEditTemp.Create (WS_CHILD|ES_MULTILINE|ES_WANTRETURN, CRect(0,0,0,0),this,IDC_RICHEDIT_TEMP); Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.