Implemented new gtk keyevent handling

git-svn-id: trunk@4715 -
This commit is contained in:
marc 2003-10-16 23:54:27 +00:00
parent 9c936a9cba
commit ceaf698ecf
27 changed files with 3098 additions and 1212 deletions

2
.gitattributes vendored
View File

@ -955,6 +955,7 @@ lcl/interfaces/gtk/gtkdragcallback.inc svneol=native#text/pascal
lcl/interfaces/gtk/gtkglobals.pp svneol=native#text/pascal
lcl/interfaces/gtk/gtkimages.lrs svneol=native#text/pascal
lcl/interfaces/gtk/gtkint.pp svneol=native#text/pascal
lcl/interfaces/gtk/gtkkeysyms.inc svneol=native#text/pascal
lcl/interfaces/gtk/gtklistsl.inc svneol=native#text/pascal
lcl/interfaces/gtk/gtklistslh.inc svneol=native#text/pascal
lcl/interfaces/gtk/gtklistviewcallback.inc svneol=native#text/pascal
@ -966,7 +967,6 @@ lcl/interfaces/gtk/gtkwinapi.inc svneol=native#text/pascal
lcl/interfaces/gtk/gtkwinapih.inc svneol=native#text/pascal
lcl/interfaces/gtk/gtkwinapiwindow.pp svneol=native#text/pascal
lcl/interfaces/gtk/interfaces.pp svneol=native#text/pascal
lcl/interfaces/gtk/keymap.pp svneol=native#text/pascal
lcl/interfaces/gtk/tnotebook_close_tab.xpm -text svneol=native#image/x-xpixmap
lcl/interfaces/gtk2/gtk2int.pas svneol=native#text/pascal
lcl/interfaces/gtk2/gtk2interface.lpk svneol=native#text/pascal

View File

