Jump to content

davornik

Members
  • Content Count

    16
  • Joined

  • Last visited

Community Reputation

4 Neutral

Technical Information

  • Delphi-Version
    Delphi 11 Alexandria
  1. davornik

    Detect click on calendar in TDateTimePicker

    How to subclass TDateTimePicker's window on WM_MOUSE(DOWN|UP) messages?
  2. davornik

    Detect click on calendar in TDateTimePicker

    Yes, but it will then show something like 1899 year. DateTimePicker1.Date must be :=Date; is because it needs to be on today's date for user convinience, when calendar drops down - it is user frendly to have view of current month.
  3. davornik

    Detect click on calendar in TDateTimePicker

    I dont want to use checkbox, because it is not user frendly. Main problem is that OnChange event does not fire on every click on calendar but only if Date <> Today.
  4. I am using DateTimePicker1.Format as ' ' to set the value to an empty string in TDateTimePicker (using it as dtkDate). procedure TForm1.FormCreate(Sender: TObject); begin DateTimePicker1.Format:=' '; end; procedure TForm1.DateTimePicker1Change(Sender: TObject); begin DateTimePicker1.Format:=''; end; procedure TForm1.btnResetClick(Sender: TObject); begin DateTimePicker1.Format:=' '; //set as Empty DateTimePicker1.Date:=Date; end; Change event does not fire if I select today's date. How can I detect a click on the calendar if today's date is selected or clicked somewhere in the calendar itself?
  5. davornik

    combobox with custom drop down (treeview)

    After searching myself for way to populate ComboBoxEx with items from TListView in order to be able to filter data I have made recursive function which iterates through all ListView data. It may be usefull. procedure TForm1.btnPopulateClick(Sender: TObject); var lvl: Integer; mNode: TTreeNode; //-- procedure PlaceTreeItem(nTree: TTreeNode; nLvl: Integer); var nIndent, nImg: Integer; NextNode, LastNode: TTreeNode; begin nIndent:=nLvl * 2; if nTree.HasChildren then nImg:=0 else nImg:=1; ComboBoxEx1.ItemsEx.AddItem(nTree.Text, nImg, nImg, nImg, nIndent, nTree.Data); if nTree.HasChildren then begin Inc(lvl); NextNode := nTree.getFirstChild; LastNode := nTree.GetLastChild; while NextNode <> nil do begin PlaceTreeItem(NextNode, lvl); if NextNode = LastNode then Dec(lvl); NextNode := NextNode.getNextSibling; end; end; end; //-- begin ComboBoxEx1.Clear; lvl:=0; mNode := TreeView1.Items.GetFirstNode; while Assigned(mNode) do begin PlaceTreeItem(mNode, 0); mNode := mNode.getNextSibling; end; end;
  6. I am trying to connect with web-browser to Indy HTTP server runing on https://127.0.0.1:4567. I have read many tutorials and some of them are interesting, like: 1. https://mikejustin.wordpress.com/2019/06/14/how-to-lets-encrypt-certificates-with-indy-http-server/ 2. https://synaptica.info/en/2016/09/21/build-your-own-https-server-with-delphi/ I have created self signed certificates with help of this example tutorial: https://github.com/glenkleidon/DelphiCertAuth As a passphrase for testing I used "123456". After that I have installed newly generated file root_cert.crt in Trusted Root CA in Windows (using "WinKey+R" and certmgr.msc) In my code I have set: ... // create IOHandler for OpenSSL IdServerIOHandlerSSLOpenSSL1.SSLOptions.CertFile := 'mycomputerCertificate.pem'; IdServerIOHandlerSSLOpenSSL1.SSLOptions.KeyFile := 'mycomputerPrivateKey.pem'; IdServerIOHandlerSSLOpenSSL1.SSLOptions.RootCertFile := 'certificateAuthorityCertificate.pem'; IdServerIOHandlerSSLOpenSSL1.SSLOptions.Mode := sslmServer; IdServerIOHandlerSSLOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]; ... procedure TForm1.IdServerIOHandlerSSLOpenSSL1GetPassword(var Password: string); begin Password := '123456'; end; ... procedure TForm1.IdHTTPServer1QuerySSLPort(APort: Word; var VUseSSL: Boolean); // This will not be called when the request is a HTTPS request // It facilitates the use of the server for testing via HTTP://localhost:8080 (i.e. without SSL) begin VUseSSL := (APort <> 8080); end; ... function TForm1.IdServerIOHandlerSSLOpenSSL1VerifyPeer(Certificate: TIdX509; AOk: Boolean; ADepth, AError: Integer): Boolean; begin if ADepth = 0 then Result := AOk else Result := True; end; ... Unfortunately, when I try to connect to https://127.0.0.1:4567 I get an warning (check image). In application I can see messages and exception raised: IdServerIOHandlerSSLOpenSSL1StatusInfo(const AMsg: string); AMsg := SSL status: "before/accept initialization"; AMsg := SSL status: "before/accept initialization"; AMsg := SSL status: "SSLv3 read client hello A"; AMsg := SSL status: "SSLv3 write server hello A"; AMsg := SSL status: "SSLv3 write certificate A"; AMsg := SSL status: "SSLv3 write server done A"; AMsg := SSL status: "SSLv3 flush data"; AMsg := SSL status: "SSLv3 read client certificate A"; AMsg := SSL status: "SSLv3 read client key exchange A"; AMsg := SSL status: "error"; 127.0.0.1:55810 Stat Disconnected. IdHTTPServer1Exception(AContext: TIdContext; AException: Exception); EIdOSSLUnderlyingCryptoError: Error accepting connection with SSL. error:14094416:SSL routines:ssl3_read_bytes:sslv3 alert certificate unknown Am I doing something wrong or I am missing something? Why I can't connect to IP address without warning?
  7. davornik

    Intercept keys from hardware keyboard (HID Device)

    Yes, I want to determine from where key is sent.
  8. davornik

    Intercept keys from hardware keyboard (HID Device)

    I would like to intercept Key from external keyboard before it reaches TEdit or Form. Is this possible?
  9. davornik

    Intercept keys from hardware keyboard (HID Device)

    That is not good solution, has some issues. However, OnFormKeyUp is better choice (key is possible to receive only once according to Android docs), but if TEdit is focused TForm doesn't get key. Then, again, if I type Key in external keyboard and I am in TEdit control, key is shown in TEdit (I would like to Intercept it before it reaches any Control on Form or Form itself). Is it possible to differentiate Key origin? Is it received from Virtual Keyboard or HID device?
  10. Is it posible in Android to intercept keyboard presses from hardware keyboard attached to device? I can detect is HID Device present, but how to get key input from HID before form does? function TForm1.AttachedHIDDevice: Boolean; var i: Jiterator; JavaObject: JObject; DeviceList: JHashMap; USBDevice: JUSBDevice; UsbManager: JUSBManager; begin //Device discovery Result := False; //Get pointer to UsbManager JavaObject := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.USB_SERVICE); UsbManager := TJUsbManager.Wrap((JavaObject as ILocalObject).GetObjectID); if not Assigned(UsbManager) then Exit; //Get a list of connected devices DeviceList := UsbManager.getDeviceList; i := DeviceList.values.iterator; while i.hasNext do begin USBDevice := TJUsbDevice.Wrap((i.next as ILocalObject).GetObjectID); if (USBDevice.getInterfaceCount > 0) then begin Result := USBDevice.getInterface(0).getInterfaceClass = TJUsbConstantsUSB_CLASS_HID; if Result then Break; end; end; end;
  11. Perhaps you can use this thread: https://en.delphipraxis.net/topic/5883-delphi-1042-ce-support-android-api-30/
  12. davornik

    Delphi 10.4.2 CE support Android API 30

    Thank you for yours post, this also helped me to upload app to Google store. Just to make things clearer to download android-30 you must: - run cmd.exe - type cd [path] to go to location where sdkmanager.bat is (usually it is: C:\Users\Public\Documents\Embarcadero\Studio\21.0\PlatformSDKs\android-sdk-windows\tools\bin or C:\Users\Public\Documents\Embarcadero\Studio\21.0\CatalogRepository\AndroidSDK-2525-21.0.40680.4203\tools\bin) - type sdkmanager "platforms;android-30" - answer y on question, and wait until it says "done" Everything else is straightforward...
  13. davornik

    Unit uDGVMUtils and 64 bit...

    Code can be made compatible with 64-bit, i have posted probable solution here: https://stackoverflow.com/a/61874765/3225668 NOTE: in FastcodeCPUID.pas there is an error with position of registers when returning value. Registers in code goes like Move...EBX...EDX...ECX... Proper way should be EBX...ECX...EDX...!
  14. davornik

    Detect virtual machine in 64bit?

    I have finally found solution and posted it here: https://stackoverflow.com/a/61874765/3225668
  15. davornik

    Detect virtual machine in 64bit?

    procedure ChkVMware; asm push rdx; push rcx; push rbx; mov rax, 'VMXh'; mov rbx, 0; mov rcx, 10; mov rdx, 'VX'; in rax, dx; <-- here is error: operand size mismatch cmp rbx, 'VMXh'; setz [Result]; pop rbx; pop rcx; pop rdx; end; Thank you. In that link registers are like eax, edx, ecx and rbx for 32-bit, but if you change them to 64-bit (rax, rdx, rcx, rbx) then I get error: operand size mismatch. I even dont know if this is proper way to change registers?
×