| 
									
										
										
										
											2020-04-29 19:14:44 +02:00
										 |  |  | // ************************************************************************
 | 
					
						
							|  |  |  | // ***************************** CEF4Delphi *******************************
 | 
					
						
							|  |  |  | // ************************************************************************
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // CEF4Delphi is based on DCEF3 which uses CEF to embed a chromium-based
 | 
					
						
							|  |  |  | // browser in Delphi applications.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // The original license of DCEF3 still applies to CEF4Delphi.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // For more information about CEF4Delphi visit :
 | 
					
						
							|  |  |  | //         https://www.briskbard.com/index.php?lang=en&pageid=cef
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2022-01-01 10:41:21 +01:00
										 |  |  | //        Copyright � 2022 Salvador Diaz Fau. All rights reserved.
 | 
					
						
							| 
									
										
										
										
											2020-04-29 19:14:44 +02:00
										 |  |  | //
 | 
					
						
							|  |  |  | // ************************************************************************
 | 
					
						
							|  |  |  | // ************ vvvv Original license and comments below vvvv *************
 | 
					
						
							|  |  |  | // ************************************************************************
 | 
					
						
							|  |  |  | (* | 
					
						
							|  |  |  |  *                       Delphi Chromium Embedded 3 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Usage allowed under the restrictions of the Lesser GNU General Public License | 
					
						
							|  |  |  |  * or alternatively the restrictions of the Mozilla Public License 1.1 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Software distributed under the License is distributed on an "AS IS" basis, | 
					
						
							|  |  |  |  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for | 
					
						
							|  |  |  |  * the specific language governing rights and limitations under the License. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Unit owner : Henri Gourvest <hgourvest@gmail.com> | 
					
						
							|  |  |  |  * Web site   : http://www.progdigy.com
 | 
					
						
							|  |  |  |  * Repository : http://code.google.com/p/delphichromiumembedded/
 | 
					
						
							|  |  |  |  * Group      : http://groups.google.com/group/delphichromiumembedded
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Embarcadero Technologies, Inc is not permitted to use or redistribute | 
					
						
							|  |  |  |  * this source code without explicit permission. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | unit uCEFTextfield; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {$IFDEF FPC} | 
					
						
							|  |  |  |   {$MODE OBJFPC}{$H+} | 
					
						
							|  |  |  | {$ENDIF} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {$I cef.inc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-19 18:56:41 +01:00
										 |  |  | {$IFNDEF TARGET_64BITS}{$ALIGN ON}{$ENDIF} | 
					
						
							|  |  |  | {$MINENUMSIZE 4} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-29 19:14:44 +02:00
										 |  |  | interface | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uses | 
					
						
							|  |  |  |   {$IFDEF DELPHI16_UP} | 
					
						
							|  |  |  |   System.Classes, System.SysUtils, | 
					
						
							|  |  |  |   {$ELSE} | 
					
						
							|  |  |  |   Classes, SysUtils, | 
					
						
							|  |  |  |   {$ENDIF} | 
					
						
							|  |  |  |   uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFView; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type | 
					
						
							|  |  |  |   TCefTextfieldRef = class(TCefViewRef, ICefTextfield) | 
					
						
							|  |  |  |     protected | 
					
						
							|  |  |  |       procedure SetPasswordInput(password_input: boolean); | 
					
						
							|  |  |  |       function  IsPasswordInput : boolean; | 
					
						
							|  |  |  |       procedure SetReadOnly(read_only: boolean); | 
					
						
							|  |  |  |       function  IsReadOnly : boolean; | 
					
						
							|  |  |  |       function  GetText : ustring; | 
					
						
							|  |  |  |       procedure SetText(const text_: ustring); | 
					
						
							|  |  |  |       procedure AppendText(const text_: ustring); | 
					
						
							|  |  |  |       procedure InsertOrReplaceText(const text_: ustring); | 
					
						
							|  |  |  |       function  HasSelection : boolean; | 
					
						
							|  |  |  |       function  GetSelectedText : ustring; | 
					
						
							|  |  |  |       procedure SelectAll(reversed: boolean); | 
					
						
							|  |  |  |       procedure ClearSelection; | 
					
						
							|  |  |  |       function  GetSelectedRange : TCefRange; | 
					
						
							|  |  |  |       procedure SelectRange(const range: TCefRange); | 
					
						
							|  |  |  |       function  GetCursorPosition : NativeUInt; | 
					
						
							|  |  |  |       procedure SetTextColor(color: TCefColor); | 
					
						
							|  |  |  |       function  GetTextColor : TCefColor; | 
					
						
							|  |  |  |       procedure SetSelectionTextColor(color: TCefColor); | 
					
						
							|  |  |  |       function  GetSelectionTextColor : TCefColor; | 
					
						
							|  |  |  |       procedure SetSelectionBackgroundColor(color: TCefColor); | 
					
						
							|  |  |  |       function  GetSelectionBackgroundColor : TCefColor; | 
					
						
							|  |  |  |       procedure SetFontList(const font_list: ustring); | 
					
						
							|  |  |  |       procedure ApplyTextColor(color: TCefColor; const range: TCefRange); | 
					
						
							|  |  |  |       procedure ApplyTextStyle(style: TCefTextStyle; add: boolean; const range: TCefRange); | 
					
						
							| 
									
										
										
										
											2020-07-18 19:12:01 +02:00
										 |  |  |       function  IsCommandEnabled(command_id: TCefTextFieldCommands): boolean; | 
					
						
							|  |  |  |       procedure ExecuteCommand(command_id: TCefTextFieldCommands); | 
					
						
							| 
									
										
										
										
											2020-04-29 19:14:44 +02:00
										 |  |  |       procedure ClearEditHistory; | 
					
						
							|  |  |  |       procedure SetPlaceholderText(const text_: ustring); | 
					
						
							|  |  |  |       function  GetPlaceholderText : ustring; | 
					
						
							|  |  |  |       procedure SetPlaceholderTextColor(color: TCefColor); | 
					
						
							|  |  |  |       procedure SetAccessibleName(const name: ustring); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public | 
					
						
							|  |  |  |       class function UnWrap(data: Pointer): ICefTextfield; | 
					
						
							|  |  |  |       class function CreateTextField(const delegate: ICefTextfieldDelegate): ICefTextfield; | 
					
						
							|  |  |  |   end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | implementation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uses | 
					
						
							|  |  |  |   uCEFLibFunctions, uCEFMiscFunctions; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SetPasswordInput(password_input: boolean); | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.set_password_input(PCefTextfield(FData), | 
					
						
							|  |  |  |                                            ord(password_input)); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function TCefTextfieldRef.IsPasswordInput : boolean; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   Result := (PCefTextfield(FData)^.is_password_input(PCefTextfield(FData)) <> 0); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SetReadOnly(read_only: boolean); | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.set_read_only(PCefTextfield(FData), | 
					
						
							|  |  |  |                                       ord(read_only)); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function TCefTextfieldRef.IsReadOnly : boolean; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   Result := (PCefTextfield(FData)^.is_read_only(PCefTextfield(FData)) <> 0); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function TCefTextfieldRef.GetText : ustring; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   Result := CefStringFreeAndGet(PCefTextfield(FData)^.get_text(PCefTextfield(FData))); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SetText(const text_: ustring); | 
					
						
							|  |  |  | var | 
					
						
							|  |  |  |   TempText : TCefString; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   TempText := CefString(text_); | 
					
						
							|  |  |  |   PCefTextfield(FData)^.set_text(PCefTextfield(FData), @TempText); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.AppendText(const text_: ustring); | 
					
						
							|  |  |  | var | 
					
						
							|  |  |  |   TempText : TCefString; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   TempText := CefString(text_); | 
					
						
							|  |  |  |   PCefTextfield(FData)^.append_text(PCefTextfield(FData), @TempText); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.InsertOrReplaceText(const text_: ustring); | 
					
						
							|  |  |  | var | 
					
						
							|  |  |  |   TempText : TCefString; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   TempText := CefString(text_); | 
					
						
							|  |  |  |   PCefTextfield(FData)^.insert_or_replace_text(PCefTextfield(FData), @TempText); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function TCefTextfieldRef.HasSelection : boolean; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   Result := (PCefTextfield(FData)^.has_selection(PCefTextfield(FData)) <> 0); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function TCefTextfieldRef.GetSelectedText : ustring; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   Result := CefStringFreeAndGet(PCefTextfield(FData)^.get_selected_text(PCefTextfield(FData))); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SelectAll(reversed: boolean); | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.select_all(PCefTextfield(FData), ord(reversed)); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.ClearSelection; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.clear_selection(PCefTextfield(FData)); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function TCefTextfieldRef.GetSelectedRange : TCefRange; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   Result := PCefTextfield(FData)^.get_selected_range(PCefTextfield(FData)); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SelectRange(const range: TCefRange); | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.select_range(PCefTextfield(FData), @range); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function TCefTextfieldRef.GetCursorPosition : NativeUInt; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   Result := PCefTextfield(FData)^.get_cursor_position(PCefTextfield(FData)); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SetTextColor(color: TCefColor); | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.set_text_color(PCefTextfield(FData), color); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function TCefTextfieldRef.GetTextColor : TCefColor; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   Result := PCefTextfield(FData)^.get_text_color(PCefTextfield(FData)); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SetSelectionTextColor(color: TCefColor); | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.set_selection_text_color(PCefTextfield(FData), color); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function TCefTextfieldRef.GetSelectionTextColor : TCefColor; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   Result := PCefTextfield(FData)^.get_selection_text_color(PCefTextfield(FData)); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SetSelectionBackgroundColor(color: TCefColor); | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.set_selection_background_color(PCefTextfield(FData), color); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function TCefTextfieldRef.GetSelectionBackgroundColor : TCefColor; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   Result := PCefTextfield(FData)^.get_selection_background_color(PCefTextfield(FData)); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SetFontList(const font_list: ustring); | 
					
						
							|  |  |  | var | 
					
						
							|  |  |  |   TempFontList : TCefString; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   TempFontList := CefString(font_list); | 
					
						
							|  |  |  |   PCefTextfield(FData)^.set_font_list(PCefTextfield(FData), @TempFontList); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.ApplyTextColor(color: TCefColor; const range: TCefRange); | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.apply_text_color(PCefTextfield(FData), color, @range); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.ApplyTextStyle(style: TCefTextStyle; add: boolean; const range: TCefRange); | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.apply_text_style(PCefTextfield(FData), style, ord(add), @range); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-18 19:12:01 +02:00
										 |  |  | function TCefTextfieldRef.IsCommandEnabled(command_id: TCefTextFieldCommands): boolean; | 
					
						
							| 
									
										
										
										
											2020-04-29 19:14:44 +02:00
										 |  |  | begin | 
					
						
							|  |  |  |   Result := (PCefTextfield(FData)^.is_command_enabled(PCefTextfield(FData), command_id) <> 0); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-18 19:12:01 +02:00
										 |  |  | procedure TCefTextfieldRef.ExecuteCommand(command_id: TCefTextFieldCommands); | 
					
						
							| 
									
										
										
										
											2020-04-29 19:14:44 +02:00
										 |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.execute_command(PCefTextfield(FData), command_id); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.ClearEditHistory; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.clear_edit_history(PCefTextfield(FData)); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SetPlaceholderText(const text_: ustring); | 
					
						
							|  |  |  | var | 
					
						
							|  |  |  |   TempText : TCefString; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   TempText := CefString(text_); | 
					
						
							|  |  |  |   PCefTextfield(FData)^.set_placeholder_text(PCefTextfield(FData), @TempText); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function TCefTextfieldRef.GetPlaceholderText : ustring; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   Result := CefStringFreeAndGet(PCefTextfield(FData)^.get_placeholder_text(PCefTextfield(FData))); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SetPlaceholderTextColor(color: TCefColor); | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefTextfield(FData)^.set_placeholder_text_color(PCefTextfield(FData), color); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefTextfieldRef.SetAccessibleName(const name: ustring); | 
					
						
							|  |  |  | var | 
					
						
							|  |  |  |   TempName : TCefString; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   TempName := CefString(name); | 
					
						
							|  |  |  |   PCefTextfield(FData)^.set_accessible_name(PCefTextfield(FData), @TempName); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class function TCefTextfieldRef.UnWrap(data: Pointer): ICefTextfield; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   if (data <> nil) then | 
					
						
							|  |  |  |     Result := Create(data) as ICefTextfield | 
					
						
							|  |  |  |    else | 
					
						
							|  |  |  |     Result := nil; | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class function TCefTextfieldRef.CreateTextField(const delegate: ICefTextfieldDelegate): ICefTextfield; | 
					
						
							| 
									
										
										
										
											2020-05-05 18:10:33 +02:00
										 |  |  | var | 
					
						
							|  |  |  |   TempTextfield : PCefTextfield; | 
					
						
							| 
									
										
										
										
											2020-04-29 19:14:44 +02:00
										 |  |  | begin | 
					
						
							| 
									
										
										
										
											2020-05-05 18:10:33 +02:00
										 |  |  |   Result := nil; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (delegate <> nil) then | 
					
						
							|  |  |  |     begin | 
					
						
							|  |  |  |       TempTextfield := cef_textfield_create(CefGetData(delegate)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (TempTextfield <> nil) then | 
					
						
							|  |  |  |         Result := Create(TempTextfield) as ICefTextfield; | 
					
						
							|  |  |  |     end; | 
					
						
							| 
									
										
										
										
											2020-04-29 19:14:44 +02:00
										 |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | end. | 
					
						
							|  |  |  | 
 |