Newsgroup: it.comp.lang.pascal
Titolo: Editare i caratteri DOS!!!

A qualcuno piacerebbe poter cambiare i caratteri del dos? sii?
ebbene sto realizzando un programma capace di fare ciņ ma per il mio fine mi
servirebbe una procedura che riconosca il doppio click del mouse.
A chi mi aiuterą darņ il sorgente in "OMAGGIO".
Fatevi sentire!!
f...@eikonos.it

...

Con la seguente funzione leggi lo stato dei pulsanti del mouse:
Function Mouse_Button:word; Assembler;
Asm
   mov ax, 3
   int 33h
   mov ax, bx
End;
Per riconoscere il doppio click, puoi utilizzare questa chiamata all'int
33h:
INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
        AX = 000Ch
        CX = call mask
             bit 0 call if mouse moves
             bit 1 call if left button pressed
             bit 2 call if left button released
             bit 3 call if right button pressed
             bit 4 call if right button released
             bit 5 call if middle button pressed (Mouse Systems/Logitech
mouse)
             bit 6 call if middle button released (Mouse Sys/Logitech mouse)
        ES:DX -> FAR routine
Notes:  when the subroutine is called, it is passed the following values:
          AX = condition mask (same bit assignments as call mask)
          BX = button state
          CX = cursor column
          DX = cursor row
          SI = horizontal mickey count
          DI = vertical mickey count
        some versions of the Microsoft documentation incorrectly state that
CX
          bit 0 means call if mouse cursor moves, and swap the meanings of
SI
          and DI
Puoi fare qualcosa del genere:
const
    max_tick = 5; { 5 tick = 5*18 ms = 90ms }
    double_click_flag: boolean = false;
    last_click   : longint = 0;
procedure left_click; far;
var
    tick_elapsed,
    now                 : longint;
begin
    now := MemL[0:$46C]; { contatore del timer di sistema }
    tick_elapsed := now-last_click;
    double_click_flag := time_elapsed < max_tick;
    last_click := now;
end;
function double_click: boolean;
begin
    double_click := double_click_flag;
    double_click_flag := false;
end;
begin
    ...
    ...
    asm
        mov ax, seg left_click
        mov es, ax
        mov dx, offset left_click        { [es:dx] -> left_click }
        mov ax, 000Ch
        mov cx, 1 shl 1 { bit 1 settato => pulsante sinistro premuto }
        int 33h
    end;
    ...
    ...
    repeat
        ...
        if double_click then
            begin
                ...
            end;
        ...
    until fine_programma;
    ...
    ...
end.
Nota: controlla *bene* il codice perche' non l'ho provato; imposta un valore
decente per max_tick; salva i registri all'ingresso di left_click e
ripristinali in uscita; verifica che left_click venga chiamata 1 sola volta
anche se il pulsante sinistro rimane premuto.
Ciao!
Simone.

    max_tick = 5; { 5 tick = 5*18 ms = 90ms }
Scusa, ma il periodo non e' 18ms ma 55ms... :)
Ciao.
Simone.


http://www.penguinpowered.com/~ecesena
La conoscenza non e' cultura.  Il campo della cultura comincia quando si
e' dimenticato Non- so- che- libro.
		-- Pound

Sentite belli ci ho ripensato il doppio click mi serviva X realizzare (in
modalità grafica standard del TP), una maschera del tipo apri/salva con nome
di Win X ora il programma funziona ma con le suddette schermate in testo
(coltellata!!!), qui mi serve parecchio aiuto....
Sta a voi
Saluti
f...@eikonos.it