Eingabefeld 3 Fragen
-
verschiedene Fragen bzgl. Eingabefelder:
1. Mein Eingabefeld soll gesperrt sein d.h. das keine angaben eingetragen werden können. Nur eingelesene.
Wenn ich aber sperren bei den Eigenschaften auswähle ist es grau hinterlegt. soll es aber nicht es soll weiss sein.
Wie geht das??2. Und dann möchte ich, wie bei versch. Windowsanwendungen auch, dass wenn auf einen Zeile in diesem Feld geklickt wird nur diese blau dargestellt wird. und diese dann bearbeitet werden kann (wie löschen, etc)
Wie geht das?3. Die Daten in das Feld werden eingeles aus einer Datei. In dieser Datei stehen die Daten auch Zeilenweise drin. Aber In dem Eingabefeld ist mittendrin ein Zeilenumbruch, so das die DAten in zwei Zeilen stehen ob wohl sie in einer stehen sollen. Und das ohne diesen horiontalen Bildlauf.
Wäre nett wenn ihr mir helfen könntet.
Danke
-
Zu 1: Deaktiviere es (oder mach nur Schreibschutz) und male es dann mit OnCtlColor so wie du es willst.
Zu 3 und 2: Ich glaube du wärst mit einem CListCtrl besser bedient als mit einem CEdit.
Zu 2: Schau bitte bei Codeproject.com, es gibt dort für fast alles eine Lösung zum runterladen und nachbauen oder gleich verwenden.
-
Jetzt halt mich blöd aber wie funktionier das mit OnCtlColor.
Aus dier Msdn werd ich nicht schlau
-
Wenn du aus der MSDN nicht schlau wirst, such im Forum - ich habs auch von hier.
-
Ich würde es erst gar nicht versuchen mit der OnCtlColor, da du ohnehin es nicht schaffen wirst bei einem Klick auf eine Zeile im EditFeld die Zeile blau zu markieren. Deswegen arbeite gleich mit einer ListBox oder einem ListCtrl.
Da kann man denn auch kinderleicht Zeilen löschen und sie bearbeiten...Gruß
:: NoName ::
-
Hi
jetzt habe ich das Eingabefeld durch einen Listbox ersetzt.
Kann ich mit der jetzt genauso arbeiten wie zuvor mit dem Eingabefeld.
weil per Membervariable passiert nix.
-
So kannst du Zeilen in die ListBox einfügen :
CListBox* pBox = (CListBox*) GetDlgItem(ID_DEINER_LISTBOX); pBox->InsertString(-1, "Hier der Text ...!"); oder pBox->AddString("Hier der Text");
Gruß
:: NoName ::
-
Ja super das klappt
danke
-
Mal ne ganz doofe frage
wie bekomme ich diesen Scrollbalken am boden entlang.
Habe eben in den Eigenschaften der Listbox alles ausprobiert, aber wahrscheinlich die falsche kombinations..
-
Noch mal was:
CString in; CStdioFile pfade; CString pfad= "..\\Listen\\docpfade.txt"; if (pfade.Open(pfad,CFile::modeReadWrite)) { UpdateData(true); pfade.WriteString(m_strlisten); }
Fehler
'WriteString' : Konvertierung des Parameters 1 von 'class CListBox' in 'const char *' nicht moeglich
Hat jemand einen tipp wie ich den Inhalt der ListBox am ende speichere in ein txt?
DAnke
-
Du kannst nicht einfach die Variable der ListBox in die TXT schreiben. Du musst die ListBox erst durchlaufen und dann jede einzelne Zeile speichern :
CString in; CStdioFile pfade; CString pfad= "..\\Listen\\docpfade.txt"; if (pfade.Open(pfad,CFile::modeReadWrite)) { for(int i = 0; i < m_strlisten.GetCount(); i++) { CString strZeilen; m_strlisten.GetText(i, strZeilen); UpdateData(true); pfade.WriteString(strZeilen); } }
Das müsste so klappen...
Gruß
:: NoName ::
-
Ich hatte es vorhin so gemacht:
CString in; CStdioFile pfade; CString pfad= "..\\Listen\\docpfade.txt"; if (pfade.Open(pfad,CFile::modeWrite)) { UpdateData(true); pfade.WriteString(m_strliststring); }
Aber es wird nichts abgespeichert, auch bei deiner version passiert im file nichts.
-
m_strliststring
ist eine membervariable zur listbox vom typ cstring.
m_strlisten
ist eine membervariable control von Clist
-
Du musst nur eine Member-Vaiable von der ListBox erstellen, du kannst es auch so machen :
CListBox* pBox = (CListBox*) GetDlgItem(ID_DEINER_LISTBOX); CString in; CStdioFile pfade; CString pfad= "..\\Listen\\docpfade.txt"; if (pfade.Open(pfad,CFile::modeReadWrite)) { for(int i = 0; i < pBox->GetCount(); i++) { CString strZeilen; pBox->GetText(i, strZeilen); UpdateData(true); pfade.WriteString(strZeilen); } }
Gruß
:: NoName ::
-
Jetzt hab ich 3. Versionen und abspeichern tut er immer noch nicht....
-
Das habe ich völlig übersehen, man muss erstmal die Datei 'erstellen' bevor man in sie reinschreibt :
... if (pfade.Open(pfad, CFile::modeCreate | CFile::modeWrite)) ...
Den restlichen Code musst du noch hinzufügen...
Gruß
:: NoName ::
-
muss ich sie den neu erstellen wenn ich sie doch schon besitze??
das würde doch heissen dass ich sie jedesmal neu erstellen würde.
ach das ging auch nicht, hatte ich schon mit modeCreate ausprobiert.
Hat es einen fehler ausgespuckt, irgendwas würde mit dem file nicht stimmen.
-
Wenn du sie schon erstellt hast, verwende nur CFile::modeWrite :
if (pfade.Open(pfad, CFile::modeWrite))
Gruß
:: NoName ::
-
Es ist immer hilfreich in der MSDN zu schauen wenn man Klassenmember und Parameter wissen will.
CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite
File wird geöffnet als Lesen/schreiben.
Wenn es noch nicht existiert wird es angelegt.
WEenn es existiert wird der inhalt nicht geleert.
-
Hallo,
das ist nett für die aufklärung.
aber ich hatte bereits in der MSDN geschaut und dabei bereit alle drei Versionen, auch die mit CFile::modeNoTruncate, ausprobiert.
Und keine geht.Auch jetzt nicht. Muss ich vielleicht noch irgendetwas beachten???
Noch mal kurz:
Beim drücken auf einem Button soll der Inhalt der Listbox in ein Textfile übertragen werden.