Results 1 to 8 of 8

Thread: Verwijderen van een woord voor of achter de cursor bij CTRL Backspace of CTRL Delete

  1. #1

    Verwijderen van een woord voor of achter de cursor bij CTRL Backspace of CTRL Delete

    Hoi,

    Ik heb een vraag over de sneltoetsen Ctrl + Backspace en Ctrl + Delete. Als ik in een richedit box deze sneltoetsen gebruik werken zoals verwacht. Er wordt een woord verwijdert voor of achter de cursor pos.

    Nu wil ik ditzelfde gedrag bij een maskedit, memo, en editbox. Weet iemand een oplossing?
    Groeten,

    Ralph

  2. #2
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Maak gebruik van de OnKeydown of OnKeyUp event. Deze werken alleen als de Keypreview van je form op true staat
    Delphi is great. Lazarus is more powerfull

  3. #3
    Dat doe ik al. Maar toch bedankt

    Ik heb na wat zoekwerk gevonden dat een richedit(windows) een EM_FINDWORDBREAK function heeft. Deze geeft me de positie van het woord links of rechts. Voor een maskedit, memo, en editbox zijn er geen Windows functies.
    Groeten,

    Ralph

  4. #4
    Zoek de eerste spatie op (voor of achter de cursor) en verwijder alles tot daar. Je kan ook ook een TRichEdit gebruiken in de plaats van een TEdit of TMemo, een TMaskEdit zal iets anders zijn.
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  5. #5
    Het is toch niet de bedoeling dat ik het wiel opnieuw hoef uit te vinden. Ik heb wel zo'n constructie gemaakt. Ik wil eigenlijk de Perform(EM_FINDWORDBREAK,WB_LEFT,Richedit1.SelStar t) maar dan voor de editbox, memo, maskedit enz..
    Groeten,

    Ralph

  6. #6
    Tja, dan moet je die zelf maken, of op zoek naar vervangingen van of uitbreidingen op TEdit en TMemo. Deze controls ondersteunen van zichzelf deze messages niet. Daarvoor heb je een 'rijker' edit control nodig...
    1+1=b

  7. #7
    Die zijn overigens niet zo lastig. Klein testje leert dat het vanzelf werkt als je een klein stukje uit de RichEdit kopieert.
    Zet dit boven je form:
    Delphi Code:
    1. type
    2.   TMemo = class(StdCtrls.TMemo)
    3.     procedure CreateParams(var Params: TCreateParams); override;
    4.   end;
    5.  
    6.   TForm1 = ....
    Kopieer dan de CreateParams method uit TRichEdit:
    Delphi Code:
    1. var
    2.   FRichEditModule: THandle;
    3.  
    4. procedure TMemo.CreateParams(var Params: TCreateParams);
    5. const
    6.   RichEditModuleName = 'RICHED32.DLL';
    7.   HideScrollBars: array[Boolean] of DWORD = (ES_DISABLENOSCROLL, 0);
    8.   HideSelections: array[Boolean] of DWORD = (ES_NOHIDESEL, 0);
    9. begin
    10.   if FRichEditModule = 0 then
    11.   begin
    12.     FRichEditModule := LoadLibrary(RichEditModuleName);
    13.     if FRichEditModule <= HINSTANCE_ERROR then FRichEditModule := 0;
    14.   end;
    15.   inherited CreateParams(Params);
    16.   CreateSubClass(Params, 'RICHEDIT');
    17.   with Params do
    18.   begin
    19.     Style := Style or HideScrollBars[False{FHideScrollBars heb ik niet, is property}] or
    20.       HideSelections[HideSelection];
    21.     WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW);
    22.   end;
    23. end;
    En tot ook mijn niet geringe verbazing kun je dan gewoon met Ctrl+Backspace woorden weghalen in een gewone memo. Netter is het natuurlijk om deze speciale memo een andere naam te geven en te registreren als component.
    1+1=b

  8. #8
    Bedankt. Ik ga kijken voor er een component(en) van te maken dat is inderdaad beter.
    Groeten,

    Ralph

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •