投稿

ラベル(Delphi)が付いた投稿を表示しています

和暦の新元号対応 VB6 / Delphi / VBA / .net

イメージ
新元号に向けて和暦対応をチェック OSから情報を取得していれば 2019/5/1以降の和暦が「??」となるのが正しく、決定後レジストリへ??の部分へ登録されれば、そのまま表示される ※取得方法が違うと、表現も変わる可能性があるので参考までに VB6 - 未対応 遂にvb6終了のきっかけになるか~ でも古いコードの修正頼まれたりするの見てると、何故か自前で書いてるの多いんだよなぁ Delphi - 対応済 2007 や XE系 といくつか試したが、元々OSから取得しているみたい VBA (Microsoft Office 2013, 2016) - 未対応 決定後にアップデートで対応するんだろうけど、どれくらい古いバージョンまで対応するのだろうか .net (Visual Studio 2017 C# .net v4で確認) - 対応済 これもOSから取得しているようです。他のバージョンはどうなんだろう

Delphi + Indy + OpenSSL で「SSL で接続する際にエラーが発生しました。プロトコルに違反する EOF が検出されました.」

イメージ
Delphi + Indy+ OpenSSL 構成で SSL接続できなくなり「SSL で接続する際にエラーが発生しました。プロトコルに違反する EOF が検出されました.」というダイアログが出る 直接の原因は、サイト側(さくら)が TLS1.0/1.1 を無効にしたことで、Indy の TIdSSLIOHandlerSocketOpenSSL のプロパティをデフォルトから変更して TLS1.2以上で接続する必要があった (とりあえず接続できるようになったけど、ちょっとモッサリな...) IdHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); with IdHTTP.IOHandler do begin SSLOptions.SSLVersions := [sslvSSLv23]; // ←追加(無くても Methodを指定すると選択されます) // SSLOptions.Method := sslvTLSv1; SSLOptions.Method := sslvSSLv23; // ←変更 SSLOptions.Mode := sslmUnassigned; SSLOptions.VerifyMode := []; SSLOptions.VerifyDepth := 0; end; で 「sslvSSLv23」て、SSLとして古いんじゃないの?と思ったが、 ここ に 変数名の付け方としておかしいとの話が載っていて、本来 sslvSSLBest であり、これを選択した場合  SSLv3, TLSv1, 1.1 or 1.2 とトライするのだとか~ それで遅いのかもね、ただ上記方法であれば 1.2の次が出たときも OpenSSL のアップデートのみで対応できるということになります ※私の修正したコードの Indy バージョンより新しいのは、直接 TLS1.2 とか指定できるかも

Delphi で RFC822 の日付形式を TDateTime へ変換

Delphi でメールヘッダやXMLで使われる RFC822 の日付形式( Tue, 23 Jan 2018 13:50:00 +0900 みたいなの)を TDateTime へ変換 uses IdGlobalProtocols; // IdGlobalProtocols を追加 // : TimeStamp := StrInternetToDateTime('Tue, 23 Jan 2018 13:50:00 +0900');

Indy TIdHttp の デフォルト useragent - Delphi/C++Builder

Indy (10系統) TIdHttp  の デフォルト useragent Mozilla/3.0 (compatible; Indy Library)

Delphi 無名メソッド(無名関数)で簡単スレッド + OnTerminate

無名メソッドで、簡単使い捨て?スレッド Caption := 'Wait...'; TThread.CreateAnonymousThread( procedure begin Sleep(3000); TThread.Synchronize(TThread.CurrentThread, procedure() begin Form1.Caption := 'Done'; end); end).Start; CreateAnonymousThread メソッドは、 Suspend = True FreeOnTerminate = True で、Thread を生成するので、Start メソッドを付けてスレッドを開始させるだけ 【追記】 OnTerminate も無名メソッドで記載してみる type TNotifyEventProc = reference to procedure(Sender: TObject); // ------------- procedure TForm1.Button1Click(Sender: TObject); procedure MethRefToMethPtr(const MethRef; var MethPtr); type TVtable = array [0 .. 3] of Pointer; PVtable = ^TVtable; PPVtable = ^PVtable; begin TMethod(MethPtr).Code := PPVtable(MethRef)^^[3]; TMethod(MethPtr).Data := Pointer(MethRef); end; function MakeNotify(const Proc: TNotifyEventProc): TNotifyEvent; begin MethRefToMethPtr(Proc, Res...