Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TComboBox - ReadOnly - "CopyToClipboard" (https://www.delphipraxis.net/104810-tcombobox-readonly-copytoclipboard.html)

Tyrael Y. 11. Dez 2007 08:25


TComboBox - ReadOnly - "CopyToClipboard"
 
Hallo zusammen,

ich habe einige TComboxen, die ich auf den Style csDropDownList gesetzt habe, um sie
nicht veränderbar zu machen. Jetzt wäre es schön, wenn man den ausgewählten Text
mittels STRG + C kopieren könnte.

Eine TComboBox ist ja eine Kombination aus einem Edit und einer TextBox.
Kann ich irgendwie auf das Edit zugreifen, um zB. CopyToClipBoard aufrufen zu können?

Eine "dumme" Variante wäre, ein unsichtbares Edit zu nehmen und beim Ereignis
OnKeyDown der TComboBox den selektierten Text in das edit zu schreiben und vom
Edit die Methode CopyToClipboard aufzurufen. Würde funktionieren wäre aber sowas von
Quick and Dirty....

Einer ne Idee?

DeddyH 11. Dez 2007 08:56

Re: TComboBox - ReadOnly - "CopyToClipboard"
 
Vielleicht so:
Delphi-Quellcode:
uses ClipBrd;

procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = Ord('C')) and (Shift = [ssCtrl]) then
    ClipBoard.AsText := ComboBox1.Items[ComboBox1.ItemIndex];
end;

Tyrael Y. 11. Dez 2007 09:13

Re: TComboBox - ReadOnly - "CopyToClipboard"
 
21 ist nur die halbe Antwort bzw.
sehr schön, das Kopieren funktioniert wunderbar....muss nur noch rausfinden welche Eigenschaft dafür sorgt, daß bei Tastendruck zu dem ersten Eintrag gesprungen wird, der dem gedrückten Buchstaben entspricht....AutoComplete scheint es, wie vermutet, nicht zu sein.

Edit: ...möchte damit sagen, daß bei STRG + C zu dem ersten Eintrag mit dem Anfangsbuchstaben c gesprungen wird, was nicht ok ist

DeddyH 11. Dez 2007 10:04

Re: TComboBox - ReadOnly - "CopyToClipboard"
 
Das weiß ich im Moment leider auch nicht, und da ich hier gerade nur Delphi 5 zur Verfügung habe, kann ich auch nicht nachsehen.

himitsu 11. Dez 2007 11:30

Re: TComboBox - ReadOnly - "CopyToClipboard"
 
vermutlich reagiert die ComboBox nicht auf Strg und wertet nur das C ... spring also zu "C".

wenn du in OnKeyDown und Co. den Wert nicht zurücksetzt, dann verarbeitet die VCL die Eingabe ebenfalls nochmal.

Code:
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = Ord('C')) and (Shift = [ssCtrl]) then
  begin
    ClipBoard.AsText := ComboBox1.Items[ComboBox1.ItemIndex];
    [color=red][b]Key := 0;[/b][/color]
  end;
end;

Tyrael Y. 11. Dez 2007 11:36

Re: TComboBox - ReadOnly - "CopyToClipboard"
 
Tjo hätte ich auch gedacht himitsu, war der 1.Versuch von mir, leider hilft es nicht

So sah es bei mir aus.

Delphi-Quellcode:
procedure TMainForm.DoOnComboBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Sender is TComboBox then
  begin
    if (Shift = [ssCtrl]) and (Key = Ord('C')) then
    begin
      ClipBoard.AsText := TComboBox(Sender).Items[TComboBox(Sender).ItemIndex];
      Key := 0;
    end;
  end;
end;
...leider reagiert es dann immer noch auf das C

raiguen 11. Dez 2007 12:25

Re: TComboBox - ReadOnly - "CopyToClipboard"
 
Moin :) Wie schon festgestellt, reagiert die ComboBox nicht so wie gewünscht...
Aber wie wäre es, wenn du der ComboBox ein PopUpMenu spendierst mit nur einem einzigen Menupunkt -> Kopie in Zwischenablage z.B. :?: Wäre doch noch eine brauchbare/vertretbare Lösung :wink:

Tyrael Y. 11. Dez 2007 12:56

Re: TComboBox - ReadOnly - "CopyToClipboard"
 
Naja natürlich ohne Probleme und schnell machbar.
Die Kunden sind aber daran gewöhnt über STRG + C diese Inhalte zu kopieren.
Ein PopUp-Menü könnte man zusätzlich machen, aber der ShortCut sollte trotzdem möglich sein.

Ich muss mich grad mit anderen Sachen rumschlagen.
Dieses Problem nehme ich Morgen oder so in Angriff...es wird schon irgendwie gehen...müssen ^^

Tyrael Y. 11. Dez 2007 14:59

Re: TComboBox - ReadOnly - "CopyToClipboard"
 
Ich habs vorerst folgendermassebn gelöst.

Delphi-Quellcode:
procedure TMainForm.DoOnComboBoxKeyPress(Sender: TObject; var Key: Char);
begin
  if Sender is TComboBox then
  begin
    Key := #0;
  end;
end;
Das OnKeyDown benutze ich wie oben angegeben und im OnKeyPress ignoriere ich die Tastatureingabe. Da ich das OnKeyPress anderweitig nicht brauche, ist diese Lösung für mich in Ordnung.

himitsu 11. Dez 2007 15:14

Re: TComboBox - ReadOnly - "CopyToClipboard"
 
dann reagiert die doch auf keine Tastatureingaben mehr(?).

und wie sieht es aus, wenn du auch noch auf das Loslassen der Tasten reagierst?
Delphi-Quellcode:
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = Ord('C')) and (Shift = [ssCtrl]) then
  begin
    ClipBoard.AsText := ComboBox1.Items[ComboBox1.ItemIndex];
    Key := 0;
  end;
end;

procedure TForm1.ComboBox1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = Ord('C')) and (Shift = [ssCtrl]) then
    Key := 0;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr.
Seite 1 von 2  1 2      

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