Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Text in Listbox ordentlich formatieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
17.10.2003, 19:04 Uhr
Philipp



Hi Leute,

hab mal wieder ein Problem...

Also, ich habe ja nen ChatServer und ChatClient geschrieben. Die ChatMessages werden immer in eine Listbox ausgegeben. Dabei gebe ich die halt in der Form "Zeit, Username: Message" aus! Was ich nun erreichen möche wäre, dass der "Messageteil" der ChatMessage immer den gleichen Abstand vom linken Rand der Listbox hat.

Das klappt aber absolut net richtig
Generell ist es halt so, dass die Position, bei der die eigentliche Message anfängt, nur von der Länge des Usernames abhängt, da die Zeit immer völlig gleich formatiert (xx:xx:xx) wird! ICh hab jetzt also versucht, den Username auf die immer gleiche Länge zu beschränken:

Versuch 1 : Die freien Zeichen des Usernames bis 12Chars mit tabs auffüllen. Klappt relativ gut, nur gibt es ein Problem. Anscheinend sind die tabs in so ner ListBox und in den normalen ofstream-logfiles unterschiedlich groß! Wenn das also in der ListBox klappt, dann klappt es in den ofstream logfiles eben nicht ganz! Gibt es da ne möglichkeit die tablänge zu verändern?

Versuch 2 : Mittels der Format Methode der CString Objekte die Strings formatieren, hat allerdings den NAchteil das die FormatMethode mit einzelnen Chars, und nicht mit Pixeln rechnet. D.h. für sie ist der Username "..." genauso lang wie "MMM", wobei das in Pixeln ja überhaupt net so ist, was sich dann nachher in der ListBox bemerkbar macht!

Hab auch mal im Internet geschaut, aber die sind da ja auch alle voll feige
ICQ beginnt nach jedem Datum+Username ne neue Zeile(oberfeige), und die meisten anderen Chats zeichnen den Username einfach farbig, und fangen dann fast direkt da hinter mit der eigentlichen Message an, aber das ist mir wieder zu unordentlich...

Kann mir irgendjemand helfen???

THX
PHILIPP

Dieser Post wurde am 17.10.2003 um 19:05 Uhr von Philipp editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.10.2003, 08:27 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, solang der unterschied zwischen den zeilen nicht all zu groß wird, kannst du tabulatoren benutzen ( \t )

Beim Editfeld muss man dann nur glaub ich extra noch aktivieren das er dir die auch umwandelt
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.10.2003, 15:01 Uhr
mmc20
puss in boots


hi,
ich glaub das hab ich schon mal irgendwo gelesen... aber ich finds nimmer. das einzige was ich gefunden hab ist:

CListCtrl::GetStringWidth
int GetStringWidth( LPCTSTR lpsz ) const;

und:

CListBox::SetTabStops
BOOL SetTabStops( const int& cxEachStop );
BOOL SetTabStops( int nTabStops, LPINT rgTabStops );

mit dem ersten könnte man in einer schleufe soviele zeichen an den string hängen bis er eine bestimmte länge (in pixeln) hat.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.10.2003, 15:10 Uhr
Philipp



Ok, das Problem wäre gelöst.

Hab einfach den ersten TabStop so weit nach hinten gesetzt, dass ich immer nur einen TabStop einfügen muss, und trotzdem immer alles richtig formatiert ist. THX nochmal

Hab aber wieder andere Probleme :

1) Ich will nen Notification Sound abspielen, so wie in ICQ etwa... Hab mir jetzt mal PlaySound(...) angeschaut, funzt auch, allerdings scheint die Funktion das System anzuhalten, bis der Sound zu Ende gespielt ist! Gibt es da irgendeine MEthode(andere Funktion z.B.), um das zu unterbinden? Hab schon in der MSDN geschaut, hab aber nix gefunden!

2) Denke jeder kennt das, wenn man in ICQ ne neue Nachricht bekommt. Dann blinkt das "kleine Messagefenster"(weiß nicht wie man das nennt) von ICQ in der Taskleiste immer blau auf. So ein feature möchte ich auch noch einbauen! Weiß irgendwer, wie man sowas realisieren könnte?

THX
Philipp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.10.2003, 15:23 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


zu 1:

einfach als dritten Parameter noch SND_ASYNC angeben ...

zu 2:

weiß nicht obs man da "richtige" animierte icons reinstellen kann, ansonsten:

2 Icons (Shell_NotifyIcon), welche mit z.b einem Timer z.b alle Sekunde gewechselt werden. (Mit Parameter NIM_MODIFY!)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.10.2003, 15:37 Uhr
Philipp



Thx, der Tipp zur ersten Frage klappt schonmal!

Nur zur zweiten frage, ich meine keine TrayIcons... ich meine die kleinen schaltflächen in der mitte der taskleiste, und die dazugehörige schaltfläche blinkt halt immer blau-grau wenn jemand eine Nachricht per ICQ gesendet hat!

Falls das immer noch zu unverständlich ist, lad ich mal ein screenshot hoch

Philipp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.10.2003, 17:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


MSDN:

Zitat:

Flashes the given window once.


C++:
BOOL FlashWindow(
   BOOL bInvert
);





--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.10.2003, 18:53 Uhr
Philipp



mhhh ok thx...
Hab mich jetzt dazu entschieden, FlashWindowEx zu benutzen, hat ja mehr Möglichkeiten...

Aber das funktioniert nicht richtig, er sagt er kennt die dazugehörige FLASHWINFO Struktur und FlashWindowEx nicht, obwohl ich Winuser.h UND Windows.h eingebunden habe, sowie die User32.lib linke!

