Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Einfügen in SynEdit geht nicht (https://www.delphipraxis.net/99224-einfuegen-synedit-geht-nicht.html)

XPLOSIV 8. Sep 2007 22:21


Einfügen in SynEdit geht nicht
 
Also, ich hab nen Button der ein neues TabSheet mit einem SynEdit erstellt, doch da geht die einfügen funktion (auch STRG+V) nicht.

Delphi-Quellcode:
var
  ts: TTabSheet;
  se: TSynEdit;
  fn: TFileName;
begin
  ts := TTabSheet.Create(PageControl1);
  ts.PageControl := PageControl1;
  if fn = ''
    then ts.Caption := Format('Tabelle [%d]', [PageControl1.PageCount])
    else ts.Caption := ExtractFileName(fn);
  ts.Hint := fn;
  se := TSynEdit.Create(ts);
  se.Parent := ts;
  se.Align := alClient;
  se.ActiveLineColor:= $00FFFF80;
  se.Gutter.ShowLineNumbers:= TRUE;
  if fn = ''
    then se.Lines.Clear
    else se.Lines.LoadFromFile(fn);
  Files.AddObject(fn, se);
  PageControl1.ActivePage := ts;
  se.SetFocus;
end;

marabu 9. Sep 2007 07:27

Re: Einfügen in SynEdit geht nicht
 
Guten Morgen,

das SynEdit Control kommt prima mit den ClipBoard-ShortCuts zurecht, wenn du es nur zulassen würdest:

Delphi-Quellcode:
procedure TForm1.Einfgen1Click(Sender: TObject);
begin
  SynEdit.PasteFromClipboard;
end;
Mit diesem Code für dein MenuItem Einfgen1 und die Zuordnung des ShortCut Strg+V hast du effektiv alle Einfüge-Operationen auf deine Komponente SynEdit umgeleitet. Strg+V funktioniert dann auch nicht mehr in den anderen Edit Controls deiner Form.

Es gibt jetzt zwei Wege für dich aus dem Dilemma.

Du schickst die abgefangene Nachricht an das richtige Control weiter:

Delphi-Quellcode:
procedure TForm1.Einfgen1Click(Sender: TObject);
begin
  SendMessage(GetFocus, WM_PASTE, 0, 0);
end;
Oder du fügst die entsprechenden Standardaktionen aus dem Abschnitt Bearbeiten in deine ActionList ein und weist diese Actions deinen entsprechenden MenuItems zu.

Grüße vom marabu

XPLOSIV 9. Sep 2007 09:33

Re: Einfügen in SynEdit geht nicht
 
Danke funtzt prima, doch das Kopieren geht auch nicht, soll ich nen Theard machen oder wirds auch hier beantwortet ?

marabu 9. Sep 2007 10:06

Re: Einfügen in SynEdit geht nicht
 
Mit den anderen ClipBoard-Funktionen ist es das gleiche Problem.

Du musst einfach die Lösung übertragen und anpassen.

XPLOSIV 9. Sep 2007 13:36

Re: Einfügen in SynEdit geht nicht
 
So habs jetzt, doch ich bekomm es noch für alles Markieren und Ausschneiden hin.


Delphi-Quellcode:
SendMessage(GetFocus, WM_SelectAll, 0, 0);
Delphi-Quellcode:
SendMessage(GetFocus, WM_, 0,ClearSelection 0);
Weiß einer Rat ?

marabu 9. Sep 2007 14:30

Re: Einfügen in SynEdit geht nicht
 
Zum "Ausschneiden" verwendest du die Nachricht WM_CUT, aber in deinem Menü habe ich "Markierten Text löschen" gesehen und dazu verwendest du WM_CLEAR. In beiden Fällen wird der markierte Text entfernt, bei WM_CUT aber zusätzlich in die Zwischenablage kopiert.

Hinter "Alles markieren" steht die Message EM_SETSEL, aber leider wird diese Nachricht laut message prefix nur von Edit Controls verstanden - und SynEdit ist kein Edit-Control. Da hilft nur eine Fallunterscheidung:

Delphi-Quellcode:
procedure TForm1.AllesMarkieren1Click(Sender: TObject);
var
  wc: TWinControl;
begin
  wc := FindControl(GetFocus);
  if wc is TSynEdit
    then TSynEdit(wc).SelectAll
    else SendMessage(wc.Handle, EM_SETSEL, 0, -1);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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