Dezactivați temporar mouse-ul

Dezactivați temporar mouse-ul

Dragi maeștri! Sarcina este să dezactivați temporar mouse-ul (împiedicați componentele programului să accepte mesajul pe care este apăsat butonul mouse-ului) sau chiar să îl scoateți de pe ecran și apoi să îl porniți. Faptul este că am patru butoane pe formular, când fac clic pe una dintre ele, ar trebui să se efectueze o anumită acțiune, deci dacă utilizatorul apasă un alt buton pe formular în timp ce execută această acțiune, atunci va fi unul mare. ) Cum aș putea rezolva această problemă? Nu poate fi la fel de radical ca dezactivarea mouse-ului?







Și imaginați-vă că nu fac clic pe buton cu mouse-ul, dar cu ajutorul lui Claudia.

> Cum ați rezolva această problemă?

.Activat - pentru asta este destinat.

Iată un citat (dar recomandat în programe fără "glitches"!)

Activează și dezactivează dispozitivele I / O din program pe Delphi

Uneori este posibil să fie necesar să opriți dispozitivul de introducere a tastaturii și mouse-ul pentru un timp. De exemplu, este o idee bună să faceți acest lucru în timp ce executați codul de protecție la copiere, în jocuri sau ca o "pedeapsă" atunci când programul începe după expirarea utilizării gratuite. Cu toate acestea, cea mai bună utilizare a acestuia este dezactivarea tastaturii și a mouse-ului pe durata demonstrației, pe baza redării mișcărilor mouse-ului înregistrate și a intrării de la tastatură (vezi acest lucru într-o secțiune separată a acestei cărți). Acest lucru se face cu API-ul:
EnableHadwareInput (Enable: boolean): boolean;
Activați - starea necesară a dispozitivelor de intrare (True - activată, falsă - dezactivată). Dacă intrarea este blocată, aceasta poate fi deblocată manual - apăsați Ctrl + Alt + Del, când apare meniul "Shutdown", intrarea este deblocată.

> Acest lucru se face cu API-ul:
> EnableHadwareInput (Enable: boolean): boolean;

Gee ;-))
Sub condiția ignorării unor lucruri precum Button.Enabled: = false;

> Gee ;-))
> Sub condiția ignorării unor lucruri precum Button.Enabled: = false;

dar dacă brusc butonul lor este sute. ))
Puteți să le dezactivați prin ComponentCount.
(și pe lângă buton, utilizatorul poate dori să: \\)

> Am patru butoane pe formular, când fac clic pe unul dintre ele
> se iau unele acțiuni, deci dacă utilizatorul apasă
> în timpul executării acestei acțiuni un alt buton din formular, va fi
> mare ge. )

Nu. Marele ge. Aici puteți evita utilizarea numai a dispozitivelor speciale recomandate de Vector.


> Și dacă brusc butonul lor este sute. ))

a) Form.Enabled: = False;
b) ProgressForm.ShowModal;

Ei bine, am scris, desigur, acest lucru:
var
butonul: Array [1..4] din TPanel; // o serie de panouri de angajați la mine cu butoane
.

începe
pentru i: = 1 la 4 nu # xA0; butonul [i] .Enabled: = false; // opriți-le imediat după ce faceți clic pe unul dintre ele (după un anumit timp, l-am întoarce).

Dar întreaga problemă este faptul că apăsările de la tastatură sunt amintite! Și după ce faceți clic pe orice panou de butoane, deși este dezactivat, atunci când îl porniți din nou, Windows procesează codul trimis la el! Asta e problema.

>> Acest lucru se face cu API-ul:
>> EnableHadwareInput (Enable: boolean): boolean;

Și este posibil mai mult în detaliu? Cum de a face acest lucru (cu un exemplu) în ajutorul Delphi nu a găsit nimic.

încercați după asta
pentru i: = 1 la 4 nu # xA0; butonul [i] .Enabled: = false;
face-o
Application.ProcessMessages;

IMHO, ar trebui să vă ajute

utilizări
# xA0; Windows, Mesaje, SysUtils, Variante, Clase, Grafică, Controale, Formulare,
# xA0; Dialoguri, ExtCtrls, StdCtrls;

tip
# xA0; TForm1 = clasa (TForm)
# xA0; # xA0; Panel1: TPanel;
# xA0; # xA0; Panel2: TPanel;

# xA0; # xA0; Procedură Panel1Click (Expeditor: TObject);






# xA0; # xA0; procedura Panel2Click (expeditor: TObject);
# xA0; privat
# xA0; # xA0;
# xA0; public
# xA0; # xA0;
# xA0; sfârșitul;

var
# xA0; Form1: TForm1;
# xA0; GlobalPerm: Boolean = Fals;
punerea în aplicare

procedura TForm1.Panel1Click (expeditor: TObject);
începe
GlobalPerem: = Adevărat;
// și tot ce trebuie făcut, faceți clic pe acest panou
se încheie;

procedura TForm1.Panel2Click (expeditor: TObject);
începe
dacă GlobalPerem atunci
începe
ShowMessage ("GE");
// și tot ce trebuie făcut, faceți clic pe acest panou
se încheie;
se încheie;

încă există Tag "și și caz de |
și zero pentru procedurile de verificare a condițiilor (și fără ele în nici un fel în această formulare a problemei)
PS. Ai fi monitorizat

procedura TForm1.Panel1Click (expeditor: TObject);
începe
începeți toate acțiunile și apoi
GlobalPerem: = Adevărat;
se încheie;

pentru I: = 0 pentru ControlCount -1
dacă controlul [I] este TPanel atunci
TPanel (Controale [I]) Enabled: = False;

>> Garfunkel # xA0; (23.10.04 23:26) [9]

>> Ei bine, am scris, desigur, acest lucru:
>> var
>> butonul: Array [1..4] din TPanel; // un panou de angajați pentru mine >> butoane
>>.

>> începe
>> pentru i: = 1 la 4 nu # xA0; butonul [i] .Enabled: = false; // dezactivați-le >> imediat după ce faceți clic pe una dintre ele (după o perioadă de 1 sec. >> o repornez).

>> Dar tocmai asta este faptul că apăsările de la tastatură sunt amintite! Și după >> apăsarea mouse-ului pe orice panou de butoane, deși este dezactivat, când >> inversul includerii, Windows procesează codul trimis la el! Aici >> în ce probleme.

Dacă ați fi eneleblilis (îmi cer scuze pentru cuvânt), atunci nimic nu le-ar trimite Windows atunci
Și dacă sunt patru, nu aș declara niciun fel de mănunchiuri (IMHO, ci pentru gust și culoare).

Fetele sunt mai deștepte decât băieții :-)
Aceasta ar fi devenit veche

Puteți seta cronometrul și puteți trimite în permanență SetCursorPos (0,0);

Se pare că postările pe care nu le-ați citit
Undeva unde am văzut cum să apăsați programabil Resetare

Fată rea
> Dacă ați fi eneleblilis (îmi cer scuze pentru cuvânt), atunci nimic nu ar fi el
> Windows nu a trimis apoi
> Și dacă sunt patru, nu aș declara niciun fel de tablouri (IMHO, dar pe
> gust și culoare. )
Pur și simplu, este mai convenabil pentru mine să plec de la sarcina programului - patru răspunsuri la o întrebare "sunt amestecate" pe patru butoane prin metoda Random. FindComponent aici mi sa părut greoaie. Pe scurt, a fost mai bine în opinia mea.
Apropo, am gasit solutia originala - eu doar fac SwapMouseButton (False);
și mai târziu SwapMouseButton (True);
pe ieșirea din program pentru fidelitate, returnez SwapMouseButton (True);
deoarece butonul drept al mouse-ului din programul meu nu funcționează, atunci pot spune o astfel de soluție, deși nu complet, dar. "pentru lipsa unui portar a avut o servitoare."

