How to erase a DrawString on a form?

Discussion in 'Questions (Windows Mobile)' started by Stellaferox, Jul 8, 2007.

  1. Stellaferox

    Stellaferox Active Member Licensed User

    Hi,
    I am trying to erase a DrawString on a form but FErase won't do it. Is there another way except rewriting the string in the backgroundcolour?
     
  2. Erel

    Erel Administrator Staff Member Licensed User

    If you draw the string on the fore layer you will be able to erase it with FErase.
    Other options are to draw a rectangle in the background color, or to draw the text again using the background color.
     
  3. Stellaferox

    Stellaferox Active Member Licensed User

    Erel, you must be desperate for all the stupid questions you get.... I forgot the F in front of the Drawstringcommand. Now it works fine...
    tnx
     
  4. Stellaferox

    Stellaferox Active Member Licensed User

    Meanwhile, let me propose a problem. In the attached program I want to change the Mean and SD from 100 and 16 to 0 and 1 respectively. I want to show the change on the x-axis as soon as the new value is filled in in the textbox (let's say the 0 in the Mean textbox without ENTER). Now I have to switch textboxes and back to show the change.
    Any ideas?
     
  5. Stellaferox

    Stellaferox Active Member Licensed User

    hmmmmm.... to quick again... here is the file... the subs are tbMean_GotFocus and tbSD_GotFocus.
    thnx in advance....
    Marc
     

    Attached Files:

  6. Cableguy

    Cableguy Expert Licensed User

    Entering the values does not raise any event..that is the problem...The only way I would see this working would be enableing a timer when a textbox got focus and the on timer.tick do a lost focus to the textbox, raising this way the lostfocus event...
     
  7. Stellaferox

    Stellaferox Active Member Licensed User

    something like:?

    Sub tbSD_GotFocus
    Timer1.Interval = 10 'milliseconds
    Timer1.Enabled = True
    End Sub

    Sub Timer1_Tick
    Mean = tbMean.Text
    SD = tbSd.Text
    InitXaxis
    Timer1.Enabled = False
    End Sub

    it doesnt change while waiting...
     
  8. Stellaferox

    Stellaferox Active Member Licensed User

    I did it like this, but I do not think this is the most elegant solution...

    Sub tbMean_GotFocus
    Timer.Interval = 1000 'milliseconds
    Timer.Enabled = True
    End Sub

    Sub tbMean_LostFocus
    Timer.Enabled = False
    End Sub

    Sub tbSD_GotFocus
    Timer.Interval = 1000 'milliseconds
    Timer.Enabled = True
    End Sub

    Sub tbSD_LostFocus
    Timer.Enabled = False
    End Sub

    Sub Timer_Tick
    Mean = tbMean.Text
    SD = tbSd.Text
    InitXaxis
    End Sub
     
  9. Cableguy

    Cableguy Expert Licensed User

    I was thinking more in the lines of this:

    sub textbox1_gotfocus
    Timer1.interval=1000
    timer1.enabled=true
    End Sub

    Sub Timer1_Tick
    Timer1.Enabled=False
    somecontrol.Focus (This will raise the textbox1_lostfocus)
    EndSub

    Sub Textbox1_lostfocus
    This is were you enter the variabl values
    End Sub
     
  10. Stellaferox

    Stellaferox Active Member Licensed User

    Hey, that is even more nicer. I will try that. Thanks.....
    Marc
     
  11. agraham

    agraham Expert Licensed User

    Why don't you capture each key press, check for enter and call the lost_focus sub. That way you get an update on leaving the control or on pressing enter.

    Sub tbMean_KeyPress (key)
    if Asc(Key) = 13 then
    tbMean_LostFocus
    end if
    End Sub


    If you want to know what the text box is going to contain after the key press, key isn't added to the textbox until after the event is fired

    Sub tbMean_KeyPress (key)
    NewText = tbMean.text & key
    ' do something if necessary
    End Sub

    By the way. I don't know if you have noticed but your (I think this what it is called as I haven't got the program in front of me) Clear_Area routine is clearing parts of the curve as well.
     
    Last edited: Jul 8, 2007
  12. Stellaferox

    Stellaferox Active Member Licensed User

    Hi Agraham,
    Thnx for your input. i will try that as well...
    I know the Erase part of the graph is ersing some points but I dont know how to avoid that. I am calling the Erase function one pixel below the graph so it shouldnt erase parts of the graph. Havent found out how to erase just below the graph otherwise....
    Marc
     
  13. Louis

    Louis Active Member Licensed User

    Hi there. You know, a while ago on this very forum, Erel added a library called barcode.dll that supports the textbox changed event that will raise each time a text box changes. I cannot remember the URL, but maybe if you write barcode in the search box of the forum you may find it and play around with it and see if that makes things a bit less daunting? Just a thought. Take care then.
     
  14. agraham

    agraham Expert Licensed User

    It is because you are doing graphics work using floating point numbers and the rounding to pixel Y values and X co-ordinates is working against you. You are also generating far more data than can be displayed, something like 800 data points rather than 215.

    Ideally you need an array, 0 to 214, in your case, holding integer values. I believe that if you declare an array "as int16" you get an array of 16 bit integers (non-array variables are always 64 bit floating point) or you can obtain them by the int(somevariable) function. You can then draw your graphics with both integer X (array index) and Y (array value) and predict exactly what it will look like when you do co-ordinate arithmetic. If you need a more precise value for other puposes you can either have a "shadow" array holding those more precise values or calculate them using a corrected X index like (X-grwidth/2)/(215/8) as the input value to your formula.
     
  15. Stellaferox

    Stellaferox Active Member Licensed User

    Agraham, thanx, I have already tried out the exact resolution for my pixels and used the INT function in the earlier stages of development. The reason I sticked with this original is that there used to be a function to invert all the data back to probability. Since it is not included I can go easily back to my original and your suggestion. Thanks for that!
    Marc
     
Loading...