@ -154,17 +154,6 @@ begin
{$ENDIF}
end;
(*
procedure SetPGid(APID, APGID: Integer);
var
sr: SyscallRegs;
begin
sr.reg2 := APID;
sr.reg3 := APGID;
SysCall(Syscall_nr_setpgid, sr);
end;
*)
//////////////////////////////////////////////////
{ TCmdLineDebugger }
@ -382,6 +371,9 @@ initialization
end.
{ =============================================================================
$Log$
Revision 1.22 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.21 2003/08/15 14:28:48 mattias
clean up win32 ifdefs

View File

@ -66,19 +66,29 @@ begin
end;
function TSSHGDBMIDebugger.ParseInitialization: Boolean;
function CheckReadLine(var ALine: String): Boolean;
// does a checked read
// returns True if we shoul process it
// returns Flase if it is the gdb prompt
begin
ALine := ReadLine(True);
Result := Pos('(gdb)', ALine) = 0;
if Result
then ALine := StripLN(ReadLine);
end;
var
Line, S: String;
begin
Result := False;
Line := StripLN(ReadLine);
while Line = '' do
begin
Line := ReadLine(True);
if Pos('(gdb)', Line) > 0 then Break;
Line := StripLN(ReadLine);
end;
// strip leading empty lines
while CheckReadLine(Line) and (Line = '') do;
// succesfull login ?
while Pos('try again', Line) > 0 do CheckReadLine(Line);
(*
if Pos('authenticity', Line) > 0
then begin
//
@ -93,7 +103,9 @@ begin
Line := StripLN(ReadLine);
until Pos('password:', Line) > 0
end;
*)
(*
while Pos('password:', Line) > 0 do
begin
if not InputQuery('Debugger', 'Enter ' + Line, S)
@ -121,7 +133,7 @@ begin
// Next attempt
Line := StripLN(ReadLine);
end;
*)
if Pos('(gdb)', Line) > 0
then Result := inherited ParseInitialization
else begin
@ -140,6 +152,9 @@ end.
{ =============================================================================
$Log$
Revision 1.4 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.3 2003/08/15 14:28:48 mattias
clean up win32 ifdefs

View File

@ -1031,7 +1031,8 @@ begin
FExceptions := TManagedExceptions.Create;
// Temp hack
FExceptions.Add('ECodetoolError');
FExceptions.Add('EFOpenError');
FSignals := TManagedSignals.Create;
FUserSourceFiles := TStringList.Create;
@ -1353,12 +1354,12 @@ begin
FDebugger.OnCurrent := @OnDebuggerCurrentLine;
FDebugger.OnDbgOutput := @OnDebuggerOutput;
FDebugger.OnException := @OnDebuggerException;
Project1.RunParameterOptions.AssignEnvironmentTo(FDebugger.Environment);
if FDebugger.State = dsNone
then FDebugger.Init;
FDebugger.FileName := LaunchingApplication;
FDebugger.Arguments := LaunchingParams;
Project1.RunParameterOptions.AssignEnvironmentTo(FDebugger.Environment);
NewWorkingDir:=Project1.RunParameterOptions.WorkingDirectory;
if NewWorkingDir='' then
NewWorkingDir:=Project1.ProjectDirectory;
@ -1574,6 +1575,9 @@ end.
{ =============================================================================
$Log$
Revision 1.63 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.62 2003/08/20 15:06:57 mattias
implemented Build+Run File

View File

@ -8,13 +8,14 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
POSITION = podefaultposonly
HORZSCROLLBAR.PAGE = 481
VERTSCROLLBAR.PAGE = 443
LEFT = 636
LEFT = 632
HEIGHT = 442
TOP = 78
TOP = 42
WIDTH = 480
object nbDebugOptions: TNOTEBOOK
ALIGN = altop
PAGEINDEX = 3
ANCHORS = [aktop, akleft]
PAGEINDEX = 0
HEIGHT = 398
WIDTH = 480
object pgGeneral: TPAGE
@ -26,9 +27,12 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
TOP = 28
WIDTH = 476
object gbDebuggerType: TGROUPBOX
ANCHORS = [aktop, akleft]
CAPTION = 'Debugger type and path'
CLIENTHEIGHT = 69
CLIENTWIDTH = 468
COLOR = -2147483633
PARENTCOLOR = True
PARENTCTL3D = False
TABORDER = 0
LEFT = 2
@ -36,17 +40,19 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
TOP = 8
WIDTH = 472
object cmbDebuggerType: TCOMBOBOX
ANCHORS = [aktop, akleft]
MAXLENGTH = 0
ONCHANGE = cmbDebuggerTypeCHANGE
PARENTCTL3D = False
TABORDER = 0
TABSTOP = True
ONCHANGE = cmbDebuggerTypeCHANGE
LEFT = 6
HEIGHT = 25
TOP = 5
WIDTH = 268
end
object cmbDebuggerPath: TCOMBOBOX
ANCHORS = [aktop, akleft]
MAXLENGTH = 0
PARENTCTL3D = False
TABORDER = 1
@ -57,6 +63,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
WIDTH = 428
end
object cmdOpenDebuggerPath: TBUTTON
ANCHORS = [aktop, akleft]
CAPTION = '...'
TABSTOP = True
TABORDER = 2
@ -68,9 +75,12 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
end
object gbAdditionalSearchPath: TGROUPBOX
ANCHORS = [aktop, akleft]
CAPTION = 'Additional search path'
CLIENTHEIGHT = 35
CLIENTWIDTH = 468
COLOR = -2147483633
PARENTCOLOR = True
PARENTCTL3D = False
TABORDER = 1
LEFT = 2
@ -78,6 +88,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
TOP = 100
WIDTH = 472
object txtAdditionalPath: TEDIT
ANCHORS = [aktop, akleft]
TABSTOP = True
TABORDER = 0
LEFT = 6
@ -86,6 +97,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
WIDTH = 428
end
object cmdOpenAdditionalPath: TBUTTON
ANCHORS = [aktop, akleft]
CAPTION = '...'
TABSTOP = True
TABORDER = 1
@ -96,9 +108,12 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
end
object gbDebuggerSpecific: TGROUPBOX
ANCHORS = [aktop, akleft]
CAPTION = 'Debugger specific options (depends on type of debugger)'
CLIENTHEIGHT = 187
CLIENTWIDTH = 468
COLOR = -2147483633
PARENTCOLOR = True
PARENTCTL3D = False
TABORDER = 2
LEFT = 2
@ -116,9 +131,12 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
TOP = 28
WIDTH = 476
object gbGeneral: TGROUPBOX
ANCHORS = [aktop, akleft]
CAPTION = 'General'
CLIENTHEIGHT = 115
CLIENTWIDTH = 226
COLOR = -2147483633
PARENTCOLOR = True
PARENTCTL3D = False
TABORDER = 0
LEFT = 4
@ -127,6 +145,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
WIDTH = 230
object chkClearLogOnRun: TCHECKBOX
ALLOWGRAYED = True
ANCHORS = [aktop, akleft]
AUTOSIZE = True
CAPTION = 'Clear log on run'
DRAGCURSOR = 0
@ -139,6 +158,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
object chkLimitLinecount: TCHECKBOX
ALLOWGRAYED = True
ANCHORS = [aktop, akleft]
AUTOSIZE = True
CAPTION = 'Limit linecount to'
DRAGCURSOR = 0
@ -162,10 +182,13 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
end
object gbMessages: TGROUPBOX
ANCHORS = [aktop, akleft]
CAPTION = 'Messages'
CLIENTHEIGHT = 171
CLIENTWIDTH = 228
COLOR = -2147483633
ENABLED = False
PARENTCOLOR = True
PARENTCTL3D = False
TABORDER = 1
LEFT = 242
@ -174,6 +197,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
WIDTH = 232
object chkMessagesBreakpoint: TCHECKBOX
ALLOWGRAYED = True
ANCHORS = [aktop, akleft]
AUTOSIZE = True
CAPTION = 'Breakpoint'
DRAGCURSOR = 0
@ -186,6 +210,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
object chkMessagesProcess: TCHECKBOX
ALLOWGRAYED = True
ANCHORS = [aktop, akleft]
AUTOSIZE = True
CAPTION = 'Process'
DRAGCURSOR = 0
@ -198,6 +223,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
object chkMessagesThread: TCHECKBOX
ALLOWGRAYED = True
ANCHORS = [aktop, akleft]
AUTOSIZE = True
CAPTION = 'Thread'
DRAGCURSOR = 0
@ -210,6 +236,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
object chkMessagesModule: TCHECKBOX
ALLOWGRAYED = True
ANCHORS = [aktop, akleft]
AUTOSIZE = True
CAPTION = 'Module'
DRAGCURSOR = 0
@ -222,6 +249,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
object chkMessagesOutput: TCHECKBOX
ALLOWGRAYED = True
ANCHORS = [aktop, akleft]
AUTOSIZE = True
CAPTION = 'Output'
DRAGCURSOR = 0
@ -234,6 +262,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
object chkMessagesWindow: TCHECKBOX
ALLOWGRAYED = True
ANCHORS = [aktop, akleft]
AUTOSIZE = True
CAPTION = 'Window'
DRAGCURSOR = 0
@ -246,6 +275,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
object chkMessagesInterface: TCHECKBOX
ALLOWGRAYED = True
ANCHORS = [aktop, akleft]
AUTOSIZE = True
CAPTION = 'Interface'
DRAGCURSOR = 0
@ -267,9 +297,12 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
TOP = 28
WIDTH = 476
object bgIgnoreExceptions: TGROUPBOX
ANCHORS = [aktop, akleft]
CAPTION = 'Ignore these exceptions'
CLIENTHEIGHT = 311
CLIENTWIDTH = 464
COLOR = -2147483633
PARENTCOLOR = True
PARENTCTL3D = False
TABORDER = 0
LEFT = 4
@ -277,6 +310,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
TOP = 8
WIDTH = 468
object cmdExceptionRemove: TBUTTON
ANCHORS = [aktop, akleft]
ENABLED = False
CAPTION = 'Remove'
TABSTOP = True
@ -288,6 +322,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
WIDTH = 75
end
object cmdExceptionAdd: TBUTTON
ANCHORS = [aktop, akleft]
CAPTION = 'Add'
TABSTOP = True
TABORDER = 1
@ -298,6 +333,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
WIDTH = 75
end
object clbExceptions: TCHECKLISTBOX
ANCHORS = [aktop, akleft]
ONCLICK = clbExceptionsCLICK
TABORDER = 2
TABSTOP = True
@ -310,6 +346,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
object chkBreakOnException: TCHECKBOX
ALLOWGRAYED = True
ANCHORS = [aktop, akleft]
AUTOSIZE = True
CAPTION = 'Break on Lazarus Exceptions'
DRAGCURSOR = 0
@ -330,9 +367,12 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
TOP = 28
WIDTH = 476
object gbSignals: TGROUPBOX
ANCHORS = [aktop, akleft]
CAPTION = 'Signals'
CLIENTHEIGHT = 337
CLIENTWIDTH = 464
COLOR = -2147483633
PARENTCOLOR = True
PARENTCTL3D = False
TABORDER = 0
LEFT = 4
@ -340,6 +380,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
TOP = 8
WIDTH = 468
object cmdSignalRemove: TBUTTON
ANCHORS = [aktop, akleft]
ENABLED = False
CAPTION = 'Remove'
TABSTOP = True
@ -350,6 +391,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
WIDTH = 75
end
object cmdSignalAdd: TBUTTON
ANCHORS = [aktop, akleft]
CAPTION = 'Add'
TABSTOP = True
TABORDER = 1
@ -359,6 +401,8 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
WIDTH = 75
end
object lvSignals: TLISTVIEW
ANCHORS = [aktop, akleft]
COLOR = -2147483633
COLUMNS = <
item
CAPTION = 'Name'
@ -391,6 +435,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
end
end
object cmdCancel: TBUTTON
ANCHORS = [aktop, akleft]
MODALRESULT = 2
CANCEL = True
CAPTION = 'Cancel'
@ -402,6 +447,7 @@ object DebuggerOptionsForm: TDebuggerOptionsForm
WIDTH = 75
end
object cmdOK: TBUTTON
ANCHORS = [aktop, akleft]
DEFAULT = True
CAPTION = 'OK'
TABSTOP = True

View File

@ -5,106 +5,124 @@ LazarusResources.Add('TDebuggerOptionsForm','FORMDATA',[
+'sdialog'#7'CAPTION'#6#16'Debugger Options'#12'CLIENTHEIGHT'#3#186#1#11'CLIE'
+'NTWIDTH'#3#224#1#8'ONCREATE'#7#25'DebuggerOptionsFormCREATE'#9'ONDESTROY'#7
+#26'DebuggerOptionsFormDESTROY'#8'POSITION'#7#16'podefaultposonly'#18'HORZSC'
+'ROLLBAR.PAGE'#3#225#1#18'VERTSCROLLBAR.PAGE'#3#187#1#4'LEFT'#3'|'#2#6'HEIGH'
+'T'#3#186#1#3'TOP'#2'N'#5'WIDTH'#3#224#1#0#9'TNOTEBOOK'#14'nbDebugOptions'#5
+'ALIGN'#7#5'altop'#9'PAGEINDEX'#2#3#6'HEIGHT'#3#142#1#5'WIDTH'#3#224#1#0#5'T'
+'PAGE'#9'pgGeneral'#7'CAPTION'#6#7'General'#11'CLIENTWIDTH'#3#220#1#12'CLIEN'
+'THEIGHT'#3'p'#1#4'LEFT'#2#2#6'HEIGHT'#3'p'#1#3'TOP'#2#28#5'WIDTH'#3#220#1#0
+#9'TGROUPBOX'#14'gbDebuggerType'#7'CAPTION'#6#22'Debugger type and path'#12
+'CLIENTHEIGHT'#2'E'#11'CLIENTWIDTH'#3#212#1#11'PARENTCTL3D'#8#8'TABORDER'#2#0
+#4'LEFT'#2#2#6'HEIGHT'#2'V'#3'TOP'#2#8#5'WIDTH'#3#216#1#0#9'TCOMBOBOX'#15'cm'
+'bDebuggerType'#9'MAXLENGTH'#2#0#11'PARENTCTL3D'#8#8'TABORDER'#2#0#7'TABSTOP'
+#9#8'ONCHANGE'#7#21'cmbDebuggerTypeCHANGE'#4'LEFT'#2#6#6'HEIGHT'#2#25#3'TOP'
+#2#5#5'WIDTH'#3#12#1#0#0#9'TCOMBOBOX'#15'cmbDebuggerPath'#9'MAXLENGTH'#2#0#11
+'PARENTCTL3D'#8#8'TABORDER'#2#1#7'TABSTOP'#9#4'LEFT'#2#6#6'HEIGHT'#2#25#3'TO'
+'P'#2'%'#5'WIDTH'#3#172#1#0#0#7'TBUTTON'#19'cmdOpenDebuggerPath'#7'CAPTION'#6
+#3'...'#7'TABSTOP'#9#8'TABORDER'#2#2#7'ONCLICK'#7#24'cmdOpenDebuggerPathCLIC'
+'K'#4'LEFT'#3#186#1#6'HEIGHT'#2#25#3'TOP'#2'%'#5'WIDTH'#2#19#0#0#0#9'TGROUPB'
+'OX'#22'gbAdditionalSearchPath'#7'CAPTION'#6#22'Additional search path'#12'C'
+'LIENTHEIGHT'#2'#'#11'CLIENTWIDTH'#3#212#1#11'PARENTCTL3D'#8#8'TABORDER'#2#1
+#4'LEFT'#2#2#6'HEIGHT'#2'4'#3'TOP'#2'd'#5'WIDTH'#3#216#1#0#5'TEDIT'#17'txtAd'
+'ditionalPath'#7'TABSTOP'#9#8'TABORDER'#2#0#4'LEFT'#2#6#6'HEIGHT'#2#25#3'TOP'
+#2#5#5'WIDTH'#3#172#1#0#0#7'TBUTTON'#21'cmdOpenAdditionalPath'#7'CAPTION'#6#3
+'...'#7'TABSTOP'#9#8'TABORDER'#2#1#4'LEFT'#3#186#1#6'HEIGHT'#2#24#3'TOP'#2#5
+#5'WIDTH'#2#19#0#0#0#9'TGROUPBOX'#18'gbDebuggerSpecific'#7'CAPTION'#6'7Debug'
+'ger specific options (depends on type of debugger)'#12'CLIENTHEIGHT'#3#187#0
+#11'CLIENTWIDTH'#3#212#1#11'PARENTCTL3D'#8#8'TABORDER'#2#2#4'LEFT'#2#2#6'HEI'
+'GHT'#3#204#0#3'TOP'#3#156#0#5'WIDTH'#3#216#1#0#0#0#5'TPAGE'#10'pgEventLog'#7
+'CAPTION'#6#9'Event Log'#11'CLIENTWIDTH'#3#220#1#12'CLIENTHEIGHT'#3'p'#1#4'L'
+'EFT'#2#2#6'HEIGHT'#3'p'#1#3'TOP'#2#28#5'WIDTH'#3#220#1#0#9'TGROUPBOX'#9'gbG'
+'eneral'#7'CAPTION'#6#7'General'#12'CLIENTHEIGHT'#2's'#11'CLIENTWIDTH'#3#226
+#0#11'PARENTCTL3D'#8#8'TABORDER'#2#0#4'LEFT'#2#4#6'HEIGHT'#3#132#0#3'TOP'#2#8
+#5'WIDTH'#3#230#0#0#9'TCHECKBOX'#16'chkClearLogOnRun'#11'ALLOWGRAYED'#9#8'AU'
+'TOSIZE'#9#7'CAPTION'#6#16'Clear log on run'#10'DRAGCURSOR'#2#0#8'TABORDER'#2
+#0#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2#5#5'WIDTH'#3#135#0#0#0#9
+'TCHECKBOX'#17'chkLimitLinecount'#11'ALLOWGRAYED'#9#8'AUTOSIZE'#9#7'CAPTION'
+#6#18'Limit linecount to'#10'DRAGCURSOR'#2#0#8'TABORDER'#2#1#7'TABSTOP'#9#4
+'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2#29#5'WIDTH'#2'w'#0#0#9'TSPINEDIT'#16'seLi'
+'mitLinecount'#7'ENABLED'#8#10'CLIMB_RATE'#5#0#0#0#0#0#144'?'#236#144'?'#8'M'
+'INVALUE'#5#0#0#0#0#0#144'?'#236#144'?'#8'MAXVALUE'#5#0#0#0#0#0#144'?'#236
+#144'?'#5'VALUE'#5#0#0#0#0#0#144'?'#236#144'?'#4'LEFT'#2#28#6'HEIGHT'#2#20#3
+'TOP'#2'5'#5'WIDTH'#2'>'#0#0#0#9'TGROUPBOX'#10'gbMessages'#7'CAPTION'#6#8'Me'
+'ssages'#12'CLIENTHEIGHT'#3#171#0#11'CLIENTWIDTH'#3#228#0#7'ENABLED'#8#11'PA'
+'RENTCTL3D'#8#8'TABORDER'#2#1#4'LEFT'#3#242#0#6'HEIGHT'#3#188#0#3'TOP'#2#8#5
+'WIDTH'#3#232#0#0#9'TCHECKBOX'#21'chkMessagesBreakpoint'#11'ALLOWGRAYED'#9#8
+'ROLLBAR.PAGE'#3#225#1#18'VERTSCROLLBAR.PAGE'#3#187#1#4'LEFT'#3'x'#2#6'HEIGH'
+'T'#3#186#1#3'TOP'#2'*'#5'WIDTH'#3#224#1#0#9'TNOTEBOOK'#14'nbDebugOptions'#5
+'ALIGN'#7#5'altop'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#9'PAGEINDEX'#2#0#6'HEI'
+'GHT'#3#142#1#5'WIDTH'#3#224#1#0#5'TPAGE'#9'pgGeneral'#7'CAPTION'#6#7'Genera'
+'l'#11'CLIENTWIDTH'#3#220#1#12'CLIENTHEIGHT'#3'p'#1#4'LEFT'#2#2#6'HEIGHT'#3
+'p'#1#3'TOP'#2#28#5'WIDTH'#3#220#1#0#9'TGROUPBOX'#14'gbDebuggerType'#7'ANCHO'
+'RS'#11#5'aktop'#6'akleft'#0#7'CAPTION'#6#22'Debugger type and path'#12'CLIE'
+'NTHEIGHT'#2'E'#11'CLIENTWIDTH'#3#212#1#5'COLOR'#4#15#0#0#128#11'PARENTCOLOR'
+#9#11'PARENTCTL3D'#8#8'TABORDER'#2#0#4'LEFT'#2#2#6'HEIGHT'#2'V'#3'TOP'#2#8#5
+'WIDTH'#3#216#1#0#9'TCOMBOBOX'#15'cmbDebuggerType'#7'ANCHORS'#11#5'aktop'#6
+'akleft'#0#9'MAXLENGTH'#2#0#8'ONCHANGE'#7#21'cmbDebuggerTypeCHANGE'#11'PAREN'
+'TCTL3D'#8#8'TABORDER'#2#0#7'TABSTOP'#9#4'LEFT'#2#6#6'HEIGHT'#2#25#3'TOP'#2#5
+#5'WIDTH'#3#12#1#0#0#9'TCOMBOBOX'#15'cmbDebuggerPath'#7'ANCHORS'#11#5'aktop'
+#6'akleft'#0#9'MAXLENGTH'#2#0#11'PARENTCTL3D'#8#8'TABORDER'#2#1#7'TABSTOP'#9
+#4'LEFT'#2#6#6'HEIGHT'#2#25#3'TOP'#2'%'#5'WIDTH'#3#172#1#0#0#7'TBUTTON'#19'c'
+'mdOpenDebuggerPath'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'CAPTION'#6#3'...'#7
+'TABSTOP'#9#8'TABORDER'#2#2#7'ONCLICK'#7#24'cmdOpenDebuggerPathCLICK'#4'LEFT'
+#3#186#1#6'HEIGHT'#2#25#3'TOP'#2'%'#5'WIDTH'#2#19#0#0#0#9'TGROUPBOX'#22'gbAd'
+'ditionalSearchPath'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'CAPTION'#6#22'Addi'
+'tional search path'#12'CLIENTHEIGHT'#2'#'#11'CLIENTWIDTH'#3#212#1#5'COLOR'#4
+#15#0#0#128#11'PARENTCOLOR'#9#11'PARENTCTL3D'#8#8'TABORDER'#2#1#4'LEFT'#2#2#6
+'HEIGHT'#2'4'#3'TOP'#2'd'#5'WIDTH'#3#216#1#0#5'TEDIT'#17'txtAdditionalPath'#7
+'ANCHORS'#11#5'aktop'#6'akleft'#0#7'TABSTOP'#9#8'TABORDER'#2#0#4'LEFT'#2#6#6
+'HEIGHT'#2#25#3'TOP'#2#5#5'WIDTH'#3#172#1#0#0#7'TBUTTON'#21'cmdOpenAdditiona'
+'lPath'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'CAPTION'#6#3'...'#7'TABSTOP'#9#8
+'TABORDER'#2#1#4'LEFT'#3#186#1#6'HEIGHT'#2#24#3'TOP'#2#5#5'WIDTH'#2#19#0#0#0
+#9'TGROUPBOX'#18'gbDebuggerSpecific'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'CA'
+'PTION'#6'7Debugger specific options (depends on type of debugger)'#12'CLIEN'
+'THEIGHT'#3#187#0#11'CLIENTWIDTH'#3#212#1#5'COLOR'#4#15#0#0#128#11'PARENTCOL'
+'OR'#9#11'PARENTCTL3D'#8#8'TABORDER'#2#2#4'LEFT'#2#2#6'HEIGHT'#3#204#0#3'TOP'
+#3#156#0#5'WIDTH'#3#216#1#0#0#0#5'TPAGE'#10'pgEventLog'#7'CAPTION'#6#9'Event'
+' Log'#11'CLIENTWIDTH'#3#220#1#12'CLIENTHEIGHT'#3'p'#1#4'LEFT'#2#2#6'HEIGHT'
+#3'p'#1#3'TOP'#2#28#5'WIDTH'#3#220#1#0#9'TGROUPBOX'#9'gbGeneral'#7'ANCHORS'
+#11#5'aktop'#6'akleft'#0#7'CAPTION'#6#7'General'#12'CLIENTHEIGHT'#2's'#11'CL'
+'IENTWIDTH'#3#226#0#5'COLOR'#4#15#0#0#128#11'PARENTCOLOR'#9#11'PARENTCTL3D'#8
+#8'TABORDER'#2#0#4'LEFT'#2#4#6'HEIGHT'#3#132#0#3'TOP'#2#8#5'WIDTH'#3#230#0#0
+#9'TCHECKBOX'#16'chkClearLogOnRun'#11'ALLOWGRAYED'#9#7'ANCHORS'#11#5'aktop'#6
+'akleft'#0#8'AUTOSIZE'#9#7'CAPTION'#6#16'Clear log on run'#10'DRAGCURSOR'#2#0
+#8'TABORDER'#2#0#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2#5#5'WIDTH'
+#3#135#0#0#0#9'TCHECKBOX'#17'chkLimitLinecount'#11'ALLOWGRAYED'#9#7'ANCHORS'
+#11#5'aktop'#6'akleft'#0#8'AUTOSIZE'#9#7'CAPTION'#6#18'Limit linecount to'#10
+'DRAGCURSOR'#2#0#8'TABORDER'#2#1#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'T'
+'OP'#2#29#5'WIDTH'#2'w'#0#0#9'TSPINEDIT'#16'seLimitLinecount'#7'ENABLED'#8#10
+'CLIMB_RATE'#5#0#0#0#0#0#144'?'#236#144'?'#8'MINVALUE'#5#0#0#0#0#0#144'?'#236
+#144'?'#8'MAXVALUE'#5#0#0#0#0#0#144'?'#236#144'?'#5'VALUE'#5#0#0#0#0#0#144'?'
+#236#144'?'#4'LEFT'#2#28#6'HEIGHT'#2#20#3'TOP'#2'5'#5'WIDTH'#2'>'#0#0#0#9'TG'
+'ROUPBOX'#10'gbMessages'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'CAPTION'#6#8'M'
+'essages'#12'CLIENTHEIGHT'#3#171#0#11'CLIENTWIDTH'#3#228#0#5'COLOR'#4#15#0#0
+#128#7'ENABLED'#8#11'PARENTCOLOR'#9#11'PARENTCTL3D'#8#8'TABORDER'#2#1#4'LEFT'
+#3#242#0#6'HEIGHT'#3#188#0#3'TOP'#2#8#5'WIDTH'#3#232#0#0#9'TCHECKBOX'#21'chk'
+'MessagesBreakpoint'#11'ALLOWGRAYED'#9#7'ANCHORS'#11#5'aktop'#6'akleft'#0#8
+'AUTOSIZE'#9#7'CAPTION'#6#10'Breakpoint'#10'DRAGCURSOR'#2#0#8'TABORDER'#2#0#7
+'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2#5#5'WIDTH'#3#161#0#0#0#9'TCH'
+'ECKBOX'#18'chkMessagesProcess'#11'ALLOWGRAYED'#9#8'AUTOSIZE'#9#7'CAPTION'#6
+#7'Process'#10'DRAGCURSOR'#2#0#8'TABORDER'#2#1#7'TABSTOP'#9#4'LEFT'#2#4#6'HE'
+'IGHT'#2#20#3'TOP'#2#29#5'WIDTH'#3#147#0#0#0#9'TCHECKBOX'#17'chkMessagesThre'
+'ad'#11'ALLOWGRAYED'#9#8'AUTOSIZE'#9#7'CAPTION'#6#6'Thread'#10'DRAGCURSOR'#2
+#0#8'TABORDER'#2#2#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2'5'#5'WID'
+'TH'#3#141#0#0#0#9'TCHECKBOX'#17'chkMessagesModule'#11'ALLOWGRAYED'#9#8'AUTO'
+'SIZE'#9#7'CAPTION'#6#6'Module'#10'DRAGCURSOR'#2#0#8'TABORDER'#2#3#7'TABSTOP'
+#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2'M'#5'WIDTH'#3#144#0#0#0#9'TCHECKBOX'
+#17'chkMessagesOutput'#11'ALLOWGRAYED'#9#8'AUTOSIZE'#9#7'CAPTION'#6#6'Output'
+#10'DRAGCURSOR'#2#0#8'TABORDER'#2#4#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3
+'TOP'#2'e'#5'WIDTH'#3#139#0#0#0#9'TCHECKBOX'#17'chkMessagesWindow'#11'ALLOWG'
+'RAYED'#9#8'AUTOSIZE'#9#7'CAPTION'#6#6'Window'#10'DRAGCURSOR'#2#0#8'TABORDER'
+#2#5#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2'}'#5'WIDTH'#3#146#0#0#0
+#9'TCHECKBOX'#20'chkMessagesInterface'#11'ALLOWGRAYED'#9#8'AUTOSIZE'#9#7'CAP'
+'TION'#6#9'Interface'#10'DRAGCURSOR'#2#0#8'TABORDER'#2#6#7'TABSTOP'#9#4'LEFT'
+#2#4#6'HEIGHT'#2#20#3'TOP'#3#149#0#5'WIDTH'#3#150#0#0#0#0#0#5'TPAGE'#12'pgEx'
,'ceptions'#7'CAPTION'#6#19'Language Exceptions'#11'CLIENTWIDTH'#3#220#1#12'C'
+'LIENTHEIGHT'#3'p'#1#4'LEFT'#2#2#6'HEIGHT'#3'p'#1#3'TOP'#2#28#5'WIDTH'#3#220
+#1#0#9'TGROUPBOX'#18'bgIgnoreExceptions'#7'CAPTION'#6#23'Ignore these except'
+'ions'#12'CLIENTHEIGHT'#3'7'#1#11'CLIENTWIDTH'#3#208#1#11'PARENTCTL3D'#8#8'T'
+'ABORDER'#2#0#4'LEFT'#2#4#6'HEIGHT'#3'H'#1#3'TOP'#2#8#5'WIDTH'#3#212#1#0#7'T'
+'BUTTON'#18'cmdExceptionRemove'#7'ENABLED'#8#7'CAPTION'#6#6'Remove'#7'TABSTO'
+'P'#9#8'TABORDER'#2#0#7'ONCLICK'#7#23'cmdExceptionRemoveCLICK'#4'LEFT'#3'|'#1
+#6'HEIGHT'#2#25#3'TOP'#3#21#1#5'WIDTH'#2'K'#0#0#7'TBUTTON'#15'cmdExceptionAd'
+'d'#7'CAPTION'#6#3'Add'#7'TABSTOP'#9#8'TABORDER'#2#1#7'ONCLICK'#7#20'cmdExce'
+'ptionAddCLICK'#4'LEFT'#3','#1#6'HEIGHT'#2#25#3'TOP'#3#21#1#5'WIDTH'#2'K'#0#0
+#13'TCHECKLISTBOX'#13'clbExceptions'#7'ONCLICK'#7#18'clbExceptionsCLICK'#8'T'
+'ABORDER'#2#2#7'TABSTOP'#9#8'TOPINDEX'#2#255#4'LEFT'#2#8#6'HEIGHT'#3#8#1#3'T'
+'OP'#2#5#5'WIDTH'#3#192#1#0#0#0#9'TCHECKBOX'#19'chkBreakOnException'#11'ALLO'
+'WGRAYED'#9#8'AUTOSIZE'#9#7'CAPTION'#6#27'Break on Lazarus Exceptions'#10'DR'
+'AGCURSOR'#2#0#8'TABORDER'#2#1#7'TABSTOP'#9#4'LEFT'#2#2#6'HEIGHT'#2#20#3'TOP'
+#3'T'#1#5'WIDTH'#3#188#0#0#0#0#5'TPAGE'#9'pgSignals'#7'CAPTION'#6#13'OS Exce'
+'ptions'#11'CLIENTWIDTH'#3#220#1#12'CLIENTHEIGHT'#3'p'#1#4'LEFT'#2#2#6'HEIGH'
+'T'#3'p'#1#3'TOP'#2#28#5'WIDTH'#3#220#1#0#9'TGROUPBOX'#9'gbSignals'#7'CAPTIO'
+'N'#6#7'Signals'#12'CLIENTHEIGHT'#3'Q'#1#11'CLIENTWIDTH'#3#208#1#11'PARENTCT'
+'L3D'#8#8'TABORDER'#2#0#4'LEFT'#2#4#6'HEIGHT'#3'b'#1#3'TOP'#2#8#5'WIDTH'#3
+#212#1#0#7'TBUTTON'#15'cmdSignalRemove'#7'ENABLED'#8#7'CAPTION'#6#6'Remove'#7
+'TABSTOP'#9#8'TABORDER'#2#0#4'LEFT'#3'}'#1#6'HEIGHT'#2#25#3'TOP'#3'1'#1#5'WI'
+'DTH'#2'K'#0#0#7'TBUTTON'#12'cmdSignalAdd'#7'CAPTION'#6#3'Add'#7'TABSTOP'#9#8
+'TABORDER'#2#1#4'LEFT'#3'('#1#6'HEIGHT'#2#25#3'TOP'#3'1'#1#5'WIDTH'#2'K'#0#0
+#9'TLISTVIEW'#9'lvSignals'#7'COLUMNS'#14#1#7'CAPTION'#6#4'Name'#7'VISIBLE'#9
+#5'WIDTH'#3#200#0#0#1#7'CAPTION'#6#2'ID'#7'VISIBLE'#9#5'WIDTH'#2'2'#0#1#7'CA'
+'PTION'#6#10'Handled by'#7'VISIBLE'#9#5'WIDTH'#2'K'#0#1#7'CAPTION'#6#6'Resum'
+'e'#7'VISIBLE'#9#5'WIDTH'#2'K'#0#0#9'POPUPMENU'#7#9'popSignal'#9'VIEWSTYLE'#7
+#8'vsreport'#4'LEFT'#2#8#6'HEIGHT'#3'$'#1#3'TOP'#2#5#5'WIDTH'#3#192#1#0#0#0#0
+#0#7'TBUTTON'#9'cmdCancel'#11'MODALRESULT'#2#2#6'CANCEL'#9#7'CAPTION'#6#6'Ca'
+'ncel'#7'TABSTOP'#9#8'TABORDER'#2#1#4'LEFT'#3#144#1#6'HEIGHT'#2#25#3'TOP'#3
+#152#1#5'WIDTH'#2'K'#0#0#7'TBUTTON'#5'cmdOK'#7'DEFAULT'#9#7'CAPTION'#6#2'OK'
+#7'TABSTOP'#9#8'TABORDER'#2#2#7'ONCLICK'#7#10'cmdOKCLICK'#4'LEFT'#3'@'#1#6'H'
+'EIGHT'#2#25#3'TOP'#3#152#1#5'WIDTH'#2'K'#0#0#10'TPOPUPMENU'#9'popSignal'#4
+'left'#3#152#1#3'top'#2#20#0#9'TMENUITEM'#19'mnuHandledByProgram'#9'AUTOCHEC'
+'K'#9#7'CAPTION'#6#18'Handled by Program'#10'GROUPINDEX'#2#1#9'RADIOITEM'#9#0
+#0#9'TMENUITEM'#21'mnuiHandledByDebugger'#9'AUTOCHECK'#9#7'CAPTION'#6#19'Han'
+'dled by Debugger'#10'GROUPINDEX'#2#1#9'RADIOITEM'#9#0#0#9'TMENUITEM'#2'N1'#7
+'CAPTION'#6#1'-'#0#0#9'TMENUITEM'#16'mnuResumeHandled'#9'AUTOCHECK'#9#7'CAPT'
+'ION'#6#14'Resume Handled'#10'GROUPINDEX'#2#2#9'RADIOITEM'#9#0#0#9'TMENUITEM'
+#18'mnuResumeUnhandled'#9'AUTOCHECK'#9#7'CAPTION'#6#16'Resume Unhandled'#10
+'GROUPINDEX'#2#2#9'RADIOITEM'#9#0#0#0#0
+'ECKBOX'#18'chkMessagesProcess'#11'ALLOWGRAYED'#9#7'ANCHORS'#11#5'aktop'#6'a'
+'kleft'#0#8'AUTOSIZE'#9#7'CAPTION'#6#7'Process'#10'DRAGCURSOR'#2#0#8'TABORDE'
+'R'#2#1#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2#29#5'WIDTH'#3#147#0
+#0#0#9'TCHECKBOX'#17'chkMessagesThread'#11'ALLOWGRAYED'#9#7'ANCHORS'#11#5'ak'
+'top'#6'akleft'#0#8'AUTOSIZE'#9#7'CAPTION'#6#6'Thread'#10'DRAGCURSOR'#2#0#8
+'TABORDER'#2#2#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2'5'#5'WIDTH'#3
+#141#0#0#0#9'TCHECKBOX'#17'chkMessagesModule'#11'ALLOWGRAYED'#9#7'ANCHORS'#11
,#5'aktop'#6'akleft'#0#8'AUTOSIZE'#9#7'CAPTION'#6#6'Module'#10'DRAGCURSOR'#2#0
+#8'TABORDER'#2#3#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2'M'#5'WIDTH'
+#3#144#0#0#0#9'TCHECKBOX'#17'chkMessagesOutput'#11'ALLOWGRAYED'#9#7'ANCHORS'
+#11#5'aktop'#6'akleft'#0#8'AUTOSIZE'#9#7'CAPTION'#6#6'Output'#10'DRAGCURSOR'
+#2#0#8'TABORDER'#2#4#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2'e'#5'W'
+'IDTH'#3#139#0#0#0#9'TCHECKBOX'#17'chkMessagesWindow'#11'ALLOWGRAYED'#9#7'AN'
+'CHORS'#11#5'aktop'#6'akleft'#0#8'AUTOSIZE'#9#7'CAPTION'#6#6'Window'#10'DRAG'
+'CURSOR'#2#0#8'TABORDER'#2#5#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2#20#3'TOP'#2
+'}'#5'WIDTH'#3#146#0#0#0#9'TCHECKBOX'#20'chkMessagesInterface'#11'ALLOWGRAYE'
+'D'#9#7'ANCHORS'#11#5'aktop'#6'akleft'#0#8'AUTOSIZE'#9#7'CAPTION'#6#9'Interf'
+'ace'#10'DRAGCURSOR'#2#0#8'TABORDER'#2#6#7'TABSTOP'#9#4'LEFT'#2#4#6'HEIGHT'#2
+#20#3'TOP'#3#149#0#5'WIDTH'#3#150#0#0#0#0#0#5'TPAGE'#12'pgExceptions'#7'CAPT'
+'ION'#6#19'Language Exceptions'#11'CLIENTWIDTH'#3#220#1#12'CLIENTHEIGHT'#3'p'
+#1#4'LEFT'#2#2#6'HEIGHT'#3'p'#1#3'TOP'#2#28#5'WIDTH'#3#220#1#0#9'TGROUPBOX'
+#18'bgIgnoreExceptions'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'CAPTION'#6#23'I'
+'gnore these exceptions'#12'CLIENTHEIGHT'#3'7'#1#11'CLIENTWIDTH'#3#208#1#5'C'
+'OLOR'#4#15#0#0#128#11'PARENTCOLOR'#9#11'PARENTCTL3D'#8#8'TABORDER'#2#0#4'LE'
+'FT'#2#4#6'HEIGHT'#3'H'#1#3'TOP'#2#8#5'WIDTH'#3#212#1#0#7'TBUTTON'#18'cmdExc'
+'eptionRemove'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'ENABLED'#8#7'CAPTION'#6#6
+'Remove'#7'TABSTOP'#9#8'TABORDER'#2#0#7'ONCLICK'#7#23'cmdExceptionRemoveCLIC'
+'K'#4'LEFT'#3'|'#1#6'HEIGHT'#2#25#3'TOP'#3#21#1#5'WIDTH'#2'K'#0#0#7'TBUTTON'
+#15'cmdExceptionAdd'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'CAPTION'#6#3'Add'#7
+'TABSTOP'#9#8'TABORDER'#2#1#7'ONCLICK'#7#20'cmdExceptionAddCLICK'#4'LEFT'#3
+','#1#6'HEIGHT'#2#25#3'TOP'#3#21#1#5'WIDTH'#2'K'#0#0#13'TCHECKLISTBOX'#13'cl'
+'bExceptions'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'ONCLICK'#7#18'clbExceptio'
+'nsCLICK'#8'TABORDER'#2#2#7'TABSTOP'#9#8'TOPINDEX'#2#255#4'LEFT'#2#8#6'HEIGH'
+'T'#3#8#1#3'TOP'#2#5#5'WIDTH'#3#192#1#0#0#0#9'TCHECKBOX'#19'chkBreakOnExcept'
+'ion'#11'ALLOWGRAYED'#9#7'ANCHORS'#11#5'aktop'#6'akleft'#0#8'AUTOSIZE'#9#7'C'
+'APTION'#6#27'Break on Lazarus Exceptions'#10'DRAGCURSOR'#2#0#8'TABORDER'#2#1
+#7'TABSTOP'#9#4'LEFT'#2#2#6'HEIGHT'#2#20#3'TOP'#3'T'#1#5'WIDTH'#3#188#0#0#0#0
+#5'TPAGE'#9'pgSignals'#7'CAPTION'#6#13'OS Exceptions'#11'CLIENTWIDTH'#3#220#1
+#12'CLIENTHEIGHT'#3'p'#1#4'LEFT'#2#2#6'HEIGHT'#3'p'#1#3'TOP'#2#28#5'WIDTH'#3
+#220#1#0#9'TGROUPBOX'#9'gbSignals'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'CAPT'
+'ION'#6#7'Signals'#12'CLIENTHEIGHT'#3'Q'#1#11'CLIENTWIDTH'#3#208#1#5'COLOR'#4
+#15#0#0#128#11'PARENTCOLOR'#9#11'PARENTCTL3D'#8#8'TABORDER'#2#0#4'LEFT'#2#4#6
+'HEIGHT'#3'b'#1#3'TOP'#2#8#5'WIDTH'#3#212#1#0#7'TBUTTON'#15'cmdSignalRemove'
+#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'ENABLED'#8#7'CAPTION'#6#6'Remove'#7'TA'
+'BSTOP'#9#8'TABORDER'#2#0#4'LEFT'#3'}'#1#6'HEIGHT'#2#25#3'TOP'#3'1'#1#5'WIDT'
+'H'#2'K'#0#0#7'TBUTTON'#12'cmdSignalAdd'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7
+'CAPTION'#6#3'Add'#7'TABSTOP'#9#8'TABORDER'#2#1#4'LEFT'#3'('#1#6'HEIGHT'#2#25
+#3'TOP'#3'1'#1#5'WIDTH'#2'K'#0#0#9'TLISTVIEW'#9'lvSignals'#7'ANCHORS'#11#5'a'
+'ktop'#6'akleft'#0#5'COLOR'#4#15#0#0#128#7'COLUMNS'#14#1#7'CAPTION'#6#4'Name'
+#7'VISIBLE'#9#5'WIDTH'#3#200#0#0#1#7'CAPTION'#6#2'ID'#7'VISIBLE'#9#5'WIDTH'#2
+'2'#0#1#7'CAPTION'#6#10'Handled by'#7'VISIBLE'#9#5'WIDTH'#2'K'#0#1#7'CAPTION'
+#6#6'Resume'#7'VISIBLE'#9#5'WIDTH'#2'K'#0#0#9'POPUPMENU'#7#9'popSignal'#9'VI'
+'EWSTYLE'#7#8'vsreport'#4'LEFT'#2#8#6'HEIGHT'#3'$'#1#3'TOP'#2#5#5'WIDTH'#3
+#192#1#0#0#0#0#0#7'TBUTTON'#9'cmdCancel'#7'ANCHORS'#11#5'aktop'#6'akleft'#0
+#11'MODALRESULT'#2#2#6'CANCEL'#9#7'CAPTION'#6#6'Cancel'#7'TABSTOP'#9#8'TABOR'
+'DER'#2#1#4'LEFT'#3#144#1#6'HEIGHT'#2#25#3'TOP'#3#152#1#5'WIDTH'#2'K'#0#0#7
+'TBUTTON'#5'cmdOK'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'DEFAULT'#9#7'CAPTION'
+#6#2'OK'#7'TABSTOP'#9#8'TABORDER'#2#2#7'ONCLICK'#7#10'cmdOKCLICK'#4'LEFT'#3
+'@'#1#6'HEIGHT'#2#25#3'TOP'#3#152#1#5'WIDTH'#2'K'#0#0#10'TPOPUPMENU'#9'popSi'
+'gnal'#4'left'#3#152#1#3'top'#2#20#0#9'TMENUITEM'#19'mnuHandledByProgram'#9
+'AUTOCHECK'#9#7'CAPTION'#6#18'Handled by Program'#10'GROUPINDEX'#2#1#9'RADIO'
+'ITEM'#9#0#0#9'TMENUITEM'#21'mnuiHandledByDebugger'#9'AUTOCHECK'#9#7'CAPTION'
+#6#19'Handled by Debugger'#10'GROUPINDEX'#2#1#9'RADIOITEM'#9#0#0#9'TMENUITEM'
+#2'N1'#7'CAPTION'#6#1'-'#0#0#9'TMENUITEM'#16'mnuResumeHandled'#9'AUTOCHECK'#9
+#7'CAPTION'#6#14'Resume Handled'#10'GROUPINDEX'#2#2#9'RADIOITEM'#9#0#0#9'TME'
+'NUITEM'#18'mnuResumeUnhandled'#9'AUTOCHECK'#9#7'CAPTION'#6#16'Resume Unhand'
+'led'#10'GROUPINDEX'#2#2#9'RADIOITEM'#9#0#0#0#0
]);

View File

@ -413,8 +413,6 @@ begin
VirtualKeyStrings:=TStringHashList.Create(true);
for i:=1 to 300 do
VirtualKeyStrings.Add(KeyAndShiftStateToStr(i,[]),Pointer(i));
for i:=VK_IRREGULAR+33 to VK_IRREGULAR+255 do
VirtualKeyStrings.Add(KeyAndShiftStateToStr(i,[]),Pointer(i));
end;
end else
exit;
@ -1290,84 +1288,79 @@ var
if ssShift in ShiftState then AddAttribute('Shift');
end;
// Tricky routine. This only works for western languages
// TODO: This should be replaces by the winapi VKtoChar functions
//
procedure AddKey;
begin
if p>0 then AddStr(' ');
case Key of
VK_UNKNOWN :AddStr(srVK_UNKNOWN);
VK_LBUTTON :AddStr(srVK_LBUTTON);
VK_RBUTTON :AddStr(srVK_RBUTTON);
VK_CANCEL :AddStr(dlgCancel);
VK_MBUTTON :AddStr(srVK_MBUTTON);
VK_BACK :AddStr(srVK_BACK);
VK_TAB :AddStr(srVK_TAB);
VK_CLEAR :AddStr(srVK_CLEAR);
VK_RETURN :AddStr(srVK_RETURN);
VK_SHIFT :AddStr(srVK_SHIFT);
VK_CONTROL :AddStr(srVK_CONTROL);
VK_MENU :AddStr(srVK_MENU);
VK_PAUSE :AddStr(srVK_PAUSE);
VK_CAPITAL :AddStr(srVK_CAPITAL);
VK_KANA :AddStr(srVK_KANA);
// VK_HANGUL :AddStr('Hangul');
VK_JUNJA :AddStr(srVK_JUNJA);
VK_FINAL :AddStr(srVK_FINAL);
VK_HANJA :AddStr(srVK_HANJA );
// VK_KANJI :AddStr('Kanji');
VK_ESCAPE :AddStr(srVK_ESCAPE);
VK_CONVERT :AddStr(srVK_CONVERT);
VK_NONCONVERT :AddStr(srVK_NONCONVERT);
VK_ACCEPT :AddStr(srVK_ACCEPT);
VK_MODECHANGE :AddStr(srVK_MODECHANGE);
VK_SPACE :AddStr(srVK_SPACE);
VK_PRIOR :AddStr(srVK_PRIOR);
VK_NEXT :AddStr(srVK_NEXT);
VK_END :AddStr(srVK_END);
VK_HOME :AddStr(srVK_HOME);
VK_LEFT :AddStr(srVK_LEFT);
VK_UP :AddStr(srVK_UP);
VK_RIGHT :AddStr(srVK_RIGHT);
VK_DOWN :AddStr(dlgdownword);
VK_SELECT :AddStr(lismenuselect);
VK_PRINT :AddStr(srVK_PRINT);
VK_EXECUTE :AddStr(srVK_EXECUTE);
VK_SNAPSHOT :AddStr(srVK_SNAPSHOT);
VK_INSERT :AddStr(srVK_INSERT);
VK_DELETE :AddStr(dlgeddelete);
VK_HELP :AddStr(srVK_HELP);
VK_0..VK_9 :AddStr(IntToStr(Key-VK_0));
VK_A..VK_Z :AddStr(chr(ord('A')+Key-VK_A));
VK_LWIN :AddStr(srVK_LWIN);
VK_RWIN :AddStr(srVK_RWIN);
VK_APPS :AddStr(srVK_APPS);
VK_NUMPAD0..VK_NUMPAD9: AddStr(Format(srVK_NUMPAD,[Key-VK_NUMPAD0]));
VK_MULTIPLY :AddStr('*');
VK_ADD :AddStr('+');
VK_SEPARATOR :AddStr('|');
VK_SUBTRACT :AddStr('-');
VK_DECIMAL :AddStr('.');
VK_DIVIDE :AddStr('/');
VK_F1..VK_F24 : AddStr('F'+IntToStr(Key-VK_F1+1));
VK_NUMLOCK :AddStr(srVK_NUMLOCK);
VK_SCROLL :AddStr(srVK_SCROLL);
VK_EQUAL :AddStr('=');
VK_COMMA :AddStr(',');
VK_POINT :AddStr('.');
VK_SLASH :AddStr('/');
VK_AT :AddStr('@');
VK_UNKNOWN :AddStr(srVK_UNKNOWN);
VK_LBUTTON :AddStr(srVK_LBUTTON);
VK_RBUTTON :AddStr(srVK_RBUTTON);
VK_CANCEL :AddStr(dlgCancel);
VK_MBUTTON :AddStr(srVK_MBUTTON);
VK_BACK :AddStr(srVK_BACK);
VK_TAB :AddStr(srVK_TAB);
VK_CLEAR :AddStr(srVK_CLEAR);
VK_RETURN :AddStr(srVK_RETURN);
VK_SHIFT :AddStr(srVK_SHIFT);
VK_CONTROL :AddStr(srVK_CONTROL);
VK_MENU :AddStr(srVK_MENU);
VK_PAUSE :AddStr(srVK_PAUSE);
VK_CAPITAL :AddStr(srVK_CAPITAL);
VK_KANA :AddStr(srVK_KANA);
// VK_HANGUL :AddStr('Hangul');
VK_JUNJA :AddStr(srVK_JUNJA);
VK_FINAL :AddStr(srVK_FINAL);
VK_HANJA :AddStr(srVK_HANJA );
// VK_KANJI :AddStr('Kanji');
VK_ESCAPE :AddStr(srVK_ESCAPE);
VK_CONVERT :AddStr(srVK_CONVERT);
VK_NONCONVERT :AddStr(srVK_NONCONVERT);
VK_ACCEPT :AddStr(srVK_ACCEPT);
VK_MODECHANGE :AddStr(srVK_MODECHANGE);
VK_SPACE :AddStr(srVK_SPACE);
VK_PRIOR :AddStr(srVK_PRIOR);
VK_NEXT :AddStr(srVK_NEXT);
VK_END :AddStr(srVK_END);
VK_HOME :AddStr(srVK_HOME);
VK_LEFT :AddStr(srVK_LEFT);
VK_UP :AddStr(srVK_UP);
VK_RIGHT :AddStr(srVK_RIGHT);
VK_DOWN :AddStr(dlgdownword);
VK_SELECT :AddStr(lismenuselect);
VK_PRINT :AddStr(srVK_PRINT);
VK_EXECUTE :AddStr(srVK_EXECUTE);
VK_SNAPSHOT :AddStr(srVK_SNAPSHOT);
VK_INSERT :AddStr(srVK_INSERT);
VK_DELETE :AddStr(dlgeddelete);
VK_HELP :AddStr(srVK_HELP);
VK_0..VK_9 :AddStr(IntToStr(Key-VK_0));
VK_A..VK_Z :AddStr(chr(ord('A')+Key-VK_A));
VK_LWIN :AddStr(srVK_LWIN);
VK_RWIN :AddStr(srVK_RWIN);
VK_APPS :AddStr(srVK_APPS);
VK_NUMPAD0..VK_NUMPAD9: AddStr(Format(srVK_NUMPAD,[Key-VK_NUMPAD0]));
VK_MULTIPLY :AddStr('*');
VK_ADD :AddStr('+');
VK_SEPARATOR :AddStr('|');
VK_SUBTRACT :AddStr('-');
VK_DECIMAL :AddStr('.');
VK_DIVIDE :AddStr('/');
VK_F1..VK_F24 : AddStr('F'+IntToStr(Key-VK_F1+1));
VK_NUMLOCK :AddStr(srVK_NUMLOCK);
VK_SCROLL :AddStr(srVK_SCROLL);
// VK_EQUAL :AddStr('=');
// VK_COMMA :AddStr(',');
// VK_POINT :AddStr('.');
// VK_SLASH :AddStr('/');
// VK_AT :AddStr('@');
else
if (Key>=VK_IRREGULAR+33) and (Key<=VK_IRREGULAR+255) then
begin
AddStr(srVK_IRREGULAR);
AddStr(chr(Key-VK_IRREGULAR));
end
else
begin
AddStr(UnknownVKPrefix);
AddStr(IntToStr(Key));
AddStr(UnknownVKPostfix);
end;
AddStr(UnknownVKPrefix);
AddStr(IntToStr(Key));
AddStr(UnknownVKPostfix);
end;
end;

View File

@ -416,6 +416,15 @@ begin
inherited KeyDown(Key, Shift);
end;
procedure TCustomComboBox.KeyPress(var Key : Char);
begin
if (Style=csDropDownList) and (Ord(Key)>31) then
Key:=#0
else
Inherited KeyPress(Key);
end;
{------------------------------------------------------------------------------
function TCustomComboBox.SelectItem(const AnItem: String): Boolean;
@ -789,6 +798,9 @@ end;
{
$Log$
Revision 1.33 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.32 2003/09/20 13:27:49 mattias
varois improvements for ParentColor from Micha

View File

@ -1799,6 +1799,11 @@ begin
Result := false;
end;
function TInterfaceBase.VkKeyScan(AChar: Char): Short;
begin
Result := -1; // $FFFF
end;
Function TInterfaceBase.WindowFromPoint(Point : TPoint) : HWND;
begin
Result := 0;
@ -1828,6 +1833,9 @@ end;
{ =============================================================================
$Log$
Revision 1.104 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.103 2003/08/31 17:30:49 mattias
fixed TControl painting for win32

View File

@ -201,6 +201,11 @@ Begin
Result := InterfaceObject.CreateRectRgn(X1,Y1,X2,Y2);
end;
Procedure DeleteCriticalSection(var CritSection: TCriticalSection);
begin
InterfaceObject.DeleteCriticalSection(CritSection);
end;
function DeleteDC(hDC: HDC): Boolean;
begin
Result := InterfaceObject.DeleteDC(hDC);
@ -256,6 +261,11 @@ Begin
Result:=InterfaceObject.EndPaint(Handle,PS);
end;
procedure EnterCriticalSection(var CritSection: TCriticalSection);
begin
InterfaceObject.EnterCriticalSection(CritSection);
end;
function Ellipse(DC: HDC; x1,y1,x2,y2: Integer): Boolean;
begin
Result := InterfaceObject.Ellipse(DC,x1,y1,x2,y2);
@ -696,6 +706,16 @@ begin
Result := InterfaceObject.IsWindowVisible(Handle);
end;
procedure InitializeCriticalSection(var CritSection: TCriticalSection);
begin
InterfaceObject.InitializeCriticalSection(CritSection);
end;
procedure LeaveCriticalSection(var CritSection: TCriticalSection);
begin
InterfaceObject.LeaveCriticalSection(CritSection);
end;
function LineTo(DC: HDC; X, Y: Integer): Boolean;
begin
Result := InterfaceObject.LineTo(DC, X, Y);
@ -1146,31 +1166,16 @@ begin
Result := InterfaceObject.UpdateWindow(Handle);
end;
function VkKeyScan(AChar: Char): Short;
begin
Result := InterfaceObject.VkKeyScan(AChar);
end;
function WindowFromPoint(Point : TPoint) : HWND;
begin
Result := InterfaceObject.WindowFromPoint(Point);
end;
Procedure InitializeCriticalSection(var CritSection: TCriticalSection);
begin
InterfaceObject.InitializeCriticalSection(CritSection);
end;
Procedure EnterCriticalSection(var CritSection: TCriticalSection);
begin
InterfaceObject.EnterCriticalSection(CritSection);
end;
Procedure LeaveCriticalSection(var CritSection: TCriticalSection);
begin
InterfaceObject.LeaveCriticalSection(CritSection);
end;
Procedure DeleteCriticalSection(var CritSection: TCriticalSection);
begin
InterfaceObject.DeleteCriticalSection(CritSection);
end;
//##apiwiz##eps## // Do not remove
{******************************************************************************
@ -1677,6 +1682,9 @@ end;
{ =============================================================================
$Log$
Revision 1.99 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.98 2003/09/01 07:27:41 mattias
fixed typo

View File

@ -85,6 +85,7 @@ function CreatePolygonRgn(Points: PPoint; NumPts: Integer; FillMode: integer): H
function CreateRectRgn(X1,Y1,X2,Y2 : Integer): HRGN; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
//function CreateRectRgnIndirect --> independent
Procedure DeleteCriticalSection(var CritSection: TCriticalSection); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function DeleteDC(hDC: HDC): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function DeleteObject(GDIObject: HGDIOBJ): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function DestroyCaret(Handle : HWND): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
@ -97,6 +98,8 @@ function EnableMenuItem(hndMenu: HMENU; uIDEnableItem: Integer; bEnable: Boolean
function EnableScrollBar(Wnd: HWND; wSBflags, wArrows: Cardinal): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function EnableWindow(hWnd: HWND; bEnable: Boolean): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
Function EndPaint(Handle : hwnd; var PS : TPaintStruct): Integer; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
Procedure EnterCriticalSection(var CritSection: TCriticalSection); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function Ellipse(DC: HDC; x1, y1, x2, y2: Integer): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
//function EqualRect --> independent
Function ExcludeClipRect(dc: hdc; Left, Top, Right, Bottom : Integer) : Integer; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
@ -173,6 +176,7 @@ function GradientFill(DC: HDC; Vertices: PTriVertex; NumVertices : Longint;
function HideCaret(hWnd: HWND): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
//function InflateRect --> independent
Procedure InitializeCriticalSection(var CritSection: TCriticalSection); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function IntersectClipRect(dc: hdc; Left, Top, Right,Bottom: Integer): Integer; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
//function IntersectRect --> independent
Function InvalidateFrame(aHandle : HWND; ARect : pRect; bErase : Boolean; BorderWidth: integer) : Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
@ -182,6 +186,7 @@ function IsDBCSLeadByte(TestChar: Byte): boolean; {$IFDEF IF_BASE_MEMBER}virtual
//function IsRectEmpty --> independent
function IsWindowVisible(handle: HWND): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
Procedure LeaveCriticalSection(var CritSection: TCriticalSection); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function LineTo(DC: HDC; X, Y: Integer): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
Function LoadStockPixmap(StockID: longint) : HBitmap; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
@ -294,14 +299,10 @@ Function TextOut(DC: HDC; X,Y : Integer; Str : Pchar; Count: Integer) : Boolean;
function UpdateWindow(Handle: HWND): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
Procedure InitializeCriticalSection(var CritSection: TCriticalSection); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
Procedure EnterCriticalSection(var CritSection: TCriticalSection); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
Procedure LeaveCriticalSection(var CritSection: TCriticalSection); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
Procedure DeleteCriticalSection(var CritSection: TCriticalSection); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
//function UnionRect --> independent
function VkKeyScan(AChar: Char): Short; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
Function WindowFromPoint(Point : TPoint) : HWND; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
//##apiwiz##eps## // Do not remove
{******************************************************************************
@ -397,6 +398,9 @@ procedure RaiseLastOSError;
{ =============================================================================
$Log$
Revision 1.89 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.88 2003/08/31 17:30:49 mattias
fixed TControl painting for win32

View File

@ -175,11 +175,6 @@ end;
-------------------------------------------------------------------------------}
{$IFDEF CustomFonts}
procedure ModifyWidgetStyle(AWinControl: TWinControl; AWidget: PGtkWidget);
{$IFDEF Win32}
begin
// not supported under win32
end;
{$ELSE not win32}
var
RCStyle: PGtkRcStyle;
begin
@ -200,7 +195,6 @@ end;
gtk_rc_style_unref(RCStyle);
{$EndIf}
end;
{$ENDIF not win32}
{$ENDIF CustomFonts}
function gtkRealizeAfterCB(Widget: PGtkWidget; Data: Pointer): GBoolean; cdecl;
@ -573,78 +567,127 @@ function GTKKeyUpDown(Widget: PGtkWidget; Event : pgdkeventkey;
Data: gPointer) : GBoolean; cdecl;
var
Msg: TLMKey;
Code,
KeyCode: Word;
Flags: Integer;
Toggle, Extended, SysKey: Boolean;
ShiftState: TShiftState;
EventStopped: Boolean;
TopLevel: PGtkWidget;
theString : PPgChar;
EventString: ^TByteArray; // GTK1 and GTK2 workaround
// (and easy access to bytes)
procedure StopKeyEvent(const EventName: PChar);
procedure StopKeyEvent(const AEventName: PChar);
begin
if not EventStopped then begin
g_signal_stop_emission_by_name (GTK_OBJECT (Widget), EventName);
EventStopped:=true;
if not EventStopped
then begin
g_signal_stop_emission_by_name(PGtkObject(Widget), AEventName);
EventStopped := True;
end;
gdk_event_key_get_string(Event, theString);
If (Msg.CharCode >= 31) or (Msg.CharCode = 0) then begin
{$IfNDef Win32}
If theString^ <> nil then begin
theString^[0] := Char(Msg.CharCode);
theString^[1] := #0;
if (Msg.CharCode >= 31)
or (Msg.CharCode = 0)
then begin
//MWE: Why is the string set if we stop the event ?
//MWE: still need to skip on win32 ?
{MWE:.$IfNDef Win32}
if EventString <> nil
then begin
EventString^[0] := Msg.CharCode;
EventString^[1] := 0;
end;
{$EndIf}
{MWE:.$EndIf}
Event^.KeyVal := Msg.CharCode;
If Msg.CharCode <> VK_UNKNOWN then
KeyCode := Msg.CharCode
else
KeyCode := $FFFF;
end else begin
end
else begin
Event^.KeyVal := 0;
KeyCode := $FFFF;
end;
end;
function CanSendChar: Boolean;
begin
Result := False;
if Event^.Length > 1 then Exit;
// Check if CTRL is pressed
if ((Event^.State and GDK_CONTROL_MASK) <> 0)
then begin
// Check if we pressed ^@
if (Event^.Length = 0)
and (Event^.KeyVal = GDK_KEY_AT)
then begin
Result := True;
Exit;
end;
// check if we send the ^Char subset
if (Event^.Length = 1) and (EventString <> nil)
then begin
Result := (EventString^[0] > 0) and (EventString^[0] < $20);
end;
Exit;
end;
Result := (Event^.Length = 1) and (EventString <> nil);
end;
var
VKey: TVKeyRecord;
CommonKeyData: Integer;
Flags: Integer;
SysKey: Boolean;
R: Boolean;
TopLevel: PGtkWidget;
begin
Result := true;
EventStopped:=false;
R := True;
EventStopped := False;
{$IFDEF GTK2}
EventString := Pointer(Event^._string);
{$ELSE}
EventString := Pointer(Event^.theString);
{$ENDIF}
//writeln('[GTKKeyUpDown] ',TControl(Data).Name,':',TControl(Data).ClassName,' ',Event^.theType);
FillChar(Msg,SizeOf(Msg),0);
GetGTKKeyInfo(Event,KeyCode,Msg.CharCode,SysKey,Extended,Toggle,ShiftState);
VKey := KeySymToVKey(Event^.keyval);
Flags := 0;
if Extended then Flags := KF_EXTENDED;
if SysKey then Flags := Flags or KF_ALTDOWN;
Msg.KeyData := $00000000; //TODO: OEM char
if (VKey.Flags and VKEY_FLAG_EXT) <> 0
then Flags := KF_EXTENDED;
SysKey := False;
if (VKey.Flags and VKEY_FLAG_ALT) = 0
then begin
// VKey is without ALT so Alt is syskey
SysKey := (Event^.State and GDK_MOD1_MASK) <> 0;
end
else begin
// VKey is with ALT so SHFT Alt is syskey
SysKey := (Event^.State and (GDK_MOD1_MASK or GDK_SHIFT_MASK)) = (GDK_MOD1_MASK or GDK_SHIFT_MASK);
end;
//writeln('[GTKKeyUpDown] ',TControl(Data).Name,':',TControl(Data).ClassName,' ',Event^.theType);
if SysKey
then Flags := Flags or KF_ALTDOWN;
CommonKeyData := MVKeyInfo[VKey.VKey].KeyCode shl 16; // ScanCode
case gdk_event_get_type(Event) of
GDK_KEY_RELEASE:
begin
{writeln('[GTKKeyUpDown] RELEASE ',TControl(Data).Name,':',TControl(Data).ClassName,
' Code=',KeyCode,
' Char=',Msg.CharCode,' Sys=',SysKey,' Ext=',Extended,' Toggle=',Toggle);}
EventTrace('key up', data);
Msg.CharCode := VKey.VKey;
if SysKey
then Msg.msg := LM_SYSKEYUP
else Msg.msg := LM_KEYUP;
Flags := Flags or KF_UP or KF_REPEAT;
Msg.KeyData := Msg.KeyData or (Flags shl 16) or $0001 {allways};
Msg.KeyData := CommonKeyData or (Flags shl 16) or $0001 {always};
// send the message directly to the LCL
Msg.Result:=0;
Code := Msg.CharCode;
NotifyApplicationUserInput(Msg.Msg);
Result := DeliverMessage(Data, Msg)=0;
R := DeliverMessage(Data, Msg) = 0;
If Msg.CharCode <> Code then begin
if Msg.CharCode <> VKey.VKey
then begin
// key was handled by LCL
StopKeyEvent('key_release_event');
end;
@ -652,19 +695,10 @@ begin
GDK_KEY_PRESS:
begin
{writeln('[GTKKeyUpDown] PRESS ',TControl(Data).Name,':',TControl(Data).ClassName,
' Widget=',HexStr(Cardinal(Widget),8));
writeln(' Event^.KeyVal=',Event^.KeyVal,
' State=',HexStr(Cardinal(Event^.State),8),
' KeyCode=',KeyCode,
' VK=',Msg.CharCode,
' SysKey=',SysKey,
' Extended=',Extended,
' Toggle=',Toggle
);}
EventTrace('key down', data);
Msg.CharCode := VKey.VKey;
if SysKey
then Msg.msg := LM_SYSKEYDOWN
else Msg.msg := LM_KEYDOWN;
@ -672,59 +706,79 @@ begin
// todo repeat
// Flags := Flags or KF_REPEAT;
Msg.KeyData := Msg.KeyData or (Flags shl 16) or $0001 {TODO: repeatcount};
Code := Msg.CharCode;
Msg.KeyData := CommonKeyData or (Flags shl 16) or $0001 {TODO: repeatcount};
// send the message directly to the LCL
NotifyApplicationUserInput(Msg.Msg);
//writeln('GTKKeyUpDown Key Send to ',TControl(Data).Name,':',TControl(Data).ClassName,' ',Code=VK_TAB);
Result := DeliverMessage(Data, Msg)=0;
R := DeliverMessage(Data, Msg) = 0;
If Msg.CharCode <> Code then begin
if Msg.CharCode <> Vkey.Vkey
then begin
// key was changed by LCL
//writeln('GTKKeyUpDown Key CHANGED 1 ',TControl(Data).Name,':',TControl(Data).ClassName);
StopKeyEvent('key_press_event');
end;
if (KeyCode <> $FFFF)
if not EventStopped and CanSendChar
then begin
EventTrace('char', data);
FillChar(Msg,SizeOf(Msg),0);
Msg.KeyData := $00000000; //TODO: OEM char
if SysKey then
Msg.msg := LM_SYSCHAR
else
Msg.msg := LM_CHAR;
Msg.CharCode := KeyCode;
Msg.KeyData := CommonKeyData;
if SysKey
then Msg.msg := LM_SYSCHAR
else Msg.msg := LM_CHAR;
if Event^.Length = 0
then Msg.CharCode := 0 // ^@ was pressed
else Msg.CharCode := EventString^[0];
Msg.Result:=0;
// send the message directly (not queued) to the LCL
Result:=DeliverMessage(Data, Msg)=0;
If Msg.CharCode <> KeyCode then begin
R := DeliverMessage(Data, Msg) = 0;
if (Event^.Length > 0) and (Msg.CharCode <> EventString^[0])
then begin
// key was handled by lcl
//writeln('GTKKeyUpDown Key CHANGED 2 ',TControl(Data).Name,':',TControl(Data).ClassName);
StopKeyEvent('key_press_event');
end;
end;
//This is disabled on account of the
//strange behaviour in TSynEdit
If Msg.CharCode = VK_TAB then
If TObject(Data) is TControl then begin
TopLevel := gtk_widget_get_toplevel(Widget);
if GtkWidgetIsA(TopLevel, gtk_window_get_type)
and (PGtkWindow(TopLevel)^.focus_widget=Widget) then begin
StopKeyEvent('key_press_event');
//writeln('GTKKeyUpDown ',TControl(Data).Name,':',TControl(Data).ClassName);
Result:=TControl(Data).PerformTab(not (ssShift in ShiftState));
If Result then begin
{$IfNDef Win32}
gdk_event_key_get_string(Event, theString);
theString^[0] := #0;
{$EndIf}
Event^.KeyVal := 0;
end;
if (Msg.CharCode = VK_TAB)
and (TObject(Data) is TControl)
then begin
TopLevel := gtk_widget_get_toplevel(Widget);
if GtkWidgetIsA(TopLevel, gtk_window_get_type)
and (PGtkWindow(TopLevel)^.focus_widget = Widget)
then begin
StopKeyEvent('key_press_event');
// ??? Forward was true when shift was pressed
// to me that is backward
R := TControl(Data).PerformTab((Event^.State and GDK_SHIFT_MASK) = 0);
if R
then begin
//MWE: still need to skip on win32 ?
{MWE:.$IfNDef Win32}
if (EventString <> nil)
and (Event^.Length > 0)
then EventString^[0] := 0;
{MWE:.$EndIf}
Event^.KeyVal := 0;
end;
end;
end;
end;
end;
{$IFDEF GTK1}
Result := R;
{$ELSE}
Result := False;
{$ENDIF}
//writeln('AAA1 [GTKKeyUpDown] ',TControl(Data).Name,':',TControl(Data).ClassName,' Result=',Result);
end;
@ -1081,11 +1135,11 @@ function gtkMotionNotify(Widget:PGTKWidget; Event: PGDKEventMotion;
var
DesignOnlySignal: boolean;
begin
{$ifdef GTK2}
Result := False;
{$Else}
{$IFDEF GTK1}
Result := True;
{$endif}
{$ELSE}
Result := False;
{$ENDIF}
{$IFDEF VerboseMouseBugfix}
DesignOnlySignal:=GetDesignOnlySignalFlag(Widget,dstMouseMotion);
@ -1121,11 +1175,11 @@ end;
function GTKMotionNotifyAfter(widget:PGTKWidget; event: PGDKEventMotion;
data: gPointer): GBoolean; cdecl;
begin
{$ifdef GTK2}
Result := False;
{$Else}
{$IFDEF GTK1}
Result := True;
{$endif}
{$ELSE}
Result := False;
{$ENDIF}
{$IFDEF VerboseMouseBugfix}
writeln('[GTKMotionNotifyAfter] ',
@ -1367,11 +1421,11 @@ function gtkMouseBtnPress(widget: PGtkWidget; event : pgdkEventButton;
var
DesignOnlySignal: boolean;
begin
{$ifdef GTK2}
Result := False;
{$Else}
{$IFDEF GTK1}
Result := True;
{$endif}
{$ELSE}
Result := False;
{$ENDIF}
{$IFDEF VerboseMouseBugfix}
writeln('');
@ -1423,11 +1477,11 @@ end;
function gtkMouseBtnPressAfter(widget: PGtkWidget; event : pgdkEventButton;
data: gPointer) : GBoolean; cdecl;
begin
{$ifdef GTK2}
Result := False;
{$Else}
{$IFDEF GTK1}
Result := True;
{$endif}
{$ELSE}
Result := False;
{$ENDIF}
{$IFDEF VerboseMouseBugfix}
{writeln('[gtkMouseBtnPressAfter] ',
@ -1543,11 +1597,11 @@ function gtkMouseBtnRelease(widget: PGtkWidget; event : pgdkEventButton;
var
DesignOnlySignal: boolean;
begin
{$ifdef GTK2}
Result := False;
{$Else}
{$IFDEF GTK1}
Result := True;
{$endif}
{$ELSE}
Result := False;
{$ENDIF}
{$IFDEF VerboseMouseBugfix}
DesignOnlySignal:=GetDesignOnlySignalFlag(Widget,dstMouseRelease);
@ -1591,11 +1645,11 @@ end;
function gtkMouseBtnReleaseAfter(widget: PGtkWidget; event : pgdkEventButton;
data: gPointer) : GBoolean; cdecl;
begin
{$ifdef GTK2}
Result := False;
{$Else}
{$IFDEF GTK1}
Result := True;
{$endif}
{$ELSE}
Result := False;
{$ENDIF}
{$IFDEF VerboseMouseBugfix}
{writeln('[gtkMouseBtnReleaseAfter] ',
@ -1948,7 +2002,7 @@ begin
GDK_KEY_RELEASE, GDK_KEY_PRESS:
begin
if Event^.KeyVal=GDK_KEY_Escape
if Event^.KeyVal = GDK_KEY_Escape
then begin
StoreCommonDialogSetup(TCommonDialog(data));
TCommonDialog(data).UserChoice:=mrCancel;
@ -2787,75 +2841,100 @@ end;
function GTKKeySnooper(Widget: PGtkWidget; Event: PGdkEventKey;
FuncData: gPointer): gInt; cdecl;
var
//Msg: TLMKey;
KeyCode, VirtKeyCode: Word;
ListCode: Integer;
ListCodeToggle: integer;
Toggle, Extended, SysKey: Boolean;
ShiftState: TShiftState;
KeyStateList: TList;
procedure UpdateExtraKeyState(ListCode: integer; Pressed: boolean);
procedure UpdateToggleList(const AVKeyCode: Integer);
begin
if Pressed then begin
if KeyStateList.IndexOf(Pointer(ListCode)) <0 then begin
KeyStateList.Add(Pointer(ListCode));
end;
end else begin
KeyStateList.Remove(Pointer(ListCode));
// just remove the togglekey if present
KeyStateList.Remove(Pointer(ListCode or KEYMAP_TOGGLE));
// just remove the extendedkey if present
KeyStateList.Remove(Pointer(ListCode or KEYMAP_EXTENDED));
// Check for a toggle
// If the remove was successfull, the key was on
// else it was off so we should set the toggle flag
if KeyStateList.Remove(Pointer(AVKeyCode or KEYMAP_TOGGLE)) < 0
then KeyStateList.Add(Pointer(AVKeyCode or KEYMAP_TOGGLE));
end;
procedure UpdateList(const AVKeyCode: Integer; const APressed: Boolean);
begin
if AVKeyCode = 0 then Exit;
if APressed
then begin
if KeyStateList.IndexOf(Pointer(AVKeyCode)) < 0
then KeyStateList.Add(Pointer(AVKeyCode));
end
else begin
KeyStateList.Remove(Pointer(AVKeyCode));
end;
end;
procedure CheckExtraKeyState(ListCode: integer; Pressed: boolean);
begin
if VirtKeyCode<>ListCode then
UpdateExtraKeyState(ListCode,Pressed)
else if gdk_event_get_type(Event)=GDK_KEY_PRESS then
UpdateExtraKeyState(ListCode,true)
else if gdk_event_get_type(Event)=GDK_KEY_RELEASE then
UpdateExtraKeyState(ListCode,false);
end;
const
STATE_MAP: array[0..3] of Byte = (
GDK_SHIFT_MASK,
GDK_CONTROL_MASK,
GDK_MOD1_MASK,
GDK_MOD4_MASK
);
VK_MAP: array[0..3] of array[0..2] of Byte = (
// (Main key, alt key 1, alt key 2) to check
(VK_SHIFT, VK_LSHIFT, VK_RSHIFT),
(VK_CONTROL, VK_LCONTROL, VK_RCONTROL),
(VK_MENU, VK_LMENU, VK_RMENU),
(VK_LWIN, VK_RWIN, 0)
);
var
VKey: TVKeyRecord;
Pressed: Boolean;
n: Integer;
begin
if (Widget=nil) then ;
GetGTKKeyInfo(Event,KeyCode,VirtKeyCode,SysKey,Extended,Toggle,ShiftState);
KeyStateList:=TList(FuncData);
ListCode:=KeyToListCode(KeyCode, VirtKeyCode, Extended);
// update Ctrl, Shift, Alt
CheckExtraKeyState(VK_CONTROL,ssCtrl in ShiftState);
CheckExtraKeyState(VK_SHIFT,ssShift in ShiftState);
CheckExtraKeyState(VK_MENU,ssAlt in ShiftState);
case gdk_event_get_type(Event) of
GDK_KEY_PRESS:
begin
if KeyStateList.IndexOf(Pointer(ListCode)) <0
then begin
KeyStateList.Add(Pointer(ListCode));
ListCodeToggle:=ListCode or KEYMAP_TOGGLE;
if Toggle
and (KeyStateList.IndexOf(Pointer(ListCodeToggle)) <0) then
KeyStateList.Add(Pointer(ListCodeToggle));
end;
//else WriteLn(Format('WARNING: [GTKKeySnooper] Pressed key (0x%x) already pressed (LC=0x%x)', [KeyCode, ListCode]));
end;
GDK_KEY_RELEASE:
begin
{if KeyStateList.Remove(Pointer(ListCode)) = -1 then
WriteLn(Format('WARNING: [GTKKeySnooper] Released key (0x%x) not pressed (LC=0x%x)', [KeyCode, ListCode]));}
KeyStateList.Remove(Pointer(ListCode));
// just remove the togglekey if present
KeyStateList.Remove(Pointer(ListCode or KEYMAP_TOGGLE));
end;
else
WriteLn(Format('ERROR: [GTKKeySnooper] Got unknown event %d',[gdk_event_get_type(Event)]));
end;
Result := 0;
// TODO: Remove when KeyStateList is obsolete
case {$IFDEF GTK2} Event^._Type {$ELSE} Event^.theType {$ENDIF} of
GDK_KEY_PRESS: Pressed := True;
GDK_KEY_RELEASE: Pressed := False;
else
// not interested
Exit;
end;
VKey := KeySymToVKey(Event^.keyval);
if VKey.VKey = $FF
then begin
WriteLN('[WARNING] Key pressed without VKey: ',
{$IFDEF GTK2} Event^._String {$ELSE} Event^.theString {$ENDIF} );
Exit;
end;
KeyStateList := TList(FuncData);
if KeyStateList = nil then Exit;
UpdateList(Vkey.VKey, Pressed);
if IsToggleKey(Vkey.VKey)
then UpdateToggleList(Vkey.VKey);
// Add special left and right codes
case Event^.KeyVal of
GDK_Key_Shift_L: UpdateList(VK_LSHIFT, Pressed);
GDK_Key_Shift_R: UpdateList(VK_RSHIFT, Pressed);
GDK_Key_Control_L: UpdateList(VK_LCONTROL, Pressed);
GDK_Key_Control_R: UpdateList(VK_RCONTROL, Pressed);
GDK_Key_Alt_L: UpdateList(VK_LMENU, Pressed);
GDK_Key_Alt_R: UpdateList(VK_RMENU, Pressed);
end;
// Recheck the list against the modifiers
for n := 0 to High(STATE_MAP) do
begin
// Skip our current key, since the state is updated after the event
if VKey.Vkey = VK_MAP[n][0] then Continue;
if VKey.Vkey = VK_MAP[n][1] then Continue;
if VKey.Vkey = VK_MAP[n][2] then Continue;
UpdateList(VK_MAP[n][0], (STATE_MAP[n] and Event^.State) <> 0);
UpdateList(VK_MAP[n][1], (STATE_MAP[n] and Event^.State) <> 0);
UpdateList(VK_MAP[n][2], (STATE_MAP[n] and Event^.State) <> 0);
end;
end;
function gtkYearChanged(Widget: PGtkWidget; data: gPointer) : GBoolean; cdecl;
@ -3107,6 +3186,9 @@ end;
{ =============================================================================
$Log$
Revision 1.202 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.201 2003/10/03 01:25:01 ajgenius
add more gtk1i<->gtk2 key & event wrappers,
move more GTK2 workarounds from gtk to gtk2 interface,

View File

@ -246,6 +246,90 @@ const
type
TGdkPixBufBuffer = {$IFDEF Gtk2}Pguchar{$ELSE}PChar{$ENDIF};
// MWE: All the IFDEFs for GTK2 annoyed me so I defined all (most) constants here
{$IFNDEF GTK2}
{$I gtkkeysyms.inc}
{$ENDIF}
// MWE:
// Additional GDK_KEY_xxx definitions, not defined in GDK. Since GDK (on Linux)
// simply passes the X vvalue I definde those extra here as GDKX_KEY_xxx
// I don't know what the values are in win32 so I assume the same
// Original source: /usr/X11R6/include/X11/XF86keysym.h
// Keys found on some "Internet" keyboards.
GDKX_KEY_Standby = $1008FF10;
GDKX_KEY_AudioLowerVolume = $1008FF11;
GDKX_KEY_AudioMute = $1008FF12;
GDKX_KEY_AudioRaiseVolume = $1008FF13;
GDKX_KEY_AudioPlay = $1008FF14;
GDKX_KEY_AudioStop = $1008FF15;
GDKX_KEY_AudioPrev = $1008FF16;
GDKX_KEY_AudioNext = $1008FF17;
GDKX_KEY_HomePage = $1008FF18;
GDKX_KEY_Mail = $1008FF19;
GDKX_KEY_Start = $1008FF1A;
GDKX_KEY_Search = $1008FF1B;
GDKX_KEY_AudioRecord = $1008FF1C;
// These are sometimes found on PDA's (e.g. Palm, PocketPC or elsewhere)
GDKX_KEY_Calculator = $1008FF1D;
GDKX_KEY_Memo = $1008FF1E;
GDKX_KEY_ToDoList = $1008FF1F;
GDKX_KEY_Calendar = $1008FF20;
GDKX_KEY_PowerDown = $1008FF21;
GDKX_KEY_ContrastAdjust = $1008FF22;
GDKX_KEY_RockerUp = $1008FF23;
GDKX_KEY_RockerDown = $1008FF24;
GDKX_KEY_RockerEnter = $1008FF25;
// Some more "Internet" keyboard symbols
GDKX_KEY_Back = $1008FF26;
GDKX_KEY_Forward = $1008FF27;
GDKX_KEY_Stop = $1008FF28;
GDKX_KEY_Refresh = $1008FF29;
GDKX_KEY_PowerOff = $1008FF2A;
GDKX_KEY_WakeUp = $1008FF2B;
GDKX_KEY_Eject = $1008FF2C;
GDKX_KEY_ScreenSaver = $1008FF2D;
GDKX_KEY_WWW = $1008FF2E;
GDKX_KEY_Sleep = $1008FF2F;
GDKX_KEY_Favorites = $1008FF30;
GDKX_KEY_AudioPause = $1008FF31;
GDKX_KEY_AudioMedia = $1008FF32;
GDKX_KEY_MyComputer = $1008FF33;
GDKX_KEY_VendorHome = $1008FF34;
GDKX_KEY_LightBulb = $1008FF35;
GDKX_KEY_Shop = $1008FF36;
GDKX_KEY_History = $1008FF37;
GDKX_KEY_OpenURL = $1008FF38;
GDKX_KEY_AddFavorite = $1008FF39;
GDKX_KEY_HotLinks = $1008FF3A;
GDKX_KEY_BrightnessAdjust = $1008FF3B;
GDKX_KEY_Finance = $1008FF3C;
GDKX_KEY_Community = $1008FF3D;
GDKX_KEY_Launch0 = $1008FF40;
GDKX_KEY_Launch1 = $1008FF41;
GDKX_KEY_Launch2 = $1008FF42;
GDKX_KEY_Launch3 = $1008FF43;
GDKX_KEY_Launch4 = $1008FF44;
GDKX_KEY_Launch5 = $1008FF45;
GDKX_KEY_Launch6 = $1008FF46;
GDKX_KEY_Launch7 = $1008FF47;
GDKX_KEY_Launch8 = $1008FF48;
GDKX_KEY_Launch9 = $1008FF49;
GDKX_KEY_LaunchA = $1008FF4A;
GDKX_KEY_LaunchB = $1008FF4B;
GDKX_KEY_LaunchC = $1008FF4C;
GDKX_KEY_LaunchD = $1008FF4D;
GDKX_KEY_LaunchE = $1008FF4E;
GDKX_KEY_LaunchF = $1008FF4F;
function NewPGDIObject: PGDIObject;
procedure DisposePGDIObject(GDIObject: PGdiObject);
@ -461,6 +545,9 @@ end.
{ =============================================================================
$Log$
Revision 1.49 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.48 2003/09/19 00:41:51 ajgenius
remove USE_PANGO define since pango now apears to work properly.

View File

@ -299,6 +299,7 @@ type
var
ModalWindows: TList; // list of PGtkWindow
implementation
initialization

View File

@ -37,6 +37,10 @@ interface
{ $DEFINE VerboseMouseBugfix}
{ $DEFINE RaiseExceptionOnNilPointers}
{$DEFINE Use_KeyStateList} // keep track of keystates instead of using OS
// This is the old mode and might be removed
{$IFDEF win32}
{$DEFINE NoGdkPixbufLib}
{$ELSE}
@ -59,7 +63,12 @@ uses
{$ELSE}
glib, gdk, gtk, {$Ifndef NoGdkPixbufLib}gdkpixbuf,{$EndIf}
{$ENDIF}
xlib,
{$IFDEF UNIX}
x, xlib,
{$ENDIF}
{$IFDEF WIN32}
Windows,
{$ENDIF}
SysUtils, Classes, ExtDlgs, Dialogs, Controls, Forms, LCLStrConsts, LMessages,
VclGlobals, LCLProc, LCLIntf, LCLType, gtkDef, DynHashArray, gtkMsgQueue,
GraphType, GraphMath, Graphics;
@ -68,7 +77,7 @@ uses
type
TgtkObject = class(TInterfaceBase)
protected
FKeyStateList: TList; // Keeps track of which keys are pressed
FKeyStateList_: TList; // Keeps track of which keys are pressed
FDeviceContexts: TDynHashArray;// hasharray of HDC
FGDIObjects: TDynHashArray; // hasharray of PGdiObject
FMessageQueue: TGtkMessageQueue; // queue of PMsg
@ -85,7 +94,9 @@ type
{$Else}
FNoteBookCloseBtnPixbuf : PGdkPixbuf;
{$EndIf}
FLogHandlerID: guint; // ID returend by set_handler
FStockNullBrush: HBRUSH;
FStockBlackBrush: HBRUSH;
FStockLtGrayBrush: HBRUSH;
@ -257,7 +268,7 @@ type
procedure RemoveCallbacks(Sender : TObject); virtual;
public
// for gtk specific components:
FLogHandlerID: Cardinal;
// FLogHandlerID: Cardinal;
procedure SetCallback(Msg : LongInt; Sender : TObject); virtual;
procedure SendPaintMessagesForInternalWidgets(AWinControl: TWinControl);
function LCLtoGtkMessagePending: boolean;virtual;
@ -299,6 +310,7 @@ uses
{$I gtkobject.inc}
{$I gtkwinapi.inc}
procedure InternalInit;
var
c: TClipboardType;
@ -386,6 +398,9 @@ end.
{ =============================================================================
$Log$
Revision 1.153 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.152 2003/09/22 19:17:26 ajgenius
begin implementing GtkTreeView for ListBox/CListBox

File diff suppressed because it is too large Load Diff

View File

@ -20,11 +20,7 @@ function gtkLVHScroll(AList: PGTKCList; AData: gPointer): GBoolean; cdecl;
var
Adjustment: PGTKAdjustment;
begin
{$IfNDef Win32}
Adjustment := gtk_clist_get_hadjustment(AList);
{$Else}
Adjustment := nil;
{$EndIf}
if Adjustment = nil
then Result := False
else Result := GTKHScrollCB(Adjustment, AData);
@ -36,11 +32,7 @@ function gtkLVVScroll(AList: PGTKCList; AData: gPointer): GBoolean; cdecl;
var
Adjustment: PGTKAdjustment;
begin
{$IfNDef Win32}
Adjustment := gtk_clist_get_vadjustment(AList);
{$Else}
Adjustment := nil;
{$EndIf}
if Adjustment = nil
then Result := False
else Result := GTKVScrollCB(Adjustment, AData);

View File

@ -160,7 +160,9 @@ begin
FFixWidgetsResized := TDynHashArray.Create(-1);
FTimerData := TList.Create;
FKeyStateList := TList.Create;
{$IFDEF Use_KeyStateList}
FKeyStateList_ := TList.Create;
{$ENDIF}
FRCFilename := ChangeFileExt(ParamStr(0),'.gtkrc');
FRCFileParsed := false;
@ -180,7 +182,11 @@ begin
// Initialize Stringlist for holding styles
Styles := TStringlist.Create;
gtk_key_snooper_install(@GTKKeySnooper, FKeyStateList);
{$IFDEF Use_KeyStateList}
gtk_key_snooper_install(@GTKKeySnooper, FKeyStateList_);
{$ELSE}
gtk_key_snooper_install(@GTKKeySnooper, nil);
{$ENDIF}
// Init tooltips
FGTKToolTips := gtk_tooltips_new;
@ -375,7 +381,9 @@ begin
FMessageQueue.Free;
FDeviceContexts.Free;
FGDIObjects.Free;
FKeyStateList.Free;
{$IFDEF Use_KeyStateList}
FKeyStateList_.Free;
{$ENDIF}
FTimerData.Free;
// finally remove our loghandler
@ -1461,6 +1469,7 @@ procedure TGtkObject.AppInit;
begin
If Assigned(Screen) then
FillScreenFonts(Screen.Fonts);
InitKeyboardTables;
end;
@ -3851,7 +3860,7 @@ begin
end;
{$EndIf}
csPage:
csPage:
SetNotebookPageTabLabel;
csComboBox :
@ -8454,6 +8463,9 @@ end;
{ =============================================================================
$Log$
Revision 1.433 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.432 2003/10/06 16:13:52 ajgenius
partly fixed gtk2 mouse offsets;
added new includes to gtk2 lpk

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,7 @@ unit GTKProc;
interface
{$IFDEF win32}
{$DEFINE NoGdkPixbufLib}
{.$DEFINE NoGdkPixbufLib}
{$ELSE}
{off $DEFINE NoGdkPixbufLib}
{$ENDIF}
@ -29,11 +29,13 @@ interface
uses
SysUtils, Classes,
{$IFDEF UNIX}
{$IFDEF GTK1}
{$Ifndef Win32}
X, XLib,//Font retrieval
{$EndIf}
{$EndIf}
// MWE:
// TODO: check if the new keyboard routines require X on GTK2
X, XLib, XUtil, //Font retrieval and Keyboard handling
{$ENDIF}
{$ENDIF}
InterfaceBase,
{$IFDEF gtk2}
glib2, gdk2pixbuf, gdk2, gtk2, Pango,
@ -43,7 +45,7 @@ uses
LMessages, Controls, Forms, VclGlobals, LCLProc,
LCLStrConsts, LCLIntf, LCLType, gtkDef, DynHashArray, LazLinkedList,
GraphType, GraphMath, Graphics, Buttons, Menus, GTKWinApiWindow, StdCtrls,
ComCtrls, CListBox, KeyMap, Calendar, Arrow, Spin, CommCtrl, ExtCtrls,
ComCtrls, CListBox, Calendar, Arrow, Spin, CommCtrl, ExtCtrls,
Dialogs, ExtDlgs, FileCtrl, LResources, Math, GTKGlobals;
@ -323,10 +325,22 @@ Procedure InitializePalette(Pal : PGDIObject; Entries : PPALETTEENTRY; RGBCount
function GetIndexAsKey(p: pointer): pointer;
function GetRGBAsKey(p: pointer): pointer;
function GTKEventState2ShiftState(KeyState: Word): TShiftState;
function KeyToListCode(KeyCode, VirtKeyCode: Word; Extended: boolean): integer;
procedure GetGTKKeyInfo(const Event: PGDKEventKey; var KeyCode,VirtualKey: Word;
var SysKey, Extended, Toggle: Boolean; var ShiftState: TShiftState);
// Keyboard functions
type
TVKeyInfo = record
KeyCode: Byte;
KeySym: array[0..3] of Integer;
KeyChar: array[0..3] of Char;
end;
procedure InitKeyboardTables;
function CharToVKandFlags(const AChar: Char): Word;
function GetVKeyInfo(const AVKey: Byte): TVKeyInfo;
function IsToggleKey(const AVKey: Byte): Boolean;
//function GTKEventState2ShiftState(KeyState: Word): TShiftState;
//function KeyToListCode_(KeyCode, VirtKeyCode: Word; Extended: boolean): integer;
// ----
procedure StoreCommonDialogSetup(ADialog: TCommonDialog);
procedure DestroyCommonDialogAddOns(ADialog: TCommonDialog);
@ -398,9 +412,11 @@ var
DesignSignalMasks: array[TDesignSignalType] of TDesignSignalMask;
{$IFDEF GTK1}
var
X11Display : Pointer;//only needed to get X fonts
{$EndIf}
// MWE:
// TODO: check if the new keyboard routines require X on GTK2
function X11Display: Pointer;
{$ENDIF}
procedure InitDesignSignalMasks;
function DesignSignalNameToType(Name: PChar; After: boolean): TDesignSignalType;
function GetDesignSignalMask(Widget: PGtkWidget): TDesignSignalMask;
@ -526,105 +542,6 @@ procedure BeginGDKErrorTrap;
procedure EndGDKErrorTrap;
{$Ifdef GTK1}
const
GDK_key_dead_circumflex = GDK_dead_circumflex;
GDK_KEY_KP_Space = GDK_KP_Space;
GDK_KEY_KP_ENTER = GDK_KP_ENTER;
GDK_KEY_Tab = GDK_Tab;
GDK_KEY_ISO_Left_Tab = GDK_ISO_Left_Tab;
GDK_KEY_KP_Tab = GDK_KP_Tab;
GDK_KEY_RETURN = GDK_Return;
GDK_KEY_LINEFEED = GDK_LINEFEED;
GDK_KEY_INSERT = GDK_INSERT;
GDK_KEY_HOME = GDK_HOME;
GDK_KEY_LEFT = GDK_LEFT;
GDK_KEY_UP = GDK_UP;
GDK_KEY_RIGHT = GDK_RIGHT;
GDK_KEY_DOWN = GDK_DOWN;
GDK_KEY_Page_Up = GDK_Page_Up;
GDK_KEY_Page_Down = GDK_Page_Down;
GDK_KEY_End = GDK_End;
GDK_KEY_KP_INSERT = GDK_KP_INSERT;
GDK_KEY_KP_HOME = GDK_KP_HOME;
GDK_KEY_KP_LEFT = GDK_KP_LEFT;
GDK_KEY_KP_UP = GDK_KP_UP;
GDK_KEY_KP_RIGHT = GDK_KP_RIGHT;
GDK_KEY_KP_DOWN = GDK_KP_DOWN;
GDK_KEY_KP_PAGE_UP = GDK_KP_PAGE_UP;
GDK_KEY_KP_PAGE_DOWN = GDK_KP_PAGE_DOWN;
GDK_KEY_KP_END = GDK_KP_END;
GDK_KEY_Num_Lock = GDK_Num_Lock;
GDK_KEY_KP_F1 = GDK_KP_F1;
GDK_KEY_KP_F2 = GDK_KP_F2;
GDK_KEY_KP_F3 = GDK_KP_F3;
GDK_KEY_KP_F4 = GDK_KP_F4;
GDK_KEY_KP_EQUAL = GDK_KP_EQUAL;
GDK_KEY_KP_Multiply = GDK_KP_Multiply;
GDK_KEY_KP_Add = GDK_KP_Add;
GDK_KEY_KP_Separator = GDK_KP_Separator;
GDK_KEY_KP_Subtract = GDK_KP_Subtract;
GDK_KEY_KP_Decimal = GDK_KP_Decimal;
GDK_KEY_KP_Divide = GDK_KP_Divide;
GDK_KEY_KP_0 = GDK_KP_0;
GDK_KEY_KP_1 = GDK_KP_1;
GDK_KEY_KP_2 = GDK_KP_2;
GDK_KEY_KP_3 = GDK_KP_3;
GDK_KEY_KP_4 = GDK_KP_4;
GDK_KEY_KP_5 = GDK_KP_5;
GDK_KEY_KP_6 = GDK_KP_6;
GDK_KEY_KP_7 = GDK_KP_7;
GDK_KEY_KP_8 = GDK_KP_8;
GDK_KEY_KP_9 = GDK_KP_9;
GDK_KEY_BackSpace = GDK_BackSpace;
GDK_KEY_Clear = GDK_Clear_Key;
GDK_KEY_Pause = GDK_Pause;
GDK_KEY_Scroll_Lock = GDK_Scroll_Lock;
GDK_KEY_Sys_Req = GDK_Sys_Req;
GDK_KEY_Escape = GDK_Escape;
GDK_KEY_Delete = GDK_Delete_Key;
GDK_KEY_Kanji = GDK_Kanji;
GDK_KEY_Select = GDK_Select;
GDK_KEY_Print = GDK_Print;
GDK_KEY_Execute = GDK_Execute;
GDK_KEY_Menu = GDK_Menu;
GDK_KEY_Cancel = GDK_Cancel;
GDK_KEY_Help = GDK_Help;
GDK_KEY_Break = GDK_Break;
GDK_KEY_Mode_switch = GDK_Mode_switch;
GDK_KEY_Caps_Lock = GDK_Caps_Lock;
GDK_KEY_Shift_L = GDK_Shift_L;
GDK_KEY_Shift_R = GDK_Shift_R;
GDK_KEY_Control_L = GDK_Control_L;
GDK_KEY_Control_R = GDK_Control_R;
GDK_KEY_Alt_L = GDK_Alt_L;
GDK_KEY_Alt_R = GDK_Alt_R;
GDK_KEY_F1 = GDK_F1;
GDK_KEY_F2 = GDK_F2;
GDK_KEY_F3 = GDK_F3;
GDK_KEY_F4 = GDK_F4;
GDK_KEY_F5 = GDK_F5;
GDK_KEY_F6 = GDK_F6;
GDK_KEY_F7 = GDK_F7;
GDK_KEY_F8 = GDK_F8;
GDK_KEY_F9 = GDK_F9;
GDK_KEY_F10 = GDK_F10;
GDK_KEY_F11 = GDK_F11;
GDK_KEY_F12 = GDK_F12;
GDK_KEY_F13 = GDK_F13;
GDK_KEY_F14 = GDK_F14;
GDK_KEY_F15 = GDK_F15;
GDK_KEY_F16 = GDK_F16;
GDK_KEY_F17 = GDK_F17;
GDK_KEY_F18 = GDK_F18;
GDK_KEY_F19 = GDK_F19;
GDK_KEY_F20 = GDK_F20;
GDK_KEY_F21 = GDK_F21;
GDK_KEY_F22 = GDK_F22;
GDK_KEY_F23 = GDK_F23;
GDK_KEY_F24 = GDK_F24;
GDK_KEY_cyrillic_io = GDK_cyrillic_io;
GDK_KEY_cyrillic_Capital_hardsign = GDK_cyrillic_Capital_hardsign;
type
PGtkOldEditable = PGtkEditable;
@ -703,6 +620,42 @@ procedure EndGDKErrorTrap;
implementation
const
VKEY_FLAG_SHIFT = $01;
VKEY_FLAG_CTRL = $02;
VKEY_FLAG_ALT = $04;
VKEY_FLAG_KEY_MASK = $07;
VKEY_FLAG_EXT = $10; // extended key
type
TVKeyRecord = packed record
VKey: Byte;
Flags: Byte; // indicates if Alt | Ctrl | Shift is needed
// extended state
end;
PVKeyArray1 = ^TVKeyArray1;
TVKeyArray1 = array[Byte] of TVKeyRecord;
PVKeyArray2 = ^TVKeyArray2;
TVKeyArray2 = array[Byte] of PVkeyArray1;
PVKeyArray3 = ^TVKeyArray3;
TVKeyArray3 = array[Byte] of PVkeyArray2;
var
MCharToVK: array[Char] of TVKeyRecord;
MKeyCodeToVK: array[Byte] of Byte;
MVKeyInfo: array[Byte] of TVKeyInfo;
MKeySymToVK: array[Byte] of PVKeyArray3;
{$IFDEF UNIX}
{$IFDEF GTK1}
MX11Display: Pointer;
{$ENDIF}
{$ENDIF}
var
GdkTrapIsSet : Boolean;
GdkTrapCalls : Integer;
@ -740,27 +693,50 @@ begin
UpdateSysColorMap(AWidget);
end;
{$IFDEF UNIX}
{$IFDEF GTK1}
// MWE:
// TODO: check if the new keyboard routines require X on GTK2
function X11Display: Pointer;
begin
if MX11Display = nil
then MX11Display := XOpenDisplay(GDK_GET_DISPLAY);
Result := MX11Display;
end;
{$ENDIF}
{$ENDIF}
{$I gtkproc.inc}
{$I gtkcallback.inc}
initialization
{$IFDEF GTK1} //only needed to get X fonts
X11Display := nil;
{$EndIf}
{$IFDEF UNIX}
{$IFDEF GTK1}
MX11Display := nil;
{$ENDIF}
{$ENDIF}
FillChar(MCharToVK, SizeOf(MCharToVK), $FF);
FillChar(MKeyCodeToVK, SizeOf(MKeyCodeToVK), $FF);
FillChar(MKeySymToVK, SizeOf(MKeySymToVK), 0);
FillChar(MVKeyInfo, SizeOf(MVKeyInfo), 0);
GdkTrapIsSet := False;
GdkTrapCalls := 0;
Finalization
finalization
{$IFDEF UNIX}
{$IFDEF GTK1}
if MX11Display <> nil
then XCloseDisplay(MX11Display);
MX11Display := nil;
{$ENDIF}
{$ENDIF}
GdkTrapCalls := 0;
EndGDKErrorTrap;
{$IFDEF GTK1} //only needed to get X fonts
{$IfNdef Win32}
If X11Display <> nil then
XCloseDisplay(X11Display);
{$EndIf}
X11Display := nil;
{$EndIf}
end.

View File

@ -3905,12 +3905,14 @@ end;
------------------------------------------------------------------------------}
function TgtkObject.GetCursorPos(var lpPoint: TPoint ): Boolean;
{$IfDef GTK2}
{$IFDEF GTK2}
begin
// TODO: GTK2 GetCursorPos
writeln('TGTKObject.GetCursorPos ToDo');
Result:=false;
end;
{$Else}
{$ELSE}
{$IFDEF UNIX}
var
root, child: pointer;
winx, winy: Integer;
@ -3918,30 +3920,40 @@ var
TopList, List: PGList;
begin
Result := False;
BeginGDKErrorTrap;
TopList := gdk_window_get_toplevels;
List := TopList;
while List <> nil do
begin
if (List^.Data <> nil)
and gdk_window_is_visible(List^.Data)
then begin
XQueryPointer(gdk_window_xdisplay(List^.Data),
gdk_window_xwindow(List^.Data),
@root, @child, @lpPoint.X, @lpPoint.Y, @winx, @winy, @xmask);
try
TopList := gdk_window_get_toplevels;
List := TopList;
while List <> nil do
begin
if (List^.Data <> nil)
and gdk_window_is_visible(List^.Data)
then begin
XQueryPointer(gdk_window_xdisplay(List^.Data),
gdk_window_xwindow(List^.Data),
@root, @child, @lpPoint.X, @lpPoint.Y, @winx, @winy, @xmask);
Result := True;
Break;
Result := True;
Break;
end;
List := g_list_next(List);
end;
List := g_list_next(List);
if TopList <> nil
then g_list_free(TopList);
finally
EndGDKErrorTrap;
end;
if TopList <> nil
then g_list_free(TopList);
EndGDKErrorTrap;
end;
{$EndIf}
{$ELSE}
begin
// TODO: GTK1-win32 GetCursorPos
Result := False;
end;
{$ENDIF unix}
{$ENDIF gkt2}
{------------------------------------------------------------------------------
Function: GetDC
Params: none
@ -4169,20 +4181,29 @@ begin
VK_LCONTROL: nVirtKey := VK_CONTROL;
VK_LMENU: nVirtKey := VK_MENU;
end;
Result := KEYSTATE[FKeyStateList.IndexOf(Pointer(nVirtKey)) >=0];
{$IFDEF Use_KeyStateList}
Result := KEYSTATE[FKeyStateList_.IndexOf(Pointer(nVirtKey)) >=0];
{$ELSE}
Implement this
{$ENDIF}
// try extended keys
if Result = 0
then begin
nVirtKey := nVirtKey or KEYMAP_EXTENDED;
Result := KEYSTATE[FKeyStateList.IndexOf(Pointer(nVirtKey)) >=0];
{$IFDEF Use_KeyStateList}
Result := KEYSTATE[FKeyStateList_.IndexOf(Pointer(nVirtKey)) >=0];
{$ELSE}
Implement this
{$ENDIF}
end;
{$IFDEF Use_KeyStateList}
// add toggle
if Result <> 0 then
Result := Result or TOGGLESTATE[FKeyStateList.IndexOf(Pointer(
Result := Result or TOGGLESTATE[FKeyStateList_.IndexOf(Pointer(
nVirtKey or KEYMAP_TOGGLE)) >=0];
{$ENDIF}
//Assert(False, Format('Trace:[TgtkObject.GetKeyState] %d -> 0x%x', [nVirtKey, Result]));
end;
@ -4633,7 +4654,7 @@ begin
Adjustment := PgtkhScrollBar(Scroll)^.Scrollbar.Range.Adjustment
else //clist
if GtkWidgetIsA(PGtkWidget(Scroll),gtk_clist_get_type) then
Adjustment := {$IfDef Win32}nil{$Else}gtk_clist_get_hadjustment(PgtkCList(Scroll)){$EndIf};
Adjustment := gtk_clist_get_hadjustment(PgtkCList(Scroll));
SB_VERT:
If GtkWidgetIsA(PGtkWidget(Scroll),gtk_scrolled_window_get_type) then
@ -4644,7 +4665,7 @@ begin
Adjustment := PgtkvScrollBar(Scroll)^.Scrollbar.Range.Adjustment
else //clist
if GtkWidgetIsA(PGtkWidget(Scroll), gtk_clist_get_type) then
Adjustment := {$IfDef Win32}nil{$Else}gtk_clist_get_vadjustment(PgtkCList(Scroll)){$EndIf};
Adjustment := gtk_clist_get_vadjustment(PgtkCList(Scroll));
SB_CTL:
if GtkWidgetIsA(PGtkWidget(Scroll), gtk_range_get_type) then
@ -5640,10 +5661,6 @@ var
gdkRect : TGDKRectangle;
Widget, PaintWidget: PGtkWidget;
LCLObject: TObject;
{$IfDef Win32}
AWindow: PGdkWindow;
Event : TGDKEvent;
{$ENDIF}
begin
// Writeln(format('Rect = %d,%d,%d,%d',[rect^.left,rect^.top,rect^.Right,rect^.Bottom]));
Widget:=PGtkWidget(aHandle);
@ -5683,23 +5700,14 @@ begin
Inc(gdkRect.Y, PaintWidget^.Allocation.y);
end;
{$EndIf}
{$IfDef Win32}
if bErase then begin
AWindow:=GetControlWindow(PaintWidget);
if AWindow<>nil then
gdk_window_clear_area(AWindow,
gdkRect.X,gdkRect.Y,gdkRect.Width,gdkRect.Height);
end;
gtk_widget_draw(PaintWidget, @gdkRect);
{$Else}
if bErase then
gtk_widget_queue_clear_area(PaintWidget,
gdkRect.X,gdkRect.Y,gdkRect.Width,gdkRect.Height);
gtk_widget_queue_draw_area(PaintWidget,
gdkRect.X,gdkRect.Y,gdkRect.Width,gdkRect.Height);
{$EndIf}
end;
{------------------------------------------------------------------------------
@ -7723,7 +7731,7 @@ begin
Adjustment := PgtkhScrollBar(Scroll)^.Scrollbar.Range.Adjustment
else //clist
if GtkWidgetIsA(PGtkWidget(Scroll),gtk_clist_get_type) then
Adjustment := {$IfDef Win32}nil{$Else}gtk_clist_get_hadjustment(PgtkCList(Scroll)){$EndIf};
Adjustment := gtk_clist_get_hadjustment(PgtkCList(Scroll));
SB_VERT:
If GtkWidgetIsA(PGtkWidget(Scroll),gtk_scrolled_window_get_type) then
@ -7734,7 +7742,7 @@ begin
Adjustment := PgtkvScrollBar(Scroll)^.Scrollbar.Range.Adjustment
else //clist
if GtkWidgetIsA(PGtkWidget(Scroll), gtk_clist_get_type) then
Adjustment := {$IfDef Win32}nil{$Else}gtk_clist_get_vadjustment(PgtkCList(Scroll)){$EndIf};
Adjustment := gtk_clist_get_vadjustment(PgtkCList(Scroll));
SB_CTL:
if GtkWidgetIsA(PGtkWidget(Scroll), gtk_range_get_type) then
@ -8794,6 +8802,18 @@ begin
end;
end;
{$EndIf}
{------------------------------------------------------------------------------
Function: VkKeyScan
Params: AChar: Character to translate
Returns: LoByte: VK-code
HiByte: ALT | CTRL | SHIFT pressed -> bit2 | bit1 | bit0
------------------------------------------------------------------------------}
function TGTKObject.VkKeyScan(AChar: Char): Short;
begin
Result := CharToVkAndFlags(AChar);
end;
{------------------------------------------------------------------------------
Function: WindowFromPoint
Params: Point: Specifies the x and y Coords
@ -8824,6 +8844,11 @@ begin
Assert(False, 'Trace:Result = nil');
end;
//##apiwiz##eps## // Do not remove
// Placed CriticalSectionSupport outside the API wizard bounds
// so it won't affect sorting etc.
{$IfDef Critical_Sections_Support}
{$IfNDef Win32}
@ -8968,8 +8993,6 @@ begin
end;
{$EndIf}
//##apiwiz##eps## // Do not remove
{$IfDef ASSERT_IS_ON}
{$UNDEF ASSERT_IS_ON}
{$C-}
@ -8978,6 +9001,9 @@ end;
{ =============================================================================
$Log$
Revision 1.292 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.291 2003/10/15 20:33:37 ajgenius
add csForm, start fixing Style matching for syscolors and fonts

View File

@ -63,6 +63,7 @@ function CreatePixmapIndirect(const Data: Pointer; const TransColor: Longint): H
Function CreatePolygonRgn(Points: PPoint; NumPts: Integer; FillMode: integer): HRGN; Override;
function CreateRectRgn(X1,Y1,X2,Y2 : Integer): HRGN; override;
Procedure DeleteCriticalSection(var CritSection: TCriticalSection); Override;
function DeleteDC(hDC: HDC): Boolean; override;
function DeleteObject(GDIObject: HGDIOBJ): Boolean; override;
function DestroyCaret(Handle : HWND): Boolean; override;
@ -74,6 +75,7 @@ function Ellipse(DC: HDC; x1,y1,x2,y2: Integer): Boolean; override;
function EnableMenuItem(hndMenu: HMENU; uIDEnableItem: Integer; bEnable: Boolean): Boolean; override;
function EnableScrollBar(Wnd: HWND; wSBflags, wArrows: Cardinal): Boolean; override;
function EnableWindow(hWnd: HWND; bEnable: Boolean): Boolean; override;
Procedure EnterCriticalSection(var CritSection: TCriticalSection); Override;
Function ExcludeClipRect(dc: hdc; Left, Top, Right, Bottom : Integer) : Integer; override;
function ExtTextOut(DC: HDC; X, Y: Integer; Options: Longint; Rect: PRect; Str: PChar; Count: Longint; Dx: PInteger): Boolean; override;
function ExtSelectClipRGN(dc: hdc; rgn : hrgn; Mode : Longint) : Integer; override;
@ -130,10 +132,12 @@ function GradientFill(DC: HDC; Vertices: PTriVertex; NumVertices : Longint;
function HideCaret(hWnd: HWND): Boolean; override;
Procedure InitializeCriticalSection(var CritSection: TCriticalSection); Override;
function IntersectClipRect(dc: hdc; Left, Top, Right, Bottom: Integer): Integer; override;
function InvalidateRect(aHandle : HWND; Rect : pRect; bErase : Boolean) : Boolean; override;
function IsWindowVisible(handle: HWND): boolean; override;
Procedure LeaveCriticalSection(var CritSection: TCriticalSection); Override;
function LineTo(DC: HDC; X, Y: Integer): Boolean; override;
function MaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP; XMask, YMask: Integer; Rop: DWORD): Boolean; override;
@ -198,15 +202,11 @@ function StretchMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; X
Function TextOut(DC: HDC; X,Y : Integer; Str : Pchar; Count: Integer) : Boolean; override;
//##apiwiz##eps## // Do not remove
function VkKeyScan(AChar: Char): Short; override;
Function WindowFromPoint(Point : TPoint) : HWND; override;
Procedure InitializeCriticalSection(var CritSection: TCriticalSection); Override;
Procedure EnterCriticalSection(var CritSection: TCriticalSection); Override;
Procedure LeaveCriticalSection(var CritSection: TCriticalSection); Override;
Procedure DeleteCriticalSection(var CritSection: TCriticalSection); Override;
//##apiwiz##eps## // Do not remove, no wizard declaration after this line
// included by gtkint.pp
@ -214,6 +214,9 @@ Procedure DeleteCriticalSection(var CritSection: TCriticalSection); Override;
{ =============================================================================
$Log$
Revision 1.78 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.77 2003/09/17 19:40:46 ajgenius
Initial DoubleBuffering Support for GTK2

View File

@ -1,186 +0,0 @@
{
*****************************************************************************
* *
* This file is part of the Lazarus Component Library (LCL) *
* *
* See the file COPYING.LCL, included in this distribution, *
* for details about the copyright. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
*****************************************************************************
}
unit KeyMap;
{$mode objfpc}{$H+}
interface
uses
LCLType, {$IFDEF gtk2}gdk2{$ELSE}gdk{$ENDIF};
function VK2GDK(const Key : word) : word;
function GDK2VK(const Key : word) : word;
implementation
function VK2GDK(const Key : word) : word;
begin
case Key of
VK_UNKNOWN: Result:= 0;
VK_LBUTTON: Result:= 1;
VK_RBUTTON: Result:= 2;
VK_CANCEL: Result:= {$ifdef GTK2}GDK_KEY_CANCEL{$else}GDK_CANCEL{$EndIf};
VK_MBUTTON: Result:= 4;
VK_BACK: Result:= {$ifdef GTK2}GDK_KEY_BACKSPACE{$else}GDK_BACKSPACE{$EndIf};
VK_TAB: Result:= {$ifdef GTK2}GDK_KEY_TAB{$else}GDK_TAB{$EndIf};
VK_CLEAR: Result:= {$ifdef GTK2}GDK_KEY_CLEAR{$else}GDK_CLEAR{$EndIf};
VK_RETURN: Result:= {$ifdef GTK2}GDK_KEY_RETURN{$else}GDK_RETURN{$EndIf};
VK_SHIFT: Result:= {$ifdef GTK2}GDK_KEY_SHIFT_L{$else}GDK_SHIFT_L{$EndIf};
VK_CONTROL: Result:= {$ifdef GTK2}GDK_KEY_CONTROL_L{$else}GDK_CONTROL_L{$EndIf};
VK_MENU: Result:= {$ifdef GTK2}GDK_KEY_MENU{$else}GDK_MENU{$EndIf};
VK_PAUSE: Result:= {$ifdef GTK2}GDK_KEY_PAUSE{$else}GDK_PAUSE{$EndIf};
VK_CAPITAL: Result:= 20;
VK_KANA: Result:= 21;
VK_JUNJA: Result:= 23;
VK_FINAL: Result:= 24;
VK_HANJA: Result:= 25;
VK_ESCAPE: Result:= {$ifdef GTK2}GDK_KEY_ESCAPE{$else}GDK_ESCAPE{$EndIf};
VK_CONVERT: Result:= 28;
VK_NONCONVERT: Result:= 29;
VK_ACCEPT: Result:= 30;
VK_MODECHANGE: Result:= {$ifdef GTK2}GDK_KEY_MODE_SWITCH{$else}GDK_MODE_SWITCH{$EndIf};
VK_SPACE: Result:= {$ifdef GTK2}GDK_KEY_SPACE{$else}GDK_SPACE{$EndIf};
VK_PRIOR: Result:= {$ifdef GTK2}GDK_KEY_PRIOR{$else}GDK_PRIOR{$EndIf};
VK_NEXT: Result:= {$ifdef GTK2}GDK_KEY_NEXT{$else}GDK_NEXT{$EndIf};
VK_END: Result:= {$ifdef GTK2}GDK_KEY_END{$else}GDK_END{$EndIf};
VK_HOME: Result:= {$ifdef GTK2}GDK_KEY_HOME{$else}GDK_HOME{$EndIf};
VK_LEFT: Result:= {$ifdef GTK2}GDK_KEY_LEFT{$else}GDK_LEFT{$EndIf};
VK_UP: Result:= {$ifdef GTK2}GDK_KEY_UP{$else}GDK_UP{$EndIf};
VK_RIGHT: Result:= {$ifdef GTK2}GDK_KEY_RIGHT{$else}GDK_RIGHT{$EndIf};
VK_DOWN: Result:= {$ifdef GTK2}GDK_KEY_DOWN{$else}GDK_DOWN{$EndIf};
VK_SELECT: Result:= {$ifdef GTK2}GDK_KEY_SELECT{$else}GDK_SELECT{$EndIf};
VK_PRINT: Result:= {$ifdef GTK2}GDK_KEY_PRINT{$else}GDK_PRINT{$EndIf};
VK_EXECUTE: Result:= {$ifdef GTK2}GDK_KEY_EXECUTE{$else}GDK_EXECUTE{$EndIf};
VK_SNAPSHOT: Result:= 44;
VK_INSERT: Result:= {$ifdef GTK2}GDK_KEY_INSERT{$else}GDK_INSERT{$EndIf};
VK_DELETE: Result:= {$ifdef GTK2}GDK_KEY_DELETE{$else}GDK_DELETE{$EndIf};
VK_HELP: Result:= {$ifdef GTK2}GDK_KEY_HELP{$else}GDK_HELP{$EndIf};
VK_0: Result:= {$ifdef GTK2}GDK_KEY_0{$else}GDK_0{$EndIf};
VK_1: Result:= {$ifdef GTK2}GDK_KEY_1{$else}GDK_1{$EndIf};
VK_2: Result:= {$ifdef GTK2}GDK_KEY_2{$else}GDK_2{$EndIf};
VK_3: Result:= {$ifdef GTK2}GDK_KEY_3{$else}GDK_3{$EndIf};
VK_4: Result:= {$ifdef GTK2}GDK_KEY_4{$else}GDK_4{$EndIf};
VK_5: Result:= {$ifdef GTK2}GDK_KEY_5{$else}GDK_5{$EndIf};
VK_6: Result:= {$ifdef GTK2}GDK_KEY_6{$else}GDK_6{$EndIf};
VK_7: Result:= {$ifdef GTK2}GDK_KEY_7{$else}GDK_7{$EndIf};
VK_8: Result:= {$ifdef GTK2}GDK_KEY_8{$else}GDK_8{$EndIf};
VK_9: Result:= {$ifdef GTK2}GDK_KEY_9{$else}GDK_9{$EndIf};
VK_A: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_A{$else}GDK_CAPITAL_A{$EndIf};
VK_B: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_B{$else}GDK_CAPITAL_B{$EndIf};
VK_C: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_C{$else}GDK_CAPITAL_C{$EndIf};
VK_D: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_D{$else}GDK_CAPITAL_D{$EndIf};
VK_E: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_E{$else}GDK_CAPITAL_E{$EndIf};
VK_F: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_F{$else}GDK_CAPITAL_F{$EndIf};
VK_G: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_F{$else}GDK_CAPITAL_G{$EndIf};
VK_H: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_H{$else}GDK_CAPITAL_H{$EndIf};
VK_I: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_I{$else}GDK_CAPITAL_I{$EndIf};
VK_J: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_J{$else}GDK_CAPITAL_J{$EndIf};
VK_K: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_K{$else}GDK_CAPITAL_K{$EndIf};
VK_L: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_L{$else}GDK_CAPITAL_L{$EndIf};
VK_M: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_M{$else}GDK_CAPITAL_M{$EndIf};
VK_N: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_N{$else}GDK_CAPITAL_N{$EndIf};
VK_O: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_O{$else}GDK_CAPITAL_O{$EndIf};
VK_P: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_P{$else}GDK_CAPITAL_P{$EndIf};
VK_Q: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_Q{$else}GDK_CAPITAL_Q{$EndIf};
VK_R: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_R{$else}GDK_CAPITAL_R{$EndIf};
VK_S: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_S{$else}GDK_CAPITAL_S{$EndIf};
VK_T: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_T{$else}GDK_CAPITAL_T{$EndIf};
VK_U: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_U{$else}GDK_CAPITAL_U{$EndIf};
VK_V: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_V{$else}GDK_CAPITAL_V{$EndIf};
VK_W: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_W{$else}GDK_CAPITAL_W{$EndIf};
VK_X: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_X{$else}GDK_CAPITAL_X{$EndIf};
VK_Y: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_Y{$else}GDK_CAPITAL_Y{$EndIf};
VK_Z: Result:= {$ifdef GTK2}GDK_KEY_CAPITAL_Z{$else}GDK_CAPITAL_Z{$EndIf};
VK_LWIN: Result:= 91;
VK_RWIN: Result:= 92;
VK_APPS: Result:= 93;
VK_NUMPAD0: Result:= {$ifdef GTK2}GDK_KEY_KP_0{$else}GDK_KP_0{$EndIf};
VK_NUMPAD1: Result:= {$ifdef GTK2}GDK_KEY_KP_1{$else}GDK_KP_1{$EndIf};
VK_NUMPAD2: Result:= {$ifdef GTK2}GDK_KEY_KP_2{$else}GDK_KP_2{$EndIf};
VK_NUMPAD3: Result:= {$ifdef GTK2}GDK_KEY_KP_3{$else}GDK_KP_3{$EndIf};
VK_NUMPAD4: Result:= {$ifdef GTK2}GDK_KEY_KP_4{$else}GDK_KP_4{$EndIf};
VK_NUMPAD5: Result:= {$ifdef GTK2}GDK_KEY_KP_5{$else}GDK_KP_5{$EndIf};
VK_NUMPAD6: Result:= {$ifdef GTK2}GDK_KEY_KP_6{$else}GDK_KP_6{$EndIf};
VK_NUMPAD7: Result:= {$ifdef GTK2}GDK_KEY_KP_7{$else}GDK_KP_7{$EndIf};
VK_NUMPAD8: Result:= {$ifdef GTK2}GDK_KEY_KP_8{$else}GDK_KP_8{$EndIf};
VK_NUMPAD9: Result:= {$ifdef GTK2}GDK_KEY_KP_9{$else}GDK_KP_9{$EndIf};
VK_MULTIPLY: Result:= {$ifdef GTK2}GDK_KEY_KP_MULTIPLY{$else}GDK_KP_MULTIPLY{$EndIf};
VK_ADD: Result:= {$ifdef GTK2}GDK_KEY_KP_ADD{$else}GDK_KP_ADD{$EndIf};
VK_SEPARATOR: Result:= {$ifdef GTK2}GDK_KEY_KP_SEPARATOR{$else}GDK_KP_SEPARATOR{$EndIf};
VK_SUBTRACT: Result:= {$ifdef GTK2}GDK_KEY_KP_SUBTRACT{$else}GDK_KP_SUBTRACT{$EndIf};
VK_DECIMAL: Result:= {$ifdef GTK2}GDK_KEY_KP_DECIMAL{$else}GDK_KP_DECIMAL{$EndIf};
VK_DIVIDE: Result:= {$ifdef GTK2}GDK_KEY_KP_DIVIDE{$else}GDK_KP_DIVIDE{$EndIf};
VK_F1: Result:= {$ifdef GTK2}GDK_KEY_F1{$else}GDK_F1{$EndIf};
VK_F2: Result:= {$ifdef GTK2}GDK_KEY_F2{$else}GDK_F2{$EndIf};
VK_F3: Result:= {$ifdef GTK2}GDK_KEY_F3{$else}GDK_F3{$EndIf};
VK_F4: Result:= {$ifdef GTK2}GDK_KEY_F4{$else}GDK_F4{$EndIf};
VK_F5: Result:= {$ifdef GTK2}GDK_KEY_F5{$else}GDK_F5{$EndIf};
VK_F6: Result:= {$ifdef GTK2}GDK_KEY_F6{$else}GDK_F6{$EndIf};
VK_F7: Result:= {$ifdef GTK2}GDK_KEY_F7{$else}GDK_F7{$EndIf};
VK_F8: Result:= {$ifdef GTK2}GDK_KEY_F8{$else}GDK_F8{$EndIf};
VK_F9: Result:= {$ifdef GTK2}GDK_KEY_F9{$else}GDK_F9{$EndIf};
VK_F10: Result:= {$ifdef GTK2}GDK_KEY_F10{$else}GDK_F10{$EndIf};
VK_F11: Result:= {$ifdef GTK2}GDK_KEY_F11{$else}GDK_F11{$EndIf};
VK_F12: Result:= {$ifdef GTK2}GDK_KEY_F12{$else}GDK_F12{$EndIf};
VK_F13: Result:= {$ifdef GTK2}GDK_KEY_F13{$else}GDK_F13{$EndIf};
VK_F14: Result:= {$ifdef GTK2}GDK_KEY_F14{$else}GDK_F14{$EndIf};
VK_F15: Result:= {$ifdef GTK2}GDK_KEY_F15{$else}GDK_F15{$EndIf};
VK_F16: Result:= {$ifdef GTK2}GDK_KEY_F16{$else}GDK_F16{$EndIf};
VK_F17: Result:= {$ifdef GTK2}GDK_KEY_F17{$else}GDK_F17{$EndIf};
VK_F18: Result:= {$ifdef GTK2}GDK_KEY_F18{$else}GDK_F18{$EndIf};
VK_F19: Result:= {$ifdef GTK2}GDK_KEY_F19{$else}GDK_F19{$EndIf};
VK_F20: Result:= {$ifdef GTK2}GDK_KEY_F20{$else}GDK_F20{$EndIf};
VK_F21: Result:= {$ifdef GTK2}GDK_KEY_F21{$else}GDK_F21{$EndIf};
VK_F22: Result:= {$ifdef GTK2}GDK_KEY_F22{$else}GDK_F22{$EndIf};
VK_F23: Result:= {$ifdef GTK2}GDK_KEY_F23{$else}GDK_F23{$EndIf};
VK_F24: Result:= {$ifdef GTK2}GDK_KEY_F24{$else}GDK_F24{$EndIf};
VK_NUMLOCK: Result:= {$ifdef GTK2}GDK_KEY_NUM_LOCK{$else}GDK_NUM_LOCK{$EndIf};
VK_SCROLL: Result:= {$ifdef GTK2}GDK_KEY_SCROLL_LOCK{$else}GDK_SCROLL_LOCK{$EndIf};
VK_EQUAL: Result:= {$ifdef GTK2}GDK_KEY_KP_EQUAL{$else}GDK_KP_EQUAL{$EndIf};
VK_COMMA: Result:= {$ifdef GTK2}GDK_KEY_COMMA{$else}GDK_COMMA{$EndIf};
VK_POINT: Result:= {$ifdef GTK2}GDK_KEY_PERIOD{$else}GDK_PERIOD{$EndIf};
VK_SLASH: Result:= {$ifdef GTK2}GDK_KEY_SLASH{$else}GDK_SLASH{$EndIf};
VK_LSHIFT: Result:= {$ifdef GTK2}GDK_KEY_SHIFT_L{$else}GDK_SHIFT_L{$EndIf};
VK_RSHIFT: Result:= {$ifdef GTK2}GDK_KEY_SHIFT_R{$else}GDK_SHIFT_R{$EndIf};
VK_LCONTROL: Result:= {$ifdef GTK2}GDK_KEY_CONTROL_L{$else}GDK_CONTROL_L{$EndIf};
VK_RCONTROL: Result:= {$ifdef GTK2}GDK_KEY_CONTROL_R{$else}GDK_CONTROL_R{$EndIf};
VK_LMENU: Result:= {$ifdef GTK2}GDK_KEY_META_L{$else}GDK_META_L{$EndIf};
VK_RMENU: Result:= {$ifdef GTK2}GDK_KEY_META_R{$else}GDK_META_R{$EndIf};
VK_PROCESSKEY: Result:= 229;
VK_ATTN: Result:= 246;
VK_CRSEL: Result:= 247;
VK_EXSEL: Result:= 248;
VK_EREOF: Result:= 249;
VK_PLAY: Result:= 250;
VK_ZOOM: Result:= 251;
VK_NONAME: Result:= 252;
VK_PA1: Result:= 253;
VK_OEM_CLEAR: Result:= 254;
else Result:= Key;
end;
end;
function GDK2VK(const Key : word) : word;
begin
Result:= Key;
end;
end.

View File

@ -251,7 +251,7 @@ PM_Noremove = 0;
PM_Remove = 1;
//==============================================
// Font constants
// Keyboard constants
//==============================================
//------------
@ -267,6 +267,9 @@ PM_Remove = 1;
//-------------
// Virtual keys
//-------------
//
// Source: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp
//
VK_UNKNOWN = 0; // defined by LCL
VK_LBUTTON = 1;
VK_RBUTTON = 2;
@ -346,10 +349,13 @@ PM_Remove = 1;
VK_Y = $59;
VK_Z = $5A;
VK_LWIN = 91;
VK_RWIN = 92;
VK_APPS = 93;
VK_NUMPAD0 = 96;
VK_LWIN = $5B;
VK_RWIN = $5C;
VK_APPS = $5D;
// $5E reserved
VK_SLEEP = $5F;
VK_NUMPAD0 = 96; // $60
VK_NUMPAD1 = 97;
VK_NUMPAD2 = 98;
VK_NUMPAD3 = 99;
@ -388,42 +394,109 @@ PM_Remove = 1;
VK_F21 = 132;
VK_F22 = 133;
VK_F23 = 134;
VK_F24 = 135;
VK_NUMLOCK = 144;
VK_SCROLL = 145;
VK_F24 = 135; // $87
// $88-$8F unassigned
VK_NUMLOCK = $90;
VK_SCROLL = $91;
// $92-$96 OEM specific
// $97-$9F Unassigned
// not in VCL defined:
//MWE: And should not be used.
// The keys they are on map to another VK
(*
VK_EQUAL = 187;
VK_COMMA = 188;
VK_POINT = 190;
VK_SLASH = 191;
VK_AT = 192;
*)
// VK_L & VK_R - left and right Alt, Ctrl and Shift virtual keys.
// Used only as parameters to GetAsyncKeyState() and GetKeyState().
// No other API or message will distinguish left and right keys in this way
VK_LSHIFT = 160;
VK_RSHIFT = 161;
VK_LCONTROL = 162;
VK_RCONTROL = 163;
VK_LMENU = 164;
VK_RMENU = 165;
VK_LSHIFT = $A0;
VK_RSHIFT = $A1;
VK_LCONTROL = $A2;
VK_RCONTROL = $A3;
VK_LMENU = $A4;
VK_RMENU = $A5;
VK_PROCESSKEY = 229;
VK_ATTN = 246;
VK_CRSEL = 247;
VK_EXSEL = 248;
VK_EREOF = 249;
VK_PLAY = 250;
VK_ZOOM = 251;
VK_NONAME = 252;
VK_PA1 = 253;
VK_OEM_CLEAR = 254;
VK_BROWSER_BACK = $A6;
VK_BROWSER_FORWARD = $A7;
VK_BROWSER_REFRESH = $A8;
VK_BROWSER_STOP = $A9;
VK_BROWSER_SEARCH = $AA;
VK_BROWSER_FAVORITES = $AB;
VK_BROWSER_HOME = $AC;
VK_VOLUME_MUTE = $AD;
VK_VOLUME_DOWN = $AE;
VK_VOLUME_UP = $AF;
VK_MEDIA_NEXT_TRACK = $B0;
VK_MEDIA_PREV_TRACK = $B1;
VK_MEDIA_STOP = $B2;
VK_MEDIA_PLAY_PAUSE = $B3;
VK_LAUNCH_MAIL = $B4;
VK_LAUNCH_MEDIA_SELECT = $B5;
VK_LAUNCH_APP1 = $B6;
VK_LAUNCH_APP2 = $B7;
// $B8-$B9 Reserved
VK_OEM_1 = $BA; // Used for miscellaneous characters; it can vary by keyboard.
// For the US standard keyboard, the ';:' key
VK_OEM_PLUS = $BB; // For any country/region, the '+' key
VK_OEM_COMMA = $BC; // For any country/region, the ',' key
VK_OEM_MINUS = $BD; // For any country/region, the '-' key
VK_OEM_PERIOD = $BE; // For any country/region, the '.' key
VK_OEM_2 = $BF; // Used for miscellaneous characters; it can vary by keyboard.
// For the US standard keyboard, the '/?' key
VK_OEM_3 = $C0; // Used for miscellaneous characters; it can vary by keyboard.
// For the US standard keyboard, the '`~' key
// $C1-$D7 Reserved
// $D8-$DA Unassigned
VK_OEM_4 = $DB; // Used for miscellaneous characters; it can vary by keyboard.
// For the US standard keyboard, the '[{' key
VK_OEM_5 = $DC; // Used for miscellaneous characters; it can vary by keyboard.
// For the US standard keyboard, the '\|' key
VK_OEM_6 = $DD; // Used for miscellaneous characters; it can vary by keyboard.
// For the US standard keyboard, the ']}' key
VK_OEM_7 = $DE; // Used for miscellaneous characters; it can vary by keyboard.
// For the US standard keyboard, the 'single-quote/double-quote' key
VK_OEM_8 = $DF; // Used for miscellaneous characters; it can vary by keyboard.
// $E0 Reserved
// $E1 OEM specific
VK_OEM_102 = $E2; // Either the angle bracket key or the backslash key on the RT 102-key keyboard
// $E3-$E4 OEM specific
VK_PROCESSKEY = $E7; // IME Process key
// $E8 Unassigned
// $E9-$F5 OEM specific
VK_ATTN = $F6;
VK_CRSEL = $F7;
VK_EXSEL = $F8;
VK_EREOF = $F9;
VK_PLAY = $FA;
VK_ZOOM = $FB;
VK_NONAME = $FC;
VK_PA1 = $FD;
VK_OEM_CLEAR = $FE;
// all other keys with no virtual key code are mapped to
// VK_IRREGULAR + KeyCode
VK_IRREGULAR = 1000;
// MWE: Obsolete
// VK_IRREGULAR = 1000;
//==============================================
//
//==============================================
const
@ -1756,7 +1829,6 @@ type
function hiword(i: integer): word;
function loword(i: integer): word;
Function Char2VK(C : Char) : Word;
function MapIrregularVirtualKey(vk: word): word;
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer;
@ -1782,28 +1854,6 @@ begin
end;
end;
function MapIrregularVirtualKey(vk: word): word;
begin
if vk<VK_IRREGULAR then begin
Result:=vk;
exit;
end;
case vk-VK_IRREGULAR of
ord('0')..ord('9'):
Result:=vk-VK_IRREGULAR-ord('0')+VK_0;
ord('A')..ord('Z'):
Result:=vk-VK_IRREGULAR-ord('A')+VK_A;
ord('a')..ord('z'):
Result:=vk-VK_IRREGULAR-ord('a')+VK_A;
else
Result:=vk;
end;
end;
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer;
begin
Result:=(int64(nNumber)*int64(nNumerator)) div nDenominator;
@ -1814,6 +1864,9 @@ end.
{
$Log$
Revision 1.44 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.43 2003/10/15 20:33:36 ajgenius
add csForm, start fixing Style matching for syscolors and fonts

View File

@ -804,7 +804,7 @@ type
TLMDestroy = TLMNoParams;
TLMShortCut = packed record
TLMShortCut = record
Handle : HWND;
OldKey : Word;
OldModifier : TShiftState;
@ -1057,6 +1057,9 @@ end.
{
$Log$
Revision 1.54 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.53 2003/09/17 19:40:46 ajgenius
Initial DoubleBuffering Support for GTK2

View File

@ -352,7 +352,7 @@ end;
Function ShortCut(const Key: Word; const Shift : TShiftState) : TShortCut;
Begin
Result := MapIrregularVirtualKey(Key);
Result := Key;
if WordRec(Result).Hi <> 0 then begin
Result:=0;
exit;
@ -386,6 +386,9 @@ end.
{
$Log$
Revision 1.52 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.51 2003/09/18 09:21:03 mattias
renamed LCLLinux to LCLIntf

View File

@ -1,4 +1,4 @@
{
{
/***************************************************************************
stdctrls.pp
-----------
@ -247,7 +247,8 @@ type
procedure SetSorted(Val : boolean); virtual;
procedure SetStyle(Val : TComboBoxStyle); virtual;
procedure KeyDown(var Key : Word; Shift : TShiftState); override;
procedure KeyPress(var Key : Char); override;
property DropDownCount: Integer read FDropDownCount write SetDropDownCount default 8;
property Items: TStrings read FItems write SetItems;
property ItemHeight: Integer read GetItemHeight write SetItemHeight;
@ -1475,6 +1476,9 @@ end.
{ =============================================================================
$Log$
Revision 1.108 2003/10/16 23:54:27 marc
Implemented new gtk keyevent handling
Revision 1.107 2003/09/26 18:19:40 ajgenius
add minor TEdit/TMemo properties for delphi compatiblitity