![]() |
Behandlung von RETURN im Memo Feld
Hallo,
ich komme einfach nicht drauf. Ich benutze ein Memo Feld bei dem mit CTRL-Enter eine Aktion erfolgreich ausgeführt wird. Wir kann ich verhindern, dass das Drücken von CTRL-Enter einen Wagenrücklauf und Zeilenvorschub erzeugt? Ich habe es probiert mit:
Delphi-Quellcode:
Aber leider ohne Erfolg. Danke.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ADODB, Grids, DBGrids, DB, StdCtrls, StrUtils, Menus, Tabs, DBTables,ShellAPI, ExtCtrls, COMObj, math, ExtDlgs; type TForm1 = class(TForm) Mem_SQL_Input: TMemo; procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var i:integer; begin if (Shift = [ssCtrl]) and (Key = ord(13)) then begin key :=0; showmessage('Crtl-Shift erkannt.'); end; end; procedure TForm1.formcreate(Sender: TObject); begin Mem_SQL_Input.Text:=''; end; end. |
Re: Behandlung von RETURN im Memo Feld
mach das ganze mal im OnKeyPress
|
Re: Behandlung von RETURN im Memo Feld
Hallo, nimm an stelle von 13 "#13"..geht prima ;-)
|
Re: Behandlung von RETURN im Memo Feld
mach das ganze mal im OnKeyPress
-------------------------------- da sagt er, dass die Methode or Property nicht kompatible sind. Das hab ich schon probiert. Hallo, nimm an stelle von 13 "#13"..geht prima Wink --------------------------------------------------- dann muss ich den Datentyp von key ändern. Danach kann ich die procedure nicht mehr als event vom memo auswählen. |
Re: Behandlung von RETURN im Memo Feld
Enter hat im KeyPress, wenn es "normal" gedrückt wird die #13 -> nimmt man Strg dazu kommt eine #10 raus. k.A. ob das ganze noch Nebenwirkungen hat. Bei meinem kurzen Test hat es funktioniert.
Delphi-Quellcode:
procedure TForm12.Memo1KeyPress(Sender: TObject; var Key: Char);
begin if key = #10 then key := #0 end; Zitat:
Da kommt dann etwas was so heißt "Inkompatible Typen Word und Char". Deine KeyDown Methode kannst du dann rausschmeißen. Und nochwas zur Formatierung des Quelltexts: schrecklich! Sähe das so nicht besser aus?
Delphi-Quellcode:
Gruß
procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var i:integer; begin if (Shift = [ssCtrl]) and (Key = ord(13)) then begin key :=0; showmessage('Crtl-Shift erkannt.'); end; end; Reli |
Re: Behandlung von RETURN im Memo Feld
wieso wirdn da ne #10 draus?! kannste das mal bitte näher erklären...
|
Re: Behandlung von RETURN im Memo Feld
Zitat:
Delphi-Quellcode:
:gruebel:
Ord(..)
|
Re: Behandlung von RETURN im Memo Feld
Warum das so implementiert wurde kann ich dir nicht sagen. Ich kann dir nur sagen, dass es in der Windows und Unix Welt unterschiedliche "Zeilenumbrüche" gibt. In der Windowswelt ist es CRLF (Caridge Return Line Feed) also #13#10 -> in der Unix Welt reicht ein Line Feed aus. Scheinbar ist das Tastaturlayout dahingehend angepasst (evtl. nur im Windows?). Mehr kann ich dazu ned sagen und 100% sicher ist die Aussage nicht. Ist halt nur ne Vermutung. :-)
Und wie ich das rausbekommen habe? Debuggen :-) Hups sorry Kaktus das hab ich so ned gedeutet! Gruß Reli |
Re: Behandlung von RETURN im Memo Feld
@Relicted
vielen Dank, dein Vorschlag funktioniert einwandfrei. Woher kann man schon wissen, dass CTRL Enter #10 ergibt :shock: :? Aber gut. Vielen Dank, schönen Feierabend.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ADODB, Grids, DBGrids, DB, StdCtrls, StrUtils, Menus, Tabs, DBTables,ShellAPI, ExtCtrls, COMObj, math, ExtDlgs; type TForm1 = class(TForm) Mem_SQL_Input: TMemo; procedure FormCreate(Sender: TObject); procedure Mem_SQL_InputKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure tform1.Mem_SQL_InputKeyPress(Sender: TObject; var Key: Char); var i:integer; begin if Key = #10 then begin key :=#0; showmessage('Crtl-Shift erkannt.'); end; end; procedure TForm1.formcreate(Sender: TObject); begin Mem_SQL_Input.Text:=''; end; end. |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Delphi-Frage |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 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-2025 by Thomas Breitkreuz