Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Lauflicht (https://www.delphipraxis.net/13179-lauflicht.html)

Nickless 12. Dez 2003 13:43


Lauflicht
 
Hallöle

Hab da ma n Problem:

Ich hab da ein Lauflicht Programm das wie folgt aussieht:

[code=delphi]
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TKeyType = (ktCapsLock, ktNumLock, ktScrollLock);
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private-Deklarationen }
stufe: integer;
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure SetLedState(KeyCode: TKeyType; bOn: Boolean);
var
KBState: TKeyboardState;
Code: Byte;
begin
case KeyCode of
ktScrollLock: Code := VK_SCROLL;
ktCapsLock: Code := VK_CAPITAL;
ktNumLock: Code := VK_NUMLOCK;
end;
GetKeyboardState(KBState);
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
begin
if Boolean(KBState[Code]) <> bOn then
begin
keybd_event(Code,
MapVirtualKey(Code, 0),
KEYEVENTF_EXTENDEDKEY,
0);

keybd_event(Code,
MapVirtualKey(Code, 0),
KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,
0);
end;
end
else
begin
KBState
Code:
 := Ord(bOn);
    SetKeyboardState(KBState);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    case stufe of
    1:
    begin
      SetLedState(ktNumLock, TRUE); // NumLock off
      SetLedState(ktCapsLock, FALSE); // CapsLock off
      SetLedState(ktScrollLock, FALSE); // ScrollLock off
      stufe := 2;
    end;
    2:
    begin
      SetLedState(ktNumLock, False); // NumLock off
      SetLedState(ktCapsLock, TRUE); // CapsLock off
      SetLedState(ktScrollLock, FALSE); // ScrollLock off
      stufe := 3;
    end;
    3:
    begin
      SetLedState(ktNumLock, False); // NumLock off
      SetLedState(ktCapsLock, FALSE); // CapsLock off
      SetLedState(ktScrollLock, TRUE); // ScrollLock off
      stufe := 4;
    end;
    4:
    begin
      SetLedState(ktNumLock, False); // NumLock off
      SetLedState(ktCapsLock, TRUE); // CapsLock off
      SetLedState(ktScrollLock, FALSE); // ScrollLock off
      stufe := 1;
    end;
    else stufe := 1;


  end;

  timer1.Enabled := FALSE;
  timer1.Enabled := TRUE;

end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
      SetLedState(ktNumLock, TRUE); // NumLock off
      SetLedState(ktCapsLock, FALSE); // CapsLock off
      SetLedState(ktScrollLock, FALSE); // ScrollLock off
end;


end.
Wenn ich es starte is alles fein und funzt 1 a

ABER wenn ich es minimiere oder ein anderes Programm in den Vordergrund hole dann läft das ganz komisch und die lämpchen flackern ganz anders.

Was ist das?


Gruß

Nickless

Minz 12. Dez 2003 13:58

Re: Lauflicht
 
Vielleicht hängt das damit zusammen, dass dein Programm Rechenleistung

entzogen bekommt, wobei es dann wenn es wieder welche bekommt, versucht alles

nachzuholen und dann flackerts. Sicher bin ich mir aber net (nur so als Idee)

Gruß Minz

Nickless 12. Dez 2003 14:00

Re: Lauflicht
 
eher nicht weil wenn ich das dann wieder als hauptprogramm aktivere (einfach wider anklicke) dann flackerts nichtmehr dann läfts wieder

Minz 12. Dez 2003 14:05

Re: Lauflicht
 
Naja sag ich ja, wenn dein Programm den Fokus hat, bekommt es natürlich wieder Rechenleistung.

s14 12. Dez 2003 14:10

Re: Lauflicht
 
Nur mal so gefragt, warum steht im OnTimer Ereignis:

Delphi-Quellcode:
  timer1.Enabled := FALSE;
  timer1.Enabled := TRUE;
Gruß

Minz 12. Dez 2003 14:15

Re: Lauflicht
 
hehe hab ich mich auch schon gefragt :mrgreen:

X-Dragon 12. Dez 2003 14:16

Re: Lauflicht
 
Zitat:

Zitat von s14
Nur mal so gefragt, warum steht im OnTimer Ereignis:

Delphi-Quellcode:
  timer1.Enabled := FALSE;
  timer1.Enabled := TRUE;
Gruß

An sich wird dadurch der Timer neu gestartet, aber Sinn ergibt das irgenwie nicht ... :gruebel:

Minz 12. Dez 2003 14:32

Re: Lauflicht
 
Eventuell könnte das Auslagern in
einen Thread Abhilfe schaffen?

Nickless 15. Dez 2003 07:16

Re: Lauflicht
 
und wie sieht sowas aus (in ein Thread auslagern)?

Minz 15. Dez 2003 22:46

Re: Lauflicht
 
Delphi-Quellcode:
type TLauflich=class(TThread)
     private
     protected
       procedure Execute; override;
     private
end;
für mehr erstmal suchen ... :wink:

Gruß Minz


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz