Entwickler-Ecke

Sonstiges (Delphi) - Schleife mit Key funktioniert nicht


florida - Fr 18.06.10 19:21
Titel: Schleife mit Key funktioniert nicht
Wieso funktioniert das eigentlich nicht?

Delphi-Quelltext
1:
2:
3:
4:
 for I := 0 to Memo1.Lines.Count do
 begin
  keybd_event(VK_DOWN,0,0,0);
 end;


der organist - Fr 18.06.10 19:49

Ich glaube, dass du mehr sagen solltest, als "Warum funzt das nicht?" Was genau passiert? Und was willst du erreichen? etc. hast ja schon etwas mehr im Forum geschrieben, weisst doch eigentlich, wie's hier läuft ;)

Gruss, Lukas


icho2099 - Fr 18.06.10 20:03

Vielleicht weil Memo.Lines zwar Count Elemente hat, die aber von 0 bis Count-1 indiziert sind ?


Delphi-Quelltext
1:
2:
3:
4:
 for I := 0 to Memo1.Lines.Count-1 do
 begin
  keybd_event(VK_DOWN,0,0,0);
 end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


elundril - Fr 18.06.10 20:06

Das -1 ist in dem fall egal, da er ja nicht auf das Memo zugreift. -1 müsste nur hinten dran wenn er wirklich dann mit der Laufvariable auf die einzelnen Zeilen zugreifen will.

Am besten wäre es wenn wir warten bis uns der Threadersteller erzählt was er machen will und was derzeit passiert, vielleicht gibts ja ne einfachere Methode oder so.

lg elundril


florida - Fr 18.06.10 20:28

Ich möchte, dass das ganze Memo anhand dieser Schleife durchsucht wird und dabei soll nach jeder Zeile "Pfeil unten" gedrückt werden.


elundril - Fr 18.06.10 20:34

Du weißt das du da nichts durchsuchst, sondern einfach die schleife solange laufen lässt wie die größe des Memos ist? Durchsucht im eigentlichen sinn wird hier nix.

und was hoffst du das Passiert wenn du die Pfeil-Runter-Taste drücken lässt? Wenn der Fokus auf einem Button oder so liegt (weil dort die schleife drin steht) wird gar nix passieren. Deswegen noch mal meine Frage, was soll passieren wenn du das VK_Down losschickst? Soll ein Cursor im Memo eine Zeile runter wandern, oder...?

lg elundril


MaPsTaR - Sa 19.06.10 00:14

Wenn ich ihn richtig verstanden habe sucht er sowas:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
for i := 0 to Memo1.Lines.Count-1 do
begin
  if Memo1.Lines[i] = irgendwas
  then
  //...
end;


Gerd Kayser - Sa 19.06.10 06:01

user profile iconflorida hat folgendes geschrieben Zum zitierten Posting springen:
Wieso funktioniert das eigentlich nicht?


Habt Ihr noch nie eine Schreibmachine gesehen? Wenn man dort eine Taste drückt, dann muß man sie anschließend auch mal wieder loslassen. Bei Keybd_Event ist es genau so.


Delphi-Quelltext
1:
2:
3:
4:
5:
 for I := 0 to Memo1.Lines.Count - 1 do
 begin
  Keybd_Event(VK_DOWN, 000);
  Keybd_Event(VK_DOWN, 0, KeyEventf_KeyUp,0);
 end;


florida - Sa 19.06.10 07:25

Ja, aber ohne for funktioniert es auch, wenn man nur die erste obere Zeile stehen lässt.


Gerd Kayser - Sa 19.06.10 07:43

user profile iconflorida hat folgendes geschrieben Zum zitierten Posting springen:
Ja, aber ohne for funktioniert es auch, wenn man nur die erste obere Zeile stehen lässt.

Eine mit Keybd_Event gedrückte Taste ist auch wieder los zu lassen. Alles andere ist Murks.
http://msdn.microsoft.com/en-us/library/ms646304(VS.85).aspx
Und da steht: KEYEVENTF_KEYUP - If specified, the key is being released. If not specified, the key is being depressed.


ALF - Sa 19.06.10 09:16

user profile iconflorida hat folgendes geschrieben Zum zitierten Posting springen:
Ja, aber ohne for funktioniert es auch, wenn man nur die erste obere Zeile stehen lässt.
ja, aber in einer Schleife nicht!! Ohne Schleife machst Du ja wieder ein Buttonclick z.B. :wink:
Ansonsten musst Du in der Schleife das mit reinnehemen!

Delphi-Quelltext
1:
 Memo1.SetFocus;                    

Um es richtig zu machen nimm einfach dieses:

Delphi-Quelltext
1:
Memo1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);                    

Gruss Alf


Hidden - Sa 19.06.10 11:48

Hi,

Du versuchst vermutlich, den Cursor zu setzen? (vk_DOWN 1x für jede Zeile im Memo)

Sieh' dir mal die Property 'SelStart' von TMemo bzw. TRichEdit an, damit kannst du den Curser direkt setzen! Die Anzahl der Zeichen im Memo erhältst du über Length(Memo1.Text).

lg,