Autor Beitrag
Lokke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mi 08.06.05 09:45 
Moin 8)

ich hab schon wieder ein Problem.

Ich habe auf meiner Form ein StringGrid mit 3 Spalten. Die erste ist fest. In die 2. Spalte habe ich eine ComboBox eingebaut und in die 3. Spalte ein Edit-Feld.

Mein Combobox funz ganz gut, ist wie eine DropDownList, wo man z.B.Kunden auswählen kann. In das Edit-Feld, 3. Spalte, soll noch ein Eintrag wie Artikelbezeichnung eingetragen werden können.

Problem!!!

Ich kann nur ein Zeichen in das Edit-Feld eingeben und das wars schon, leider :cry:

Hier wie ich in die StringGrid (alias: TabelleNeu) die Combo und Edit zuweise:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
procedure TForm1.TabelleNeuSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
var
  R: TRect;
begin
  if (ACol = 1and (ARow <> 0then
  begin
    R := TabelleNeu.CellRect(ACol, ARow);
    R.Left := R.Left + TabelleNeu.Left;
    R.Right := R.Right + TabelleNeu.Left;
    R.Top := R.Top + TabelleNeu.Top;
    R.Bottom := R.Bottom + TabelleNeu.Top;
    with Combobox1 do
    begin
      Left := R.Left + 2;
      Top := R.Top + 1;
      Width := (R.Right + 2) - R.Left;
      Height := (R.Bottom + 6) - R.Top;
      Visible := True;
      SetFocus;
    end;
  end;
  CanSelect := True;

    if (ACol = 2and (ARow <> 0then
  begin
    R := TabelleNeu.CellRect(ACol, ARow);
    R.Left := R.Left + TabelleNeu.Left;
    R.Right := R.Right + TabelleNeu.Left;
    R.Top := R.Top + TabelleNeu.Top;
    R.Bottom := R.Bottom + TabelleNeu.Top;
    with Edit7 do
    begin
      Left := R.Left + 1;
      Top := R.Top + 1;
      Width := (R.Right + 1) - R.Left;
      Height := (R.Bottom + 1) - R.Top;
      Visible := True;
      SetFocus;
    end;
  end;
  CanSelect := True;

end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  TabelleNeu.Cells[TabelleNeu.Col, TabelleNeu.Row] := ComboBox1.Items[ComboBox1.ItemIndex];
  ComboBox1.Visible := False;
  TabelleNeu.SetFocus;
end;

procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
  TabelleNeu.Cells[TabelleNeu.Col, TabelleNeu.Row] := ComboBox1.Items[ComboBox1.ItemIndex];
  ComboBox1.Visible  := False;
  TabelleNeu.SetFocus;
end;


procedure TForm1.Edit7Exit(Sender: TObject);
begin
  TabelleNeu.Cells[TabelleNeu.Col, TabelleNeu.Row] := Edit7.Text;
  Edit7.Visible  := False;
  TabelleNeu.SetFocus;
end;

procedure TForm1.Edit7Change(Sender: TObject);
begin
  TabelleNeu.Cells[TabelleNeu.Col, TabelleNeu.Row] := Edit7.Text;
  Edit7.Visible := False;
  TabelleNeu.SetFocus;
end;


Und hier was passieren soll, wenn die Form angezeigt wird:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.FormShow(Sender: TObject);
var i : Integer;
begin
  FKundenNamen.Clear;            //Meine Tabelle                    
  Kundentab.First;
  for i:=0 to Kundentab.RecordCount - 1 do begin
    FKundenNamen.Add(Kundentab.FieldByName('Kundenname').AsString);
    Kundentab.Next;
  end;
  UpdateKundenStents;

  with Edit7 do
    begin
      TabelleNeu.DefaultRowHeight := Height;
      Visible := False;
      Edit7.Text := '';
//      Edit7.MaxLength := 26;   Habs auch probiert, funzt aber nicht???
    end;

  with Combobox1 do
    begin
      TabelleNeu.DefaultRowHeight := Height;
      Visible := False;
      Combobox1.Items := FKundenNamen;
    end;
end;


Was mach ich den falsch?

Muß ich vielleicht ein anderes Ereignis für Edit nehmen??

Wäre glücklich über vorschläge :lol:

Dankeschöö
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 08.06.05 09:54 
Hallo!

Wo genau jetzt dein Fehler liegt kann ich leider nicht sagen. Allerdings würde ich bei dem StringGrid und deiner Combobox und Editbox anders vorgehen. Benutze, wie es eigentlich auch von TStringGrid vorgesehen ist, einen eigenen InplaceEditor.

Hier habe ich ganz kurz etwas zu geschrieben. Im DF solltest du aber wohl ein paar Beispiel finden: Suche in: Delphi-Forum, Delphi-Library TINPLACEEDIT.

Gruß
Tino
Lokke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mi 08.06.05 10:03 
Danke für die scnelle Antwort!

Werd mal versuchen etwas in die richtung zu basteln. Ob ich damit klar komme :wink: Ich hoffe doch

cu

Lokke
Lokke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mi 08.06.05 10:52 
Ich hab mein Problem jetzt anders gelöst.

Habe für Edit, OnKeyDown Ereignis genommen, statt OnChange und einwenig  if ...then begin code und schon funz das!!! :P

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Edit7KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_RETURN then begin
    TabelleNeu.Cells[TabelleNeu.Col, TabelleNeu.Row] := Edit7.Text;
    Edit7.Visible := False;
    TabelleNeu.SetFocus;
  end;
end;


danke trotzdem für den Vorschlag!