Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB6: Kontrollin tekstin vaihtaja

Sivun loppuun

KeKimmo [16.10.2004 23:27:35]

#

Tämä viritys vaihtaa tietyn kontrollin tekstin toiseksi, kun siirrät hiiren sen päälle.
Kun sammutat ohjelman (paina ESC), tekstit palaavat normaaleiksi.

Esimerkki: Jos siirrät hiiren OK-napin päälle, sen tekstiksi tulee "Ookoo!".

Tee moduuli ja laita allaoleva koodi siihen. Formeja tai muuta vastaavaa ei tarvita.

'|----------------------------------------------------------------------|
'| Tekstinvaihtaja                                                      |
'|                                                                      |
'| Kirjoittanut Kimmo Kenttälä                                          |
'|                                                                      |
'| Tämä ohjelma vaihtaa kontrollin (esim. nappi) tekstin toiseksi      |
'| valmiiksi määriteltyjen ohjeiden mukaan ja palauttaa sammuessaan     |
'| vanhan tekstin takaisin.                                             |
'|                                                                      |
'| Joitain tässä ohjelmassa esiintyviä temppuja varten on haettu tietoa |
'| Ohjelmointiputkan (www.ohjelmointiputka.net) koodivinkeistä.         |
'|                                                                      |
'|----------------------------------------------------------------------|

'Määritellään tarvittavat jutut
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SendMessageString Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long

Private Type POINTAPI
        x As Long
        y As Long
End Type

Private Const WM_GETTEXT = &HD
Private Const WM_GETTEXTLENGTH = &HE
Private Const WM_SETTEXT = &HC

Private VaihdettujenMäärä As Integer                                'Näitä tarvitaan tekstien palauttamiseen ennalleen
Private VaihdettujenKahvat() As Long                                'ohjelman sammuessa. Ei kommentteja muuttujanimien
Private VaihdettujenTekstit() As String                             'pituudesta, kiitos!

Sub Main()

    Dim Sij As POINTAPI
    Dim Kahva As Long
    Dim Teksti As String
    Dim TxtPituus As Long

    App.TaskVisible = False                                         'Piilotetaan ohjelma
    If App.PrevInstance Then End                                    'Lopetetaan jos on jo käynnissä

    tmpvar = GetAsyncKeyState(vbKeyEscape)                          'Jottei ohjelma reagoi vanhoihin painalluksiin

    Do

        tmpvar = GetCursorPos(Sij)                                  'Haetaan kursorin sijainti
        Kahva = WindowFromPoint(Sij.x, Sij.y)                       'Haetaan kontrollin kahva

        TxtPituus = SendMessage(Kahva, WM_GETTEXTLENGTH, 0, 0)      'Haetaan tekstin pituus
        Teksti = String(TxtPituus, 0)

        SendMessageString Kahva, WM_GETTEXT, TxtPituus + 1, Teksti  'Haetaan kontrollin teksti

        Vaihda Kahva, Teksti, "OK", "Ookoo!"                        'Vaihdellaan tekstejä
        Vaihda Kahva, Teksti, "Käynnistä", "PANIC!"


        aika = Timer                                                'Vähän viivettä
        Do
            DoEvents
        Loop Until Timer > aika + 0.1

    Loop Until GetAsyncKeyState(vbKeyEscape)                        'Poistutaan luupista kun painetaan ESC

    For i = 1 To VaihdettujenMäärä                                  'Palautetaan kontrollien tekstit ennalleen
        tmpvar = SendMessageString(VaihdettujenKahvat(i), WM_SETTEXT, 0, VaihdettujenTekstit(i))
    Next i

End Sub

'Tämä hoitaa tekstien vaihtamisen
Private Sub Vaihda(hWnd As Long, ATxt As String, VTxt As String, KTxt As String)

    If ATxt = VTxt Then                                             'Onko sama teksti
        tmpvar = SendMessageString(hWnd, WM_SETTEXT, 0, KTxt)       'Korvataan teksti
        VaihdettujenMäärä = VaihdettujenMäärä + 1                   'Lisätään laskurin arvoa yhdellä
        ReDim Preserve VaihdettujenKahvat(1 To VaihdettujenMäärä)   'Kasvatetaan taulukkojen
        ReDim Preserve VaihdettujenTekstit(1 To VaihdettujenMäärä)  'kokoa tarpeen mukaan
        VaihdettujenKahvat(VaihdettujenMäärä) = hWnd                'Laitetaan kontrollien kahvat
        VaihdettujenTekstit(VaihdettujenMäärä) = VTxt               'ja vanhat tekstit muistiin
    End If

End Sub

Meitsi [21.10.2004 00:11:57]

#

Tuohan on loistava! :D Täytyy jalostaa tuota koodia ja asettaa koulun koneella ajastettu käynnistä napin tekstin vaihto. Sitten kaikki ihmettelee, miks käynnistä napissa lukee jotain tyyliin "TeiniX".

EDIT: Ei hitto tos on joku bugi. Nyt mulla jäi käynnistä napin tekstiks "Foobar". x(

TUPLA EDIT: Se ei lähe minnekkää se teksti :(

TRIPLA EDIT: Keksin keinon miten sen saa palautettua ennalleen. Poistaa tehtäväpalkin lukituksen ja raahaa sen sellaiseksi pieneksi. Sitten raahaa sen takaisin isoksi. Teksti päivittyy --> alkuperäinen teksti tulee takaisin.

KeKimmo [21.10.2004 00:22:05]

#

Kumma juttu, kokeilin sitä kyllä ja toimi joka kerta kunnolla.
Kaikkien tekstien pitäisi palata ennalleen esciä painettaessa.

Meitsi [21.10.2004 00:27:01]

#

Joo... Taisin vaan unohtaa painaa esciä. Et arvaa kuinka paniikissa olin kun en saanu sitä palautettua ja siinä luki Foobar. No, ei lue enää. :D

Gwaur [21.10.2004 00:34:25]

#

No, vaikka se ei lähtisikään pois ESCillä niin kai sen saa tuota koodia hiukan muuttamalla vaihtumaan takaisin alkuperäiseksi?

Gwaur [21.10.2004 00:35:00]

#

Äh, ei näitä omia kommentteja voi vieläkään muokat, unohdin äskeisen kommenttini perästä hymiön :)

Meitsi [21.10.2004 00:37:52]

#

No sen sai tuolla kikalla takaisi... :P

Bill Keltanen [21.10.2004 08:46:41]

#

Meitsi.. kyllä se vaihtuu takaisin itestään, ja toimii kai vaan xp.. en oo varma 2k:sta

Blaze [21.10.2004 12:25:13]

#

KYllä se viimeistään bootissa vaihtuu takasin :)

Meitsi [21.10.2004 14:38:48]

#

Olis aika noloa jos ei sais sitä takasin ja siin lukis jotain TeiniX. :D

hohoo [02.02.2005 16:28:54]

#

Hauska =D
H4x0r tai 31337 käynnistänapin tekstiksi ja koulun / kaverin koneelle.

Ongelma: Syö koneen tehoja =(

KeKimmo [02.02.2005 16:32:24]

#

lainaus:

Ongelma: Syö koneen tehoja =(

Teksti pysyy vaikka ohjelman sammuttaisi, joten homman pitäisi hoitua poistamalla pätkä joka palauttaa tekstit.

gamehouse [14.08.2007 18:32:44]

#

No Work!

JussiR [02.03.2010 14:38:39]

#

Juu eipä nää muistissa tapahtuvat muutokset ole pysyviä...

Ja pilkun-nussijoille: no OKEI on jos muutat Wordissa tekstiä ja autosave on päällä. OMG!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta