Announcement

Collapse
No announcement yet.

JvStringGrid

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JvStringGrid

    Um ein Formular mit Daten auszudrucken, sammle ich die Daten in einem Jvc String Grid. Um Daten, die sich wiederholen nicht immer wieder neu einzugeben, sammle ich die editierten Strings in einer unsichtbaren ListBox. Jedesmal wenn ich einen Character in ein Feld des Grids eingebe, sucht eine Routine entsprechend der länge der bereits eingegebenen Zeichen nach passenden Einträgen in der ListBox.

    Code:
    function read_autofill: boolean;
    var
       anz: integer;
       len: integer;
       i  : integer;
       l  : integer;
       x  : integer;
       y  : integer;
       s  : string;
    begin
       x := Form6.JvStringGrid1.Col;
       y := Form6.JvStringGrid1.Row;
    
       l := strlen(PChar(Form6.JvStringGrid1.Cells[x,y]));
       anz := Form6.ListBox1.Items.Count;
    
       for i := 0 to anz-1 do
       begin
          s := strleft(Form6.ListBox1.Items[i], l);
    
          if l > 0 then
          begin
            if Form6.JvStringGrid1.Cells[x,y] = s then
            begin
               Form6.JvStringGrid1.Cells[x,y] := Form6.ListBox1.Items[i];
               len := strlen(PChar(Form6.ListBox1.Items[i]));
               Form6.JvStringGrid1.InplaceEditor.SelStart := l;
               Form6.JvStringGrid1.InplaceEditor.SelLength := len;
            end;
          end;
       end;
       read_autofill := TRUE;
    end;
    Mit SelStart und SelLength wird über den InplaceEditor der Rest des Wortes markiert. Das klappt auch alles sehr ordentlich, aber danach wird leider ein
    TJvStringGrid.WMCommand aufgerufen in der durch inherited der Vorgang leider überschrieben wird.

    Ich bin ratlos !

    Für Ideen bin ich dankbar

    mfg

    Josef_D
    Zuletzt editiert von Josef_D; 10.09.2007, 16:13.

  • #2
    JvStringGrid - Neues zum Thema

    Die oben abgebildete Funktion funktioniert tatsächlich einwandfrei. Mein Fehler war diese Funktion mit dem Ereignis StringGrid1KeyPress(.....) aufzurufen. Zu diesem Zeitpunkt ist aber die selektierte Zelle leer bzw. wurde das Zeichen noch nicht an den vorhandenen Text angehangen.

    Ich habe den Aufruf der Funktion jetzt an das Ereignis JvStringGrid1KeyUp angehangen.

    Code:
    procedure TForm6.JvStringGrid1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
       if (Key <> 16) and //Shift-Taste
          (Key <> 8) then //Backspace Taste
          read_autofill;
    end;
    Und jetzt funktioniert es. Und es geht mir besser,

    mfg

    Josef_D

    Comment

    Working...
    X