Er sagt trotzdem, dass er die dinge nicht kennt.

MSDN zu FlashWindowEx:

Zitat:

Header: Declared in Winuser.h; include Windows.h.
Library: Use User32.lib.



Meine inclues in der cpp datei(DataClasses.cpp):

C++:
#include "stdafx.h"    
#include "DataClasses.h"    
#include "ChatClient.h"    
#include "ChatClientDlg.h"
#include "mmsystem.h"

#include "Winuser.h"
#include "Windows.h"



Der Code:

C++:
// Wenn in den Optionen aktiviert, Window bis zum nächsten Aufruf des(Z.554)
// Fensters blinken lassen
if(pDlg->OptionsDlg.m_bLetTWBlinkOnPrivateMessage)
{
      FLASHWINFO FlashWindowInfo;
      FlashWindowInfo.cbSize=sizeof(FLASHWINFO);
      FlashWindowInfo.hWnd=pDlg->m_hWnd;
      FlashWindowInfo.dwFlags=FLASHW_TRAY|FLASHW_TIMERNOFG;
      FlashWindowInfo.uCount=3;
      FlashWindowInfo.dwTimeOut=1;

      FlashWindowEx(FlashWindowInfo);
      //    pDlg->FlashWindow(true);
}//(Z.567)



Fehlermeldungen:

Zitat:

Kompilierung läuft...
ChatClient.cpp
ChatClientDlg.cpp
DataClasses.cpp
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\DataClasses.cpp(557) : error C2065: 'FLASHWINFO' : nichtdeklarierter Bezeichner
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\DataClasses.cpp(557) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'FlashWindowInfo'
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\DataClasses.cpp(557) : error C2065: 'FlashWindowInfo' : nichtdeklarierter Bezeichner
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\DataClasses.cpp(558) : error C2228: Der linke Teil von '.cbSize' muss eine Klasse/Struktur/Union sein
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\DataClasses.cpp(559) : error C2228: Der linke Teil von '.hWnd' muss eine Klasse/Struktur/Union sein
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\DataClasses.cpp(560) : error C2228: Der linke Teil von '.dwFlags' muss eine Klasse/Struktur/Union sein
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\DataClasses.cpp(560) : error C2065: 'FLASHW_TRAY' : nichtdeklarierter Bezeichner
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\DataClasses.cpp(560) : error C2065: 'FLASHW_TIMERNOFG' : nichtdeklarierter Bezeichner
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\DataClasses.cpp(561) : error C2228: Der linke Teil von '.uCount' muss eine Klasse/Struktur/Union sein
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\DataClasses.cpp(562) : error C2228: Der linke Teil von '.dwTimeOut' muss eine Klasse/Struktur/Union sein
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\DataClasses.cpp(564) : error C2065: 'FlashWindowEx' : nichtdeklarierter Bezeichner
InfoDlg.cpp
OptionDlg.cpp
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\OptionDlg.cpp(63) : warning C4805: '==' : unsichere Kombination von Typ 'int' mit Typ 'const bool' in einer Operation
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\OptionDlg.cpp(68) : warning C4805: '==' : unsichere Kombination von Typ 'int' mit Typ 'const bool' in einer Operation
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\OptionDlg.cpp(73) : warning C4805: '==' : unsichere Kombination von Typ 'int' mit Typ 'const bool' in einer Operation
EProgramming\C++Samples\Dialog-based Programming\Chat\ChatClient\OptionDlg.cpp(78) : warning C4805: '==' : unsichere Kombination von Typ 'int' mit Typ 'const bool' in einer Operation
PrivateMessageDlg.cpp
Generieren von Code...
Fehler beim Ausführen von cl.exe.

ChatClient.exe - 11 Fehler, 4 Warnung(en)



Philipp

Dieser Post wurde am 23.10.2003 um 19:00 Uhr von Philipp editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.10.2003, 21:52 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
eigentlich muss man nur die windows.h includieren:


Code:
Header: Declared in Winuser.h; [b]include Windows.h[/b].



probier mal komplette neuerstellung des Projekts!
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
24.10.2003, 15:35 Uhr
Philipp



ok, hab jetzt nur noch die windows.h inkludiert, sowie eine komplette neuerstellung des Projekts probiert!

=> Immer noch die gleichen 11 Fehler

Hab mir jetzt mal die Windows.h angeschaut, bzw. halt die winuser.h. Hab in der Winuser.h mal nach "FLASHWINFO" und "FlashWindowEx" sowie "FlashWindow" gesucht, FlashWindow hat er gefunden, FlashWindowEx und FLASHWINFO aber nicht!!! Hab ich evtl. ne falsche winuser.h???


Bearbeitung:
Boah ich krieg hier echt die Krise
Hab mir in der MSDN jetzt die Funktion CWnd::FlashWindowEx angeschaut, also das MFC-Pendant zu FlashWindowEx. Versuche jetzt, das Window darüber zu flashen. Habe als Objekt einen Zeiger auf ein CChatClientDlg, der ist von CDialog, und der ja wiederum von CWnd abgeleitet, also sollte er FlashWindowEx doch eigentlich kennen!!!
Aber nein, auch das CChatClientDlg(bzw. CDialog, CWnd) Objekt kennt nur FlashWindow, aber nicht FlashWindowEx. Woran kann das jetzt wieder liegen???



THX
Philipp

Dieser Post wurde am 24.10.2003 um 15:53 Uhr von Philipp editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: