CM_DIALOGCHAR unimplemented

Rund um die LCL und andere Komponenten
Antworten
siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

CM_DIALOGCHAR unimplemented

Beitrag von siro »

Einen schönen guten Morgen zusammen,

Ich möchte meiner Buttonkomponente Tastenreaktionen beibringen und das ging in Delphi 6 auch schon.
Jetzt musste ich feststellen, das in Lazarus meine Methode:

Code: Alles auswählen

procedure CMDialogChar (var Message: TCMDialogChar); message CM_DIALOGCHAR;


garnicht aufgerufen wird.
Nach etwas suchen habe ich dann dies gefunden in der Datei controlconsts.inc

Code: Alles auswählen

CM_DIALOGKEY = CM_BASE + 5 unimplemented;


Wie darf ich das denn interpretieren ?
oder anders ausgedrückt, wie bekomme ich meine Funktionalität in Lazarus hin ?

Ihr habt da sicher schon eine Lösung parat, die ihr mir unbedingt mitteilen wollt. :wink:

Vielen Dank schonmal im voraus
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: CM_DIALOGCHAR unimplemented

Beitrag von theo »


wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: CM_DIALOGCHAR unimplemented

Beitrag von wp_xyz »

Du müsstest näher spezifizieren, was du mit "möchte meiner Buttonkomponente Tastenreaktionen beibringen" genau meinst. Reaktion auf einen Hotkey? Geht schon, wenn du im Caption-Text ein & vor den entsprechenden Buchstaben schreibst. Reaktion auf ENTER? Geht schon, wenn der Button Default=true hat. Reaktion auf ESC? Geht auch, wenn Cancel=true.

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: CM_DIALOGCHAR unimplemented

Beitrag von siro »

Ersteinmal Danke für eure Rückmeldungen.

Ein Bild sagt mehr als 1000 Worte.
Oktave_01.jpg
Oktave_01.jpg (8.72 KiB) 1323 mal betrachtet


Meine Tasten sollen mit dem entsprechenden Buchstaben ausgelöst werden OHNE das zusätzlich noch die ALT Taste gedrückt werden muss.

Dafür hatte ich damals in Delphi die entsprechende Message abgefangen.
Mir ist irgendwie nicht klar, warum es das in Lazarus nicht gibt.
aber ich vermute mal das hängt mit dem Plattformübergreifenden zusammen.


Code: Alles auswählen

{ prueft "Caption" ob sich dort ein "&" Zeichen befindet und reagiert mit }
{ entsprechendem Tastendruck darauf. }
procedure TUniTaste.CMDialogChar(var Message: TCMDialogChar);
begin
  if IsAccel(CharCode, Caption) and Enabled then....
end;
 
 
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: CM_DIALOGCHAR unimplemented

Beitrag von Mathias »

Dies ist auch noch ein Lösungsweg.

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview := True;
  Button1.Caption := 'A';
  Button2.Caption := 'B';
end;
 
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
  case UpCase(Key) of
    'A': begin
      Button1.Click;
    end;
    'B': begin
      Button2.Click;
    end;
  end;
end;
 
procedure TForm1.ButtonClick(Sender: TObject);
begin
  case TButton(Sender).Caption of
    'A': begin
      Color := clRed;
    end;
    'B': begin
      Color := clGreen;
    end;
  end
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: CM_DIALOGCHAR unimplemented

Beitrag von siro »

Danke Dir Mathias,
der Lösungsweg ist funktional und erstmal so ausreichend.
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: CM_DIALOGCHAR unimplemented

Beitrag von Mathias »

Noch ein Tip, erzeuge die Buttons dynamisch, dann hast du es viel einfacher, wen du was ändern willst.
Willst du zB. die Button grösser haben, dann musst du es nur einmal ändern, ansonsten zig mal.
Auch das Click-Ereigniss muss dann nur einem geschrieben werden. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten