Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigene Konsole: Problem bei der Eingabe (https://www.delphipraxis.net/67769-eigene-konsole-problem-bei-der-eingabe.html)

Kill0r 19. Apr 2006 18:01


Eigene Konsole: Problem bei der Eingabe
 
Hi ich bins mal wieder :-D
Es geht mal wieder um ein eher gedankliches Problem :)
Es geht um folgendes:
Ich bin daran ein Matrix-like Chat zu schreiben, also schwarzer Hintergrund, Vollbild und grüne Schrift. (NEIN, das Problem ist nicht wie bei veilenm anderen die Verbindung, die funktioniert perfekt :wink: )
Soweit kein Problem, ich habe das mit einem grossen Memo das den ganzen Bildschirm ausfüllt gelöst.
Ich übernehme die Eingabe auch selber, damit ich besser eingreifen kann (z.B. das man nicht schon stehender Text einfach löschen kann)
Ausserdem lasse ich den Text "hinschreiben", also so wie man es vielleicht aus diversen Hackerfilmen oder so kennt, also der Text nicht sofort erscheint sondern Zeichen für Zeichen.
Hier mal veranschaulicht in einem Video: Matrix Chat

Das Schreiben des Textes geschieht mittels eines Timers, der Code dazu:
Delphi-Quellcode:
procedure TfrmChat.timWriteTimer(Sender: TObject);
var
  DelCursor: string;
begin
  if Length(ToWrite) > 0 then
  begin
    DelCursor := memChat.Lines.Text;
    if Phase < 4 then
    begin
      SetLength(DelCursor,Length(DelCursor)-1);
    end
    else
    begin
      SetLength(DelCursor,Length(DelCursor)-3);
    end;
    memChat.Lines.Text := DelCursor;
    if Phase < 4 then
    begin
      memChat.Lines.Text := memChat.Lines.Text + Copy(ToWrite,0,1)+#95;
    end
    else
    begin
      memChat.Lines.Text := memChat.Lines.Text + Copy(ToWrite,0,1)+#95+#10;
    end;
    Delete(ToWrite,1,1);
    CanType := false;
  end
  else
  begin
    CanType := true;
  end;
end;
ToWrite ist ein String der den Text enthält, der geschrieben werden soll, es wird immer jeweils ein Zeichen am Anfang gelöscht bis er leer ist.
Wenn CanType = true ist dann kann Text eingegeben werden, ansonsten nicht.
Der eingegebene Text wird in der Variable Input gespeichert, so ist es einfacher für mich den Text auszulesen weil ich nix parsen muss :wink:
Ich würde noch gerne den Quellcode von der Tastenabfrage hier rein stellen aber ich denke er ist zu gross deshalb hier nur einen Link ohne Highlighting: Quellcode von FormKeyPress
Falls dennoch gewünscht wird ihn hier rein zu stellen und auch die Moderatoren einverstanden sind, dann wedre ich das tun.

So nun zum Problem:
Ich will während oben irgendwelcher Text hingeschrieben wird (von einem anderen Chatpartner zum Beispiel) dass man trotzdem eine Zeile weiter unten normal weiterschreiben kann.
Ich kanns mir gedanklich einfach nicht vorstellen wie ich das bewerkstelligen soll :cry:

Ich weiss es war jetzt ziemlich viel Text, tut mir auch wirklich leid aber ich konnte mich nicht kürzer fassen damit ihr versteht was ich machen will. Falls irgendwelche Fragen bestehen einfach stellen.

So, ich danke hier schon mal fürs Durchlesen und ich hoffe auf eure Hilfe :-D

Cu
Kill0r

emteg 19. Apr 2006 18:53

Re: Eigene Konsole: Problem bei der Eingabe
 
Unsichtbar!
Wie wärs mit einem typen, der den zu schreibenen text speichert, die zeile, in der er ausgegeben wird/werden soll und was du sonst noch so brauchst. Dann machst du dir ein dynamisches array von diesem type. In deinem timer event machst du ne schleife durch den array und machst für jeden eintrag normal weiter.

Ich hoffe mal, dass ich dich richtig verstanden habe

Edit: Der type könnte dann ungefähr so aussehen:

type TMatrixZeile=record
FullText: string;
Line: integer;
Progress: integer;
Done: boolean;
end;

var MatrixZeilen: array of TMatrixZeile;


[Ich hab dich falsch verstanden - ich dachte du wolltest wissen, wie man mehrere zeilen gleichzeitig so ausgeben kann]

inherited 19. Apr 2006 20:42

Re: Eigene Konsole: Problem bei der Eingabe
 
Oder du schreibst den Text in schwarz hin und lässt ihn mit nem extra timer schritt für schritt clLime werden

Nils_13 19. Apr 2006 20:47

Re: Eigene Konsole: Problem bei der Eingabe
 
Inherited hat vollkommen recht, einfach alles von Unsichtbar zu clLime oder so überlaufen lassen, dabei können die Hex-Farben und RGB-Farben helfen ($FARBCODE, RGB(0,0,0)).

Kill0r 19. Apr 2006 21:39

Re: Eigene Konsole: Problem bei der Eingabe
 
Hmmm... Ich kann euch nicht ganz folgen.
Ich sehe den Sinn nicht was das bringen soll :stupid:
Könnt ihr mir das vielleicht ein bisschen näher erläutern? :oops:

Cu
Kill0r

Mackhack 19. Apr 2006 22:04

Re: Eigene Konsole: Problem bei der Eingabe
 
Ich denke sie wollen damit sagen dass du praktisch die Buchstaben 'in'faden lassen sollst. Also sie sind schon da (unsichtbar) und werden dann sichtbar Buchstabe fuer Buchstabe!

mr47 19. Apr 2006 22:07

Re: Eigene Konsole: Problem bei der Eingabe
 
Zitat:

Zitat von Mackhack
Ich denke sie wollen damit sagen dass du praktisch die Buchstaben 'in'faden lassen sollst. Also sie sind schon da (unsichtbar) und werden dann sichtbar Buchstabe fuer Buchstabe!

Exakt. Das hat u.a. den Vorteil, dass du sie nicht kompliziert zwischenspeichern musst!

Kill0r 19. Apr 2006 22:11

Re: Eigene Konsole: Problem bei der Eingabe
 
Ja, soweit verstehe ich das schon ;)
Aber ich sehe nicht den Sinn darin weil ja das Problem ja immer noch besteht oder? :?
Ich habe da einfach einen Knopf in meiner Logik :(
Naja ich habe gerade eine Idee und versuch sie auszuarbeiten mal gucken ob es klappt :D
Könnt ruhig weiter Vorschläge oder Ideen posten, freue mich für jede Antwort ;)

Cu
Kill0r

mr47 19. Apr 2006 22:35

Re: Eigene Konsole: Problem bei der Eingabe
 
Kannst ja einfach ein schwarzes Edit-Feld über die unterste Zeile legen...

Kill0r 21. Apr 2006 16:07

Re: Eigene Konsole: Problem bei der Eingabe
 
Hmm... nee, da ist mir eine elegantere Lösung lieber, auch wenn sie schlussendlich komplizierter ist ;)
Naja egal, ich hab jedenfalls selber eine Lösung ausgearbeitet und sie scheint zu funktionieren :D
Trotzdem vielen Dank für eure Hilfe :hello:

Cu
Kill0r


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr.

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