mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-16 23:49:28 +02:00
Implemented new gtk keyevent handling
git-svn-id: trunk@4715 -
This commit is contained in:
parent
9c936a9cba
commit
ceaf698ecf
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
]);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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.
|
||||
|
||||
|
@ -299,6 +299,7 @@ type
|
||||
var
|
||||
ModalWindows: TList; // list of PGtkWindow
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
initialization
|
||||
|
@ -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
|
||||
|
||||
|
1321
lcl/interfaces/gtk/gtkkeysyms.inc
Normal file
1321
lcl/interfaces/gtk/gtkkeysyms.inc
Normal file
File diff suppressed because it is too large
Load Diff
@ -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);
|
||||
|
@ -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
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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.
|
151
lcl/lcltype.pp
151
lcl/lcltype.pp
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user