[Lazarus] Newbie questions

Bill de Carle ve2iq at magma.ca
Wed May 7 15:29:50 CEST 2008


At 09:39 PM 5/5/2008, Paul Ishenin wrote:
>[..]
>You can turn KeyPreview of your Form to True and add OnKeyPress handler.
>In your OnKeyPress handler make a check for space key and focus control
>you like.
>
>For example:
>
>TForm1.Form1KeyPress(Sender: TObject; var Key: Char);
>begin
>    if Key = 32 then
>      PerformTab(True);
>end;

Although this works, it should be noted that the results are not 
identical when using the space bar and the tab key.  The tab key 
simply moves the cursor to the next input box whereas the space bar 
first appends a space character to the end of the text in the edit 
box, then performs the tab function.  This can raise an issue because 
the graphical representation of a space character is visually 
indistinguishable from "no character" so the user can't see that it 
is there - but the trailing space character counts as part of the 
length of the edit.text string and is involved when comparing 
strings.  So if someone uses TAB to enter (in this case amateur radio 
callsigns which contain no imbedded spaces) and another user hits the 
space bar to do it, although the edit box values *look* identical in 
both cases the two entered strings aren't technically equal, which 
makes a casual check for duplicate callsign entry fail.  In the above 
example we are presumably previewing the keystroke *before* it gets 
to the widgetprocessor, but it looks like the space character has 
already been appended to the text field by the time the onkeypress 
handler sees it.  I don't know if this is an oversight or if it has 
to be done that way because that's how Delphi did it?

On another point, I see the UpDown widget doesn't work exactly as 
expected.  Normally one would expect the value (.position) to 
increase then the uparrow
is clicked and decrease when the downarrow is clicked.  That happens 
most of the time in the current implementation but it seems that 
whenever the direction changes the first click in the new direction 
actually performs the *old* operation first before changing the 
direction.  For example, with a starting value of 0, if we upclick 
three times in a row the value goes to 1, 2, 3 just as expected.  If 
we now click on the downarrow the value goes to
4 instead of 2.  Subsequent clicks on the downarrow work as 
expected.  I see there is a website for viewing bugs but haven't 
found a place to report such things.  Is there an official bug-logging place?

Bill




More information about the Lazarus mailing list