Autor Beitrag
patrick dee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 311

Win 98SE, WinXP
D3,D6
BeitragVerfasst: Sa 03.05.03 08:43 
hi,

habe einen knoten in meinem programm. mit einer speichern prozedur speichere ich zeilen aus einer listbox ab. die procedure sieht so aus :
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure Speichern;
var
datei: Textfile;
dateiname: string;
begin
dateiname:= Tools_Form.Edit2.Text;
try
  assignfile (datei, dateiname);
  try
    rewrite (datei);
    writeln (datei, fMain.Listbox1.Items[fMain.Listbox1.ItemIndex]);
  finally
   closefile (datei);
  end;
except
  Showmessage ('Ungueltiger Dateiname!');
end;
end;

nun verwende ich diese auch bei der suche in meiner musi datenbank. die suche mache ich mit sql. geht supi. in der dbgrid wird mir das ergebniss meiner suche angezeigt. mit click auf die enter taste oder mit doppelklick auf die zeile der dbgrid wird der titel gespeichert mit der oben genannten procedure :

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TGefunden_Form.DBGrid1DblClick(Sender: TObject);
var
 st : String;
 i  : integer;
begin
st:= '';
for i:= 0 to 3 do
begin
st:= st + DBGrid1.Fields[i].AsString +  ' ';
  Label1.Caption := st;
 speichern;
 Gefunden_Form.Close;
 end;
 end;



ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TGefunden_Form.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var
 st : String;
 i  : integer;
begin
IF (Key = #13) then
st:= '';
for i:= 0 to 3 do
begin
st:= st + DBGrid1.Fields[i].AsString +  ' ';
  Label1.Caption := st;
  If Label1.Caption = '                ' then   exit

  else
  speichern;

Gefunden_Form.Close;
end;
end;


nun meine Problem :

wenn ich escape drücke wird die speichern procedure ebenfalls ausgeführt. wie verhindere ich das ? wenn ich einen titel suche aber keinen verwenden möchte so soll mit escape die seite geschlossen werden aber die speichern procedure soll nicht ausgeführt werden.

kann mir jemand weiterhelfen wie ich das anstellen kann.

hier die procedure speichern für die dbgrid anzeige :

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure Speichern;
var
datei: Textfile;
dateiname : string;
begin
dateiname:= Tools_Form.Edit2.Text;
try
  assignfile (datei, dateiname); 
  try
    rewrite (datei);
    writeln (datei, Gefunden_Form.Label1.Caption);
  finally
   closefile (datei);
  end;
except
  Showmessage ('Ungueltiger Dateiname!'); 
  end;
end;

danke euch

paterick

_________________
Glauben heißt nichts wissen ...
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Mo 05.05.03 18:15 
Hallo,

du solltest etwas genauer auf begin und end achten. deine Funktion DBGrid1KeyPress sollte wie folgt aussehen.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TGefunden_Form.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var
st : String;
i  : integer;
begin
  IF (Key = #13) then
  begin                        // <--------
    st:= '';
    for i:= 0 to 3 do
    begin
      st:= st + DBGrid1.Fields[i].AsString +  ' ';
      Label1.Caption := st;
      If Label1.Caption = '                ' then   exit
      else
        speichern;
      Gefunden_Form.Close;
    end;
  end;                        // <--------
end;


Dann wird der Code auch wirklich nur bei key=#13 ausgeführt.

Ausserdem solltest du das Speichern und auch das Gefunden_Form.Close aus der for-Schleife herrausnehmen. Momentan überschreibst du die Datei bei jedem durchlauf und es reicht auch ein Fenster einmal zu schliessen :D

Gruß
Sven

Moderiert von user profile iconTino: Absätze entfernt.