Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Feldinhalt markieren

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 < [ 3 ]
010
08.06.2005, 12:22 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ich glaube nicht das das ein Bug von Windows ist, sondern ein Programmfehler. Ohne das Programm aber jetzt genauer zu kennen lässt sich schwer sagen wo der liegt.

Wieso gibst du nicht die Messagebox aus und markierst dann den Text in deinem Feld?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
09.06.2005, 09:52 Uhr
Dirk70




Zitat von Guybrush Threepwood:
Wieso gibst du nicht die Messagebox aus und markierst dann den Text in deinem Feld?

Ähemm.. Aber genau das mach ich doch! Leider darf ich hier nicht einfach den ganzen Quellcode posten, aber vielleicht kann dieser Auszug mein Problem verdeutlichen:

Code:

BOOL CTestdialog::PreTranslateMessage(MSG* pMsg)
{
    aktWnd = GetFocus();
    if (aktWnd == GetDlgItem(IDC_FELD1))
    {
        if (pMsg->wParam == VK_DOWN)
        {
            ::TranslateAccelerator(m_hWnd, m_hAccel, pMsg);
        }
    }
    return CDialog::PreTranslateMessage(pMsg);
}

void CTestdialog::OnVor()
{
    if (ServerAnfrage() == false)
    {
        AfxMessageBox(_T("Keine weiteren Datensätze vorhanden"));
    }
    aktWnd->EnableWindow(true);
    GotoDlgCtrl(aktWnd);
    m_feld1_Ctrl.SetSel(0,-1);
}


Wenn ich die <Nach Unten>-Taste drücke, wird nach PreTranslateMessage () in OnVor() eine Serveranfrage gestartet, die entweder den nächsten Satz ausgibt oder FALSE liefert. Im ersten Fall wird das Feld wie gewünscht markiert, im zweiten Fall aber nicht, obwohl laut Debugger SetSel() ausgeführt wird. Das kann meiner Meinung nach nur bedeuten, dass Windows CE nach dem Beenden der Funktion OnVor() die Markierung selbstständig wieder entfernt. Ich sage: BUG !!!

Zitat von ~krozey:

du könntest die meldung eventuell ja auch im hauptfenster als text mit ton ausgeben und zwar so formatiert das man es nicht übersehen kann.


Das ist genau der Lösungsweg, den ich mir auch überlegt habe. Ich werde im unteren Bereich der Maske ein Statusfeld integrieren, dass diverse Informationen (z.B. lfd. Satznummer) enthält. Hier würde ich dann auch die Meldung reinschreiben. Gibt es vielleicht eine Methode, die die Farbe eines Editfelds ändert? Würde es nämlich bei Fehlermeldungen gerne Gelb markieren, damit es auffällt (Tonausgabe ist bei unseren mobilen Geräten meist deaktiviert). Hilfe- und Suchfunktion haben mir da bisher leider nicht weiterhelfen können *schäm*
--
Grüße aus dem Saarland
Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
09.06.2005, 15:07 Uhr
mmc20
puss in boots


bug ? naja, eventuell haste ja doch nen fehler drin... ich würde das etwas anders machen, da du dir bei jedem "PreTranslateMessage" den aktWnd umsetzt:

C++:
BOOL CTestdialog::PreTranslateMessage(MSG* pMsg)
{
    if ( GetFocus() == GetDlgItem(IDC_FELD1) ) {
        aktWnd = GetFocus();
        if (pMsg->wParam == VK_DOWN) {
            ::TranslateAccelerator(m_hWnd, m_hAccel, pMsg);
        }
    }
    return CDialog::PreTranslateMessage(pMsg);
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
09.06.2005, 15:38 Uhr
Dirk70



Hast recht, ist nicht ganz sauber, da aktWnd ja nur verändert werden soll, wenn ein "relevantes" Ereignis stattgefunden hat. Hab's geändert, Danke für den Tipp!
Hat aber mit meinem eigentlichen Problem nix zu tun, denn der Wert von aktWnd ist innerhalb von OnVor() ja immer noch der gleiche. Ich kann sogar ausschließen, dass die Funktion ServerAnfrage() für den Fehler verantwortlich ist, denn gerade habe ich sie mal testweise entfernt:

Code:

void CTestdialog::OnVor()
{
    aktWnd->EnableWindow(true);
    GotoDlgCtrl(aktWnd);
    m_feld1_Ctrl.SetSel(0,-1);
}


...funktioniert! Wenn ich aber nur die Messagebox davorsetze, ohne sonst irgendwas zu ändern:

Code:

void CTestdialog::OnVor()
{
    AfxMessageBox(_T("Keine weiteren Datensätze vorhanden"));
    aktWnd->EnableWindow(true);
    GotoDlgCtrl(aktWnd);
    m_feld1_Ctrl.SetSel(0,-1);
}


...ist die Markierung weg! Ich sage wieder: BUG !!!
--
Grüße aus dem Saarland
Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
09.06.2005, 16:27 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


weil er den Focus vom Editfeld verliert, das ist kein bug
--
class God : public ChuckNorris { };

Dieser Post wurde am 09.06.2005 um 16:27 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
09.06.2005, 17:59 Uhr
mmc20
puss in boots


machmal statt dem "aktWnd->EnableWindow(true);" nen "aktWnd->SetFocus();" und lass auch mal das GotoDlgCtrl weg
also einfach nur:

C++:
void CTestdialog::OnVor()
{
    AfxMessageBox(_T("Keine weiteren Datensätze vorhanden"));
    aktWnd->SetFocus();
    aktWnd->SetSel(0,-1);
}


Dieser Post wurde am 09.06.2005 um 18:00 Uhr von mmc20 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
10.06.2005, 13:12 Uhr
Dirk70




Zitat von mmc20:
machmal statt dem "aktWnd->EnableWindow(true);" nen "aktWnd->SetFocus();" und lass auch mal das GotoDlgCtrl weg
also einfach nur:

C++:
void CTestdialog::OnVor()
{
    AfxMessageBox(_T("Keine weiteren Datensätze vorhanden"));
    aktWnd->SetFocus();
    aktWnd->SetSel(0,-1);
}



Hab ich alles schon probiert! Klappt nur, wenn ich AfxMessageBox auskommentiere...
--
Grüße aus dem Saarland
Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
10.06.2005, 13:26 Uhr
Dirk70




Zitat von FloSoft:
weil er den Focus vom Editfeld verliert, das ist kein bug

O.K., mag sein, dass AfxMessageBox den Focus löscht. Das müsste sich dann doch aber mit SetFocus() wieder hinbiegen lassen. Tut es aber nicht (siehe vorheriges Posting)!

Mal übertrieben ausgedrückt, passiert in meinem Programm doch folgendes:

Code:

    bool m_wert = true;
    m_wert = false;


Nun lasse ich mir den Inhalt von m_wert anzeigen und sehe, dass er FALSE ist. Klemme ich aber eine Meldung dazwischen:

Code:

    bool m_wert = true;
    AfxMessageBox(_T("Ätsch!"));
    m_wert = false;


und lasse mir den Inhalt von m_wert anzeigen, ist er aber immer noch TRUE.

Was ich damit sagen will ist: Es kann doch nicht sein, dass ein Befehl durch bloßes Vorschalten von AfxMessageBox() ungültig gemacht wird! Aber genau das passiert bei mir: Ich kommentiere nur die Zeile mir AfxMessageBox() aus, und es funktioniert! Ich nehme die Kommentarmarke wieder raus, und es funktioniert nicht! Aaaaaaaaaah....
--
Grüße aus dem Saarland
Dirk

Dieser Post wurde am 10.06.2005 um 13:28 Uhr von Dirk70 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
10.06.2005, 15:41 Uhr
mmc20
puss in boots


mh, und aktWnd ist auch wirklich noch gültig? bzw. zeigt auf das entsprechende editfeld?

haste schon probiert das mit ner member zu machen ? also so :

C++:
void CTestdialog::OnVor()
{
    if ( ServerAnfrage() == false ) {
        AfxMessageBox( _T("Keine weiteren Datensätze vorhanden") );
    }
    m_edit1.SetFocus();
    m_edit1.SetSel(0,-1);
}



Dieser Post wurde am 10.06.2005 um 18:36 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
10.06.2005, 18:37 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oder nimm mal ne normale MessageBox, vielleicht überschreibt dir die AfxMessageBox irgendwas (führt evtl ein UpdateData aus?!?)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ 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: