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/)
-   -   Behandlung von RETURN im Memo Feld (https://www.delphipraxis.net/117401-behandlung-von-return-im-memo-feld.html)

raena 17. Jul 2008 14:56


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:
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.
Aber leider ohne Erfolg. Danke.

Butch87 17. Jul 2008 15:01

Re: Behandlung von RETURN im Memo Feld
 
mach das ganze mal im OnKeyPress

Der.Kaktus 17. Jul 2008 15:02

Re: Behandlung von RETURN im Memo Feld
 
Hallo, nimm an stelle von 13 "#13"..geht prima ;-)

raena 17. Jul 2008 15:09

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.

Relicted 17. Jul 2008 15:10

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:

Zitat von Der.Kaktus
Hallo, nimm an stelle von 13 "#13"..geht prima ;-)

Schonmal nem Word ne #13 zugewiesen? :-)
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:
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;
Gruß
Reli

Butch87 17. Jul 2008 15:15

Re: Behandlung von RETURN im Memo Feld
 
wieso wirdn da ne #10 draus?! kannste das mal bitte näher erklären...

Der.Kaktus 17. Jul 2008 15:18

Re: Behandlung von RETURN im Memo Feld
 
Zitat:

Zitat von Reli
...
Zitat:

Zitat von Der.Kaktus
Hallo, nimm an stelle von 13 "#13"..geht prima ;-)

Schonmal nem Word ne #13 zugewiesen? :-)
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!
...


Gruß
Reli

Ich schrieb "#13" als Ersatz fuer 13 im
Delphi-Quellcode:
 Ord(..)
:gruebel:

Relicted 17. Jul 2008 15:23

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

raena 17. Jul 2008 15:28

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 17. Jul 2008 16:35

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 10:08 Uhr.

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