Einzelnen Beitrag anzeigen

Kill0r

Registriert seit: 5. Jun 2005
Ort: Zürich
50 Beiträge
 
Delphi 2010 Professional
 
#6

Re: ReadLn() für Fensterprogramme?

  Alt 13. Aug 2008, 15:44
Hey
Danke für eure Bemühungen, aber ich glaube nicht, dass mir das wirklich weiterhelfen wird.
Meine aktuelle Prozedur (mit eingefügtem Application.ProcessMessages) sieht so aus:
Delphi-Quellcode:
function TUser.WaitForUserInput: String;
begin
  InputString := '';
  NextKey := '';
  EnableInput;

  while InputEnabled do
  begin
    Application.ProcessMessages;
    if NextKey = #8 then
    begin
      SetLength(InputString, Length(InputString)-1);
      DrawInput;
      NextKey := '';
    end
    else
    if not (NextKey = '') then
    begin
      InputString := InputString + NextKey;
      DrawInput;
      NextKey := '';
    end;
  end;
  
  Result := InputString;
end;
Hatte Application.ProcessMessages schon mal drin, aber dann rattert er einfach durch (führt AskServerOrClient bereits aus) und bleibt nicht stehen. Ausserdem scheint mir das nicht die optimale Lösung.

Hier noch die FormKeyPress Prozedur:
Delphi-Quellcode:
procedure TfrmChat.FormKeyPress(Sender: TObject; var Key: Char);
begin
  User.CheckKey(Key);
end;
Und noch die User.CheckKey Prozedur:
Delphi-Quellcode:
procedure TUser.CheckKey(Key: Char);
begin
  if InputEnabled then
  begin
    if Key = #13 then
    begin
      User.DisableInput;
    end
    else
    begin
      NextKey := Key;
    end;
  end;
end;
Ich nehme mir mal das Problem mit dem Durchlaufen vor, zumindest das sollte ja nicht passieren.
Solltet ihr noch irgendwelchen Code brauchen, sagt Bescheid. Dies ist zumindest meiner Ansicht nach der wichtigste Teil.

Ausserdem: Gibt es vielleicht eine Art getch(); Befehl um eine Taste abzufragen für Delphi? Bin bei meiner Google Suche darauf gestossen, leider gibts den Befehl anscheinend nur in C++. GetAsyncKeyState bringt mich nicht wirklich weiter, alle Tasten per Polling abzufragen ist nicht gerade besser Dann hätte ich eben eine Idee um das Problem mit einem Thread zu lösen.

Cu
Kill0r
  Mit Zitat antworten Zitat