Jos oon luonu vaikkapas editboxin ja liittäny siihen KillFocus functionin, joka tarkistaa että on annettu kelvollista tietoo esim. tarkistaa tilnumeron oikeellisuuden ja huomauttaa kun tilinumero on vääränlainen. Ja palauttaa focuksen takaisin editboxiin.
Ongelma tulee siinä kun käyttäjä klikkaa vaikkapas Cancelii sillo ku editboxi on focuksessa ja se sitte tietysti tarkistaa sen oikeellisuuden ja paluttaa sen focuksen siihen editboxiin jos oli vääränlaista dataa.
Eli miten saisi homman pelittämään ilman mitään suurempia purkkaviritelmiä?
EDIT:Siis ongelma on miten Cancel napin saa tomimaan "oikein"
Ohjelmointiputkan ohje kirjoitti:
Jos alueella keskustellaan useammasta ohjelmointikielestä, muista mainita viestissä, mihin kieleen oma ongelmasi liittyy.
Aivan kielenä on VC++
Kieli ei ole VC++ vaan C++ ja VC++ on sun IDE,
Käytätkö .NET-komponentteja? *voi kerpele kun on joskus vaikeaa*
Ohjelma: Microsoft Visual C++ 6.0
Kieli: C/C++
Ja käytössä ei ole .Net componentteja.
*muminaa ja mutinaa*
Ja Kaviaari anteeksi että en ollut riittävän tarkka, mutta jäikö joltakin ton VC++ jälkeen käyttämäni kieli epäselväksi?
En aivan tarkalleen tiedä noiden käyttäytymistä, mutta:
KillFocus-funktion alussa voisi käydä läpi ohjelmalle lähetetyt viestit:
while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); }
Tällöin varmaankin saataisiin napinpainallus käsiteltyä. Cancel-napinpainallus sitten asettaa jonkin muuttujan, josta KillFocus tarkistaa, pitääkö jatkaa.
Tai sama purkkana:
Laita KillFocus-funktioon vain timerin luonti, vaikkapa yhden millisekuntin päähän, ja liitä tähän timeriin koodi, jossa tarkistat numeron oikeellisuuden. Windows-timerin WM_TIMER-viesti menee viestijonon loppuun, jolloin Cancel hoidetaan ensin. Tässäkin pitää lisätä napinpainallukseen muuttuja ja TimerProciin sen tarkistus.
Joo, sain jo tossa päivällä ongelman ratkastuu oikeestaan juuri tolla tavalla kun sanoit tossa yllä (ei purkka).
Mutta kiitoksia kuiteski.
Aihe on jo aika vanha, joten et voi enää vastata siihen.