Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247

    [DELPHI] Scorrimento in TMemo

    Salve,

    ho creato un TMemo in un form, con all'interno del testo non modificabile.

    Il testo è piuttosto lungo e quindi bisogna scorrere. Ora, come al solito, il problema è che non funziona bene lo scorrimento con la rotellina del mouse. Infatti, invece di "scendere" lungo la barra di scorrimento, il programma sposta il cursore giù di una riga. Semplicemente assurdo... E' come se in Microsoft Word girando la rotellina del mouse si spostasse il cursore! VVoVe:

    C'è un modo per rimediare a questo difetto?
    E, inoltre, c'è un modo per "fare fuori" il cursore ed evitare che l'utente possa selezionare del testo nel TMemo?

    Grazie in anticipo

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Riesci sempre a fare paragoni improponibili: TMemo vs WORD.

    La mia rotellina del mouse si comporta bene... non è che magari è una errata impostazione sul tuo sistema? :master:

    Per il cursore, leggi qui.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Paragoni improponibili? Lo so, è la mia specialità

    Comunque, ho provato a fare un programma di prova (una sola form con all'interno un Tmemo) ed effettivamente si comportava bene.

    Allora mi sono scervellato per riuscire a capire il perché di quell'assurdo funzionamento all'interno del mio programma. Poi ho capito.

    Si tratta di un TApplicationEvents che migliora le prestazioni della rotellina di scorrimento dentro una TDBGrid. Ma, a quanto pare, peggiora le prestazioni della rotellina all'interno di un TMemo.

    codice:
    procedure TFormPrincipale.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
    var
        i: SmallInt;
    begin
        if Msg.message = WM_MOUSEWHEEL then
          begin
            Msg.message := WM_KEYDOWN;
            Msg.lParam := 0;
            i := HiWord(Msg.wParam);
            if i > 0 then Msg.wParam := VK_UP
            else Msg.wParam := VK_DOWN;
            Handled := False;
          end;
    end;
    Mea culpa, quindi

    Ora il problema è: come faccio a modificare quella porzione di codice in modo che non vada ad intaccare il corretto funzionamento del TMemo?

    Ancora grazie

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Ho usato anche io quel codice per trasformare "rotelline" in tasti su e giù, incontrando poi il problema che hai evidenziato.

    Per risolvere, ho creato un discendente della DBGrid (e di tanti altri controlli data aware affetti dal problema) e ho inserito al loro interno la gestione della rotellina, in modo che funzioni correttamente solo quando riferita a tali controlli e non all'applicazione; infatti, gestito a livello di applicazione rende malfunzionanti controlli che già lo sono, come il TreeView ad esempio.

    In Delphi 2006 esiste il supporto completo, esteso e personalizzato ad IntelliMouse, quindi il problema è stato risolto, superato e arricchito.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Grazie delle indicazioni

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.