Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Aktuelle Zeile auslesen ... (https://www.delphipraxis.net/56847-aktuelle-zeile-auslesen.html)

Nils_13 12. Nov 2005 09:59


Aktuelle Zeile auslesen ...
 
Hi,

ich lese mit diesem Code die Zeile aus in der ich mich befinde
Delphi-Quellcode:
  i := 0; i2 := 0;
  while i < Memo1.Lines.Count do begin
    Inc(i2, Length(Memo1.Lines.Strings[i]));
    if i2 < Memo1.SelStart then Break;
    Inc(i);
  end;
Der ganze Code:
Delphi-Quellcode:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var i, i2: integer;
begin
  i := 0; i2 := 0;
  while i < Memo1.Lines.Count do begin
    Inc(i2, Length(Memo1.Lines.Strings[i]));
    if i2 < Memo1.SelStart then Break;
    Inc(i);
  end;

  if Key = VK_Return then
  begin
    if LowerCase(IntToStr(i)) = '#exit' then Application.Terminate;
  end;
end;
Warum passiert nichts, wenn ich '#exit' eintippe und Return drücke ?

jim_raynor 12. Nov 2005 10:06

Re: Aktuelle Zeile auslesen ...
 
Lowercase(i) wird auch nie #exit ergeben ;) Müsste ehr Lowercase(Memo1.Lines[i]) heissen, nicht wahr ;)

Nils_13 12. Nov 2005 10:29

Re: Aktuelle Zeile auslesen ...
 
Delphi-Quellcode:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var i, i2: integer;
begin
  i := 0; i2 := 0;
  while i < Memo1.Lines.Count do begin
    Inc(i2, Length(Memo1.Lines.Strings[i]));
    if i2 < Memo1.SelStart then Break;
    Inc(i);
  end;

  if Key = VK_Return then
  begin
    if Lowercase(Memo1.Lines[i]) = '#exit' then Application.Terminate;
  end;
end;
Läuft immer noch nicht.

Khabarakh 12. Nov 2005 10:32

Re: Aktuelle Zeile auslesen ...
 
Wie wäre es, wenn du einfach mal den Debugger zur Hand nimmst und die Variableninhalte prüfst?

CalganX 12. Nov 2005 10:33

Re: Aktuelle Zeile auslesen ...
 
Hi,
überleg mal bitte: wenn du Enter drückst (=> in die nächste Zeile springst), prüfst du den Inhalt dieser neuen Zeile auf den Wert #exit. Aber im Normalfall steht in dieser Zeile ja noch nichts, weil du gerade erst in sie reingesprungen bist/sie erzeugt hast.
Wo musst du also den Wert überprüfen? Auf jeden Fall nicht in der i. Zeile.

Chris

Neutral General 12. Nov 2005 11:10

Re: Aktuelle Zeile auslesen ...
 
... sondern in der i-1 Zeile.

Nils_13 12. Nov 2005 11:43

Re: Aktuelle Zeile auslesen ...
 
Zitat:

Zitat von Neutral General
... sondern in der i-1 Zeile.

Nein.
Delphi-Quellcode:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var i, i2: integer;
begin
  i := 0; i2 := 0;
  while i < Memo1.Lines.Count do begin
    Inc(i2, Length(Memo1.Lines.Strings[i]));
    if i2 < Memo1.SelStart then Break;
    Inc(i);
  end;

  if Key = VK_Return then
  begin
    if Lowercase(Memo1.Lines[i-1]) = '#exit' then Application.Terminate;
  end;
end;
Passiert nichts. Was brinbgt mir außerdem der Debugger ? Es tauchen ja keine Fehler auf.

marabu 12. Nov 2005 11:46

Re: Aktuelle Zeile auslesen ...
 
Hallo Nils,

kommst du damit zurecht?

Delphi-Quellcode:
procedure TDemoForm.MemoKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  iLine: integer;
begin
  iLine := Memo.Perform(EM_LINEFROMCHAR, -1, 0);

  if (Key = VK_Return) and (LowerCase(Memo.Lines[iLine]) = '#exit') then
    Application.Terminate;
end;
Grüße vom marabu

Nils_13 12. Nov 2005 11:48

Re: Aktuelle Zeile auslesen ...
 
Zitat:

Zitat von marabu
Hallo Nils,

kommst du damit zurecht?

Delphi-Quellcode:
procedure TDemoForm.MemoKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  iLine: integer;
begin
  iLine := Memo.Perform(EM_LINEFROMCHAR, -1, 0);

  if (Key = VK_Return) and (LowerCase(Memo.Lines[iLine]) = '#exit') then
    Application.Terminate;
end;
Grüße vom marabu

Danke :-D jetzt läuft es.

Wie könnte ich es machen, dass überprüft wird, ob es die Befehle überhaupt gibt ? Ich könnte es ja über eine Textdatei machen, in der alle Befehle stehen. Aber wie vergleiche ich das dann ? Dadurch wird der Code auch allgemein kleiner, da ich die if Abfragen nicht mehr für jeden Befehl benötige.

Khabarakh 12. Nov 2005 11:52

Re: Aktuelle Zeile auslesen ...
 
Zitat:

Zitat von Nils_13
Was brinbgt mir außerdem der Debugger ? Es tauchen ja keine Fehler auf.

Wenn ein Programm nicht macht, was es soll, ist das ja wohl ein Fehler :stupid: . Wie gesagt, du hättest die Variableninhalte (und Lines) überprüfen sollen.
http://www.delphipraxis.net/internal...ct.php?t=47972


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz