涼の成長記録

自らの人生に主導権を持つべく、独立を目指して2014年3月31日を持ってITエンジニアを退職。そんな23歳♂の成長記録。

C++Builder

TDateTimePickerのTimeプロパティは日付も返す

C++Builderで、日時関連の処理を書く時、System.TDateTimeクラスを使用します。この、TDateTimeクラスの仕様については、以前に書きました。 まず、TDateTimeクラスについて。 System.TDateTime - XE2 API Documentation つまり、こういうことです。 TDateTi…

条件演算子を使いこなせない

TDateTimeクラスとは? さて、今日はタイトルの通り、条件演算子とVCLのTDateTimeクラスの罠に引っかかりました。1時間ぐらい無駄にしたような気がします。今回起こった問題は、とあるTDateTime変数の"hh:nn:ss"情報が消えてしまうというもの。 まず、TDate…

C++BuilderでUDP送受信サンプル

少しお粗末ですが、こんなベースクラスを作ってみました。いつも、ソケット操作の処理は、送受信のスレッドクラスに組み込むのですが、通信先が多いアプリケーションでは、無駄が多いと感じたため、思い切って作りました。これがオブジェクト指向なのか。。…

【WinSock API】 DLLの初期化

今日からWSAプログラミングを始めます。WinSock API、つまりWindowsでのソケットプログラミングです。TCPとUDPの送受信を組んでいきます。 まず、WinSocketの初期化メソッドから。 /*! WinSocket初期化 @return true:成功, false:失敗 */ bool __fastcall TU…

E2126 case でローカル変数の初期化がとばされた

以下のように、switch文のcase内でローカル変数を宣言すると、 E2126 case でローカル変数の初期化がとばされた というエラーが発生します。 switch (value) { case 0: int i = 10; // エラー routine(i); break; case 1: break; default: break; } Embarcad…

終わらないスレッドをぶっ殺す

物騒なタイトルでございます。 社内で開発されたアプリケーションを終了する時、物凄い時間がかかることがあります。もしくは、終了されずにフリーズしてしまったりなど。コードを追いかけていくと、原因は各種スレッドの終了処理にありました。以下のような…

C++Builderで#pragma once

C++Builder 2010から、インクルードガード(ワンタイムインクルード)が、プリプロセッサ指令、つまり#pragmaによりできるようになりました。 今まで、以下のようにマクロを使っていたのを、 #ifndef TSampleH #define TSampleH ・・・ #endif 以下の1文で済…

C++Builderでフォームの移動を禁止する。

フォームの移動を抑止したい場合って結構あります。私がよく出くわすのは、XGAで画面いっぱいに広がるフォームを作りたい場合です。TFormのAlignプロパティをalClientにすれば簡単に実現可能なのですが、こうするとSXGA、フルHDなどの大きな解像度で実行した…

C++BuilderでTProgressBarがうまく動かない

アプリケーションの起動に時間を要する場合は、スプラッシュスクリーンを準備します。ちなみに、スプラッシュスクリーンというのは、例えばMicrosoft officeのWord 2013であれば、こういうやつです。 設ける目的は、アプリケーションが起動していることをユ…

C++Builderでアプリケーションから取扱説明書を表示する

そりゃ、直感的なグラフィカルユーザーインターフェースを提供できれば、それに越したことはないのですが、機能の多いアプリケーションでは難しいものです。そこで、ユーザーにオペレーションマニュアルを納めたりするのですが、これをアプリケーションが入…

C++Builder でデバッグ/リリースモード時のみコンパイルするコード

例えば、デバッグモードの時だけ特定のログを出力したい時、例えば、デバッグモード時はアプリケーション終了確認ダイアログは、うざったいから表示させたくない時、マクロ定義"_DEBUG"の判定でその夢を叶えることができます。 #ifdef _DEBUG ShowMessage("…

TStrings::CommaTextは半角スペースも区切り文字とみなす

エントリのタイトルがすべてです。前の記事で、CSVファイルアクセスクラスを作ってみていたのですが、VCLのTStrings::CommaTextプロパティが、Commaだけでなく、Spaceも区切り文字とみなすことが分かりました。ややこしいプロパティ名しやがってこのー。 CSV…

いつまで経ってもオブジェクト指向が分からない

アプリケーション初期化の方法 最近オブジェクト指向がほんの少しだけ分かるようになってきて、C++Builderでアプリケーションを開発しているのですが、初期化処理をどこで実装するのかが分かりません。INIファイルを読み込んだり、各種DLLを初期化したり等、…

CSVファイルアクセスクラス

良さげなものがWEBで見つからなかったので、自分で無理矢理作ってみる。※ 2013年11月25日 以下の記事もご覧になった方が良いかもしれません。 TStrings::CommaTextは半角スペースも区切り文字とみなす - 涼の成長記録 TCsvFileAccess.h /*! @file TCsvFileAc…

INIファイルアクセスクラス

一般レベルの品質の強固なプログラムを組むためには、どうしたら良いのでしょう。いつになれば、初心者を卒業できるのでしょう。そんなことを思いながら、コードをブログに載せまくって、誰かエンジニアとしてメンターになってくれる人が、現れないかを待ち…

二重起動防止クラス

アプリケーションを二重起動しないためのクラスを作成しました。 TDoubleStartingGuard.h /** * @file TDoubleStartingGuard.h * @brief 二重起動防止クラス定義 */ #ifndef TDoubleStartingGuardH #define TDoubleStartingGuardH #include <vcl.h> #pragma hdrstop</vcl.h>…

プロジェクトのフォルダ構成

今回、C++Builder XE2で完全新規のWindowsアプリケーションを開発することになりました。今の私の全ての力を使って、過去最高のアプリケーションを作り上げようと思います。軽く見積もったところ、150クラスぐらいのアプリケーションなのですが、工期が2か月…

BCB6 プログラムにコマンドを送信しているときに、エラーが発生しました

※ タイトルの事象は、この記事で解決できません。 前回、以下の記事で'C++Builder 6'を起動できるようになりました。 bcb.droに移動できません - 涼の成長記録 しかし、C++Builder 6の起動問題は、まだ私に着いて回っていることに気が付きました。既存のプロ…

bcb.droに移動できません

本題 昔のソフトウェアを改修するため、Windows 7マシンに、Borland C++Builder 6をインストールしました。インストールが終わり、起動しようとすると、以下のようなダイアログが表示されました。 'C:\Program Files\Borland\CBuilder6\Bin\bcb.$$$'から'C:\…