și poate codul de la conferință vă poate ajuta

Kisa # xA0; (20/04/01 09:58)
Numai în 98!

Dezactivați mouse-ul și tastatura

procedura TForm1.Button1Click (expeditor: TObject);

funcția FuncAvail (_dllname, _funcname: string; var_p: pointer): boolean;
# xA0; var _lib: tHandle;
# xA0; începeți
# xA0; Rezultat: = false;
# xA0; _p: = NIL;
# xA0; dacă LoadLibrary (PChar (_dllname)) = 0 atunci ieșiți;
# xA0; _lib: = GetModuleHandle (PChar (_dllname));
# xA0; dacă _lib <> 0 atunci
# xA0; # xA0; începeți
# xA0; # xA0; _p: = GetProcAddress (_lib, PChar (_funcname));
# xA0; # xA0; dacă _p <> NIL apoi rezultatul: = true;
# xA0; # xA0; sfârșitul;
# xA0; sfârșitul;


var
# xA0; xBlockInput. (Bloc: BOOL): BOOL; stdcall;

începe
# xA0; dacă FuncAvail ("USER32.DLL", "BlockInput", @xBlockInput) = adevărat atunci
# xA0; începeți
# xA0; xBlockInput (adevărat);
# xA0; Somn (5000);
# xA0; xBlockInput (fals);
# xA0; sfârșitul;
se încheie;

Ce chinuiești liniștit utilizatorul
Apoi la el mouse-ul pentru a deconecta că clava acum cursorul la începutul ecranului vom epuiza. Să o omorăm imediat cu resetare. Vom face o înregistrare originală într-o bibliotecă activă și ne vom reînnoi la fiecare cinci minute
pe timer numai pe appendix (după toate API ruites?).
Duceți-ne la toate VCL.

Astfel de programe sperie pur și simplu utilizatorul și drumul spre ele în coș.

Garfunkel # xA0; (24.10.04 21:53) [22]
SwapMouseButton - Ei bine, dacă vă ajută cazul

Panel2.OnClick: = zero;
în final
Panel2.OnClick: = Panel2Click;

Fată frumoasă # xA0; (25 octombrie 2004 05:59) [24]
Și este chiar mai sigur, dar este adevărat dacă vreun AV așteaptă

Panel2.OnClick: = zero;
încerca
# xA0;.
în cele din urmă
# xA0; Panel2.OnClick: = Panel2Click;
se încheie;

P.S. În fată rea, tonul era mai bun decât cel al Binelui (Trăi rău.)

Butonul de schimbare este furnizat ca o comoditate pentru persoanele care folosesc mouse-ul cu mâinile stângi. Funcția SwapMouseButton este de obicei apelată numai de Panoul de control. Deși o aplicație este liberă să apeleze funcția, mouse-ul este o resursă partajată și inversarea sensului butoanelor sale afectează toate aplicațiile.

Fată frumoasă
Știu asta
mouse-ul este o resursă partajată și inversarea sensului butoanelor sale afectează toate aplicațiile
la ieșirea programului de fidelitate, mă întorc
SwapMouseButton (Adevărat);
astfel încât nu a existat. Recunosc că aceasta este o cale "strâmbă". Dar unde să obțineți un mod simplu, accesibil pentru a opri temporar mouse-ul? Sunt programator începător și este doar programul meu de învățământ. Prin urmare, nu vreau să copiez doar orbește codul altcuiva fără să înțeleg cum funcționează. Am crezut că oprirea mouse-ului a fost o chestiune de minute, dar sa dovedit. Aceasta este o problemă întreagă.

Memorie: 0.79 MB
Durată: 0.124 sec







Trimiteți-le prietenilor: