PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabellen im Dialogfeld



BlondyBoy
12.08.2004, 14:22:16
Hi

Für meine kleine Anwendung brauch ich noch eine Tablle und zwar kann die in ihrer Spaltenanzahl statisch sein muss aber in der Zeilenanzahl variabel sein, da Daten hinzukommen oder gelöscht werden.

In VC++ 6.0 gibt es da ein schönens ActiveX Steuerelement, aber für eMVC++ 4.0 habe ich da noch nichts gefunden. Habe auch schon mal den Tipp bekommen das von 6.0 zu nehmen, aber das funkt nicht.

Hat einer eine Idee (vielleicht hat er ja auch schon so etwas programmiert), wie man in eMbedded Visual C++ 4.0 eine Tabelle in einem Dialogfeld platzieren kann.

Sortierfunktion wäre auch schön aber erstmal geht die Tabelle vor!

MfG
BlondyBoy
:-)

Mort
12.08.2004, 15:01:47
Am einfachsten: Eine Liste (CListCtrl) (im Dialog Editor: "List Control", Symbol ähnelt einem Fester-Icon) im "Report"-Modus. Allerdings wird dann immer nur die erste Spalte markiert. So wie im Explorer halt...

BlondyBoy
13.08.2004, 11:47:46
Am einfachsten: Eine Liste (CListCtrl) (im Dialog Editor: "List Control", Symbol ähnelt einem Fester-Icon) im "Report"-Modus. Allerdings wird dann immer nur die erste Spalte markiert. So wie im Explorer halt...

So jetzt nochmal zu der Tabelle die ich brauche! Du kennst ja jetzt grob mein Problem (oder anders meine Aufgabe).

Die Daten die ich verarbeiten soll kommen von einem Gerät. In dem Gerät wird protokolliert, was das für ein Gerät ist, wann es benutzt wurde usw...

Wobei z.B. die erste Spalte Maschinentyp, die zweite Maschinennummer usw... (insgesamt erstmal 4 Spalten) als Überschrift enthalten soll. Die Anzahl der Zeilen soll total variabel sein.

Ich schaffe es zwar ein Listenfeld in meinem Dialogfeldeditor zu zeichen (ist ja ziemlich einfach, Mausklick darauf und im Dialogfeld aufziehen ;) ), aber ich weiß noch nicht so richtig wie ich das Listenfeld formatiere und wenn ich es dann zur Tabelle formatiert habe, wie ich die einzelne Tabellenfelder auswählen kann????

Vielleicht kannst du mich ja noch ein wenig unterstützen.
Aber ich bin auch nicht abgeneigt von anderen Unterstützung zu erhalten.

Oder hat da vielleicht jemand einen sehr guten Link oder ein gutes Buch welches die Listenfelder mal näher unter die Lupe nimmt? Wenns geht auf deutsch, mit Englisch tu ich manchmal ziemlich schwer.

MfG
BlondyBoy
:-)

DeJe
13.08.2004, 13:12:21
Auf deutsch wirst Du wohl kaum etwas finden.
Aber die ListCtrl ist schon richtig. Du wirst wohl nicht drumrumkommen Dich durch die (englische) Hilfe zu kämpfen. Suche nach "CListBox" für MFC oder "ListView*" für Win32.

Kleiner Schnipsel wie ein List Control in Win32 initialisiert werden kann.


LVCOLUMN lvCol;
LVITEM lvItem;
HWND hwndItem = GetDlgItem(hDlg, IDC_CATEGORIES);

GetWindowRect( hwndItem, &rcTemp );

ListView_SetExtendedListViewStyle(hwndItem, LVS_EX_GRADIENT|LVS_EX_CHECKBOXES|LVS_SHOWSELALWAY S);

lvCol.mask = LVCF_WIDTH;
lvCol.cx = rcTemp.right - rcTemp.left - 2*s_nBorderX - GetSystemMetrics(SM_CXVSCROLL);
ListView_InsertColumn(hwndItem, 0, &lvCol);

memset( &lvItem, 0, sizeof(lvItem));
lvItem.mask = LVIF_TEXT|LVIF_PARAM;
lvItem.iItem = 0;

if( s_CatIcon ) {
pszText = s_CatIcon->GetFirstCategory();
while( pszText )
{
lvItem.pszText = pszText;
ListView_InsertItem(hwndItem, &lvItem);
ListView_SetCheckState(hwndItem, lvItem.iItem, s_CatIcon->GetShow(lvItem.iItem) );
lvItem.iItem++;
pszText = s_CatIcon->GetNextCategory();
}
}

ListView_SetSelectionMark(hwndItem, 0);
ListView_SetItemState(hwndItem, 0, LVIS_FOCUSED|LVIS_SELECTED, LVIS_FOCUSED|LVIS_SELECTED);

Mort
13.08.2004, 14:04:29
Hm, wenn du einzelne Tabellenfelder markieren willst, ist das ListCtrl auch nur als "Basis" brauchbar. Denn das kann nur Zeilen markieren. Wie gesagt: Es sieht (im Report-Format) so aus wie die "Detail"-Ansicht im Explorer...
Für eine "richtige" Tabelle müßtest du mal schau'n, ob es bei CodeGuru u.ä. vielleicht schon was gibt. Wenn nicht, hast du richtig Arbeit vor dir: Methoden zur Spaltenauswahl, überlagertes OnPaint, ...

BlondyBoy
19.08.2004, 08:10:46
Hi

Habe es bisher nur geschafft eine Spalte der ListBox (Listenfeld) anzusprechen und zwar mit AddString().

Wie kann ich die anderen Spalten ansprechen? Und kann ich die Spalten auch irgendwie sichtbar voneinander trennen (Strich dazwischen oder so was)?

MfG
BlondyBoy
:-)

Mort
19.08.2004, 08:22:38
Du hast das falsche Control erwischt. Du musst das ListCtrl nehmen. Im Dialog-Editor ist das so ein Fenster-ähnliches Symbol, ziemlich am Ende der Element-Toolbar.

BlondyBoy
19.08.2004, 08:26:21
Kann ich das dann genauso ansprechen? Ich probiers mal!

MfG
BlondyBoy
:-)