| 管理者の勝手な書き込み |
| 2010/09/24 事務連絡 : Delphi 2010で起動時に「displayNotification:メモリが不足しています」が出る症状を無くする方法 → ショートカットのプロパティで起動時のパラメーターの最後に「-np」を追加してDelphiの初期ホーム画面を強制的に出さないようにする。 これの最良な改善方法はないのかな〜 |
| 2010/04/07 Delphi 2010でD7やD2007で作成したものを修正作業しました。 便利になったのが「CenterEdit」や「RightEdit」を作成・使用の必要がななったのが一番かな〜。 ってなんだい!!の突っ込みがはいりそうですが... また、圧縮解凍関連ファイルの改造も各所閲覧で対応が可能となりました。 ヒント「PChar」の仕様が「PChar→PAnsiCharとなり、PAnsiChar→PWideChar」で稼働OKとなりました。 全部PCharがPWideCharでないのがミソでした... D2010で困っているのがDBGridの色設定がWindow7では不可??になっているようです。 プログラム内でアクティブ・非アクティブ時に色使いを変更していますが、表示では無視されています。 はて、どうしたものかな〜 |
| 2009/12/16 ようやっとDelphiも誘惑に負けてVer. 2010へアップグレードしてしまいました。 どこが良いのか未だに分かりませんし、インストールソフトの使用方法が不明で四苦八苦です。 どうも紙の取説が無いと不安です。 で、2010の使用感は2007とほとんど変わらないのは良い_?ですが、どこが良いのかも判読不明で困った時にはDelphi7を使用している昨今です。 VISTAでもDelphi7が使用できるし開発したソフトも動くしで困らない状態ですから諸兄も...ですよね。 |
| 2009/03/06 あれま、気がつけば昼間の仕事とも忙しいのに人助けのプログラム作成で四苦八苦とはいかに!! おかげでDelphi2007 for Win32の使い方も覚えたりして... FindComponentの再掲載 procedure THosyuForm.SpeedButton9Click(Sender: TObject); var St : TStringList; j : Integer; DumyEdit : TEdit; begin St := TStringList.Create; try St.LoadFromFile(MainForm.InitSysFolder.Caption + '\DATA\SUITOU\NyusituIn.KAM'); for j := 0 to St.Count - 1 do begin DumyEdit := FindComponent('N_IN' + IntToStr(j + 1)) as TEdit; DumyEdit.Text := St.Strings[j]; end; St.LoadFromFile(MainForm.InitSysFolder.Caption + '\DATA\SUITOU\NyusituOut.KAM'); for j := 0 to St.Count - 1 do begin DumyEdit := FindComponent('N_OUT' + IntToStr(j + 1)) as TEdit; DumyEdit.Text := St.Strings[j]; end; finally St.Free; end; end; ソートのエンジン (uses文に DBTablesとBdeの記述が必要) procedure THosyuForm.TableSortItself(Table: TTable; nFields: Integer; pFields, pCases, pOrders: Pointer); var hTable : hDBIDb; nRecord : LongInt; Actived : Boolean; begin with Table do begin Actived := Active; Open; hTable := DBHandle; Close; nRecord := High(Integer); try Check(DbiSortTable(hTable, PChar(TableName), nil, nil, nil, nil, nil, nFields, pFields, pCases, pOrders, nil, False, nil, nRecord)); finally if Actived then Open; end; end; end; ソートの命令部分 procedure THosyuForm.SpeedButton8Click(Sender: TObject); const ORDER : array[Boolean] of SORTOrder = (sortDESCEND, sortASCEND); var bASCEND : Boolean; SortFields : word; <---- SortFields : array[0..3] of Wordと複数でも可能 SortCases : Bool; <---- 上に同じ SortOrders : SORTOrder; <---- 上に同じ begin if (DatasForm.OwnersTable.Active) then begin SortFields := DatasForm.OwnersTableCODE.Index + 1; SortCases := False; SortOrders := ORDER[bASCEND]; TableSortItself(DatasForm.OwnersTable, 1, @SortFields, @SortCases, @ SortOrders); <--- 1の部分が複数と同じ数字となります。 end; end; |
| 2009/02/10 DelphiでExcelを操るPRGを作るときには、Excelの記録マクロを 参考にするとベターだし理解しやすいですよ。 ただし、構文になれが必要ですが...当方も躊躇する事多々ありました。 |
| 2009/01/30 DelhiでExcel操作の事後確認の結果について、ColumnWidthを実行するとエラー(Rangeなんたら...)を吐いて停止する事に関してですが、ColumnWidthを実行する前にCellsになんらかの書き込み行を先行させると、同じColumnWidthもなんら問題なく実行できるようです。 DelphiのバグなのかExcelのバグなのか根拠はありませんが... |
| 2006/03/26 Excelを起動しての操作を業務連絡(防備箱)です。 Excelシートに入力済みの行数(Row)を数える 変数 := WorkSheet.UsedRange.Rows.Count RowsをColumnsに変更したら列数を数えてくれるかな? Excelを新規ファイルで起動する。 保存はファイル名をつけてからでないと、名前をつけろとメッセージが... Excel := CreateOleObject('Excel.Application'); Excel.Visible := True; Excel.WorkBooks.Add; WorkBook := Excel.ActiveWorkBook; VBAを併用するには、なかなか奥が深すぎです。 でも、DelphiでExcelを使うのも楽しいな〜 |
| 2005/01/22 昨年暮れにDelphi2005が届き、Delphi8より良くなっている事を期待していましたが想像していた感じよりD8に近いもののようです。 とりあえずD8の様なエラーを吐かないので安心しました。 が、D7で使用していたユニットやらパッケージをインストールすべく思考錯誤してきましたが、ヘルプが不完全なのには閉口ものです。 マニュアルが付属していないのにヘルプが不完全では...(^^;)> で、試行錯誤の結果ユニットのインストールはヘルプどうりに行きませんので以下にその方法を業務連絡します。 今回DelphiにインストールするユニットはTEditからの継承もののEditコンポのセンター版です。 unit CenterEdit;
interface
uses SysUtils, Classes, System.ComponentModel, Borland.Vcl.Controls, Borland.Vcl.StdCtrls;
type TCenterEdit = class(TEdit) private { Private 宣言 } protected { Protected 宣言 } public { Public 宣言 } procedure CreateParams(var Params: TCreateParams); override; published { Published 宣言 } end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('Samples', [TCenterEdit]); end;
{ TCenterEdit }
procedure TCenterEdit.CreateParams(var Params: TCreateParams); begin inherited CreateParams (Params); Params.Style := Params.Style or ES_MULTILINE or ES_CENTER; end;
end. これをインストールする工程を解説します。 まず、Delphi 2005を起動します。 右側にあるプロジェクトマネージャ内の何もない部分で右クリックし、メニューから【既存のプロジェクトを追加】を選択します。 Program Files\Borland\BDS\3.0\lib内のdclusr.dpkを指定します。 プロジェクトマネージャ内の何もない部分で右クリックして【追加】で、先に示したCenterEdit.pasのある場所を取得します。 これでプロジェクトマネージャ内のProjectGroup1/dclusr90.dpl/Contains内にCenterEdit.pasが登録されます。 さらに、再構築・コンパイル・インストールと進めて問題が無ければ Samples内にTCenterEditがインストールされDelphi2005で使用が可能となります。 この方法が正規かどうかは分かりませんが使用できますのでOKと言うことでしょうか?! ただ、.Netには無理でしょう<(__;)> 当分はD7で頑張りまが.... |
| 2004/01/12 Delphi8も使い込めない内にDelphi2005となってしまいました。 早いバージョンアップには閉口ものです。 アンチMにとってはアンチBになるのがとても恐い...今日は腰痛治療で正月勤務の代休を取りました。 どうも寝てられなくてPC前へ集合状態です。 腰が痛いのと使い切れないDelphiで疾駆八苦症候群です。 Delphi 7 で頑張っていますが、Delphi2005へUnitを移植できないのには参っています。 Synetsy君ヘルプです。 |
| 2003/03/19 Delphi8へバージョンアップ?したのは良いんだけれど、Delphi7まで作成したPRGがそのままではコンパイル出来ないのには閉口しました。 まだ勉強不足なのかも知れませんが.NETとかで参ってしまいました。 また一からの勉強には先が思いやられます。 SYEINETU君に教えて貰うことになりそうです。 |
2003/10/15 業務連絡>> D7付属のクイックレポートをインストールする方法は、 >> DelphiIDEのメニューから〔コンポーネント|パッケージのインストール〕を選 >> 択して、表示されたダイアログの「追加」ボタンをクリックして、Delphi7イン >> ストールディレクトリの\binフォルダの「dclqrt70.bpl」を選択すれば、コンポ >> パレットに見慣れたクイックレポートコンポが追加されます。 |
| 2003/08/24 ようやっと草地畑管理支援の作成がひと段落しましたので画面一こまを発表します。Delphi-MLの方々には大変迷惑をお掛けしましたが希望の仕様を達成することが出来ました。 ありがとうございました。 まだ改善箇所がありますのでプログラムとしての発表はもう少しかと...(^^;) 
|
| 2003/05/24 地図を取込んで、ある部分の面積を求めるって事でいささか時間を要してしまいました。 ヘロンの公式が使えるのは簡略式に分かりましたが、いざ凸凹な部分の面積を求めなければいけないってトコで可也悩みましたしNETサーフで調べましたが、なかなか的を得たヒントが見つかりませんでした。 いかに勉強不足だったかを思い知らされました。 が、簡単な図形なら下記のソースで求められますが他のHPでの計算結果とは違う事が多々ありますのであくまでも簡易計算と言う事で利用しました。 これは、マウスでポイントした各頂点をメモへ書き出し、それから計算させているソースです。 ちなみに下のソースでは頂点数を31点までとしています。 分かりますよね...(^^;)> ここまででDelphi-MLで叱咤・激励・ヒントを頂いてしまいました。 言葉足らずの頭ウニ状態でMLへの投稿でしたのでご容赦願います。 procedure TPointForm.SpeedButton4Click(Sender: TObject); var AddX, AddY : array [0..30] of Double; n, j, Dp : Integer; DumyS : String; X1, Y1, X2, Y2, Menseki : Double; begin n := PointMemo.Lines.Count; if n > 2 then begin for j := 0 to n -1 do begin DumyS := PointMemo.Lines.Strings[j]; Dp := Pos(',', DumyS); DumyS := LeftStr(DumyS, Dp -1); AddX[j] := StrToInt(DumyS); DumyS := PointMemo.Lines.Strings[j]; DumyS := RightStr(DumyS, Length(DumyS) - Dp); AddY[j] := StrToInt(DumyS); end; X1 := AddX[1] - AddX[0]; Y1 := AddY[1] - AddY[0]; Menseki := 0; for j := 2 to n -1 do begin X2 := AddX[j] - AddX[0]; Y2 := AddY[j] - AddY[0]; Menseki := Menseki + (X2 * Y1 - X1 * Y2) * 0.5; X1 := X2; Y1 := Y2; end; KaniMenseki.Text := FormatFloat('#,##0.0', Menseki); end else begin Beep; MessageDlg('図形の頂点が3点以下では計測できません。', mtError, [mbOk], 0); end; end; |
| 2002/12/28 Delphi7での作り込みもだいぶ実施して見ましたが、アイコンが綺麗になって増えたのは良いんですが、出来上がったプログラムがWindowsXP仕様にならないのが ちょっと寂しいですよね。 結果、Delphi6との差はマイナーアップって事でしょうか? 大枚叩いた割には残念でした。 あと、QuickReportがアイコンから無くなって別仕様となったのには喜んで良いのやら、悲しいやら...(^^;) |
| 2002/08/26 ついにDelphi7が出てしまいました。 今日帰宅しましたらアップデートの案内状が届いていました。 まだ完全に使用出来ないうちにアップデートとは...まして大枚25K円とは懐も痛い!! トホホホ...(^^;)> |
| 2002/07/09 今まで同じような構文を多用して来て、DOS版プログラム作成では出来る事がWindowsでは諦めていた事が、なんとも簡単に解決した一つの事例を紹介します。 取説を良く読んでいなかっただけかもしれませんが目から鱗状態でした。 QReportに名が同じで添え字を配したQLabelを多数使用している場合に同じような構文をだらだらと書かなくともOKというものです。 FindComponent()を使用します。 このFindComponentには非常に助けてもらいました。 今まで作成していたプログラムの書き直しをしようかなと思いましたが...そのままにしましょう!! procedure TYoteiForm.SpeedButton2Click(Sender: TObject); var DumyCompo : TQRLabel; j : Integer; begin for j := 1 to 任意 begin if j <= JRec then begin JyuseiCode := 'Jyusei' + IntToStr(j); JyuseiDate := 'J_Day' + IntToStr(j); JyuseiDays := 'JDays' + IntToStr(j); DataForm.JyuseiYoteiTable.RecNo := j; DumyCompo := FindComponent(JyuseiCode) as TQRLabel; TQRLabel(DumyCompo).Caption := DataForm.JyuseiYoteiTableShortCode.AsString; if DataForm.JyuseiYoteiTableJYUSEI_DATE.IsNull = False then begin DumyCompo := FindComponent(JyuseiDate) as TQRLabel; TQRLabel(DumyCompo).Caption := '''' + Copy(DateTimeToStr(DataForm.JyuseiYoteiTableJYUSEI_DATE.AsDateTime), 3, 8); DumyCompo := FindComponent(JyuseiDays) as TQRLabel; TQRLabel(DumyCompo).Caption := '授精後' + IntToStr(DataForm.JyuseiYoteiTableJYUSEI_NISSU.AsInteger); end else if DataForm.JyuseiYoteiTableBUNBEN_DATE.IsNull = False then begin DumyCompo := FindComponent(JyuseiDate) as TQRLabel; TQRLabel(DumyCompo).Caption := '''' + Copy(DateTimeToStr(DataForm.JyuseiYoteiTableBUNBEN_DATE.AsDateTime), 3, 8); DumyCompo := FindComponent(JyuseiDays) as TQRLabel; TQRLabel(DumyCompo).Caption := '分娩後' + IntToStr(DataForm.JyuseiYoteiTableBUNBEN_NISSU.AsInteger); end; 中略..... end; |
| 2002/07/04 最近は牛の繁殖管理支援プログラムを作っていますが、思ったほど作業が進まず疲れが出始めています。 また、今回は『MultiButton』を使用したプログラムです。 そこで、一部紹介します。 一つのボタンに三行表示としていますが、各行ごとにフォントが指定できないので苦肉の策の跡が見られると思います。 が、MultiButtonの使用を快く了承下さった河邦 正(GCC02240@nifty.com)さんには感謝致します。(http://homepage2.nifty.com/kht0000) procedure TCowsForm.FormShow(Sender: TObject); var CowsRow, CowsCol, CowsSqrt : integer; j, p, MC : integer; CowsList : TStrings; Moji, Comm1, Comm2, Comm3 : string; begin Cows := DataForm.CowsTable.RecordCount; CowSuu.Text := IntToStr(Cows); CowsSqrt := Ceil(SQRT(Cows)); CowsCol := CowsSqrt; CowsRow := Ceil(Cows / CowsSqrt); MultiButton.Count := CowsCol * CowsRow; MultiButton.ColCount := CowsCol; MultiButton.RowCount := CowsRow; if CowsCol > 5 then CowsForm.Width := CowsCol * 70 + 24 else Width := 345; if CowsRow > 4 then CowsForm.Height := CowsRow * 44 + 116 + 7 else Height := 292; Refresh; Comm1 := ''; Comm2 := ''; Comm3 := ''; DataForm.CowsTable.First; CowsList := TStringList.Create; try for j := 1 to CowsCol * CowsRow do begin while not DataForm.CowsTable.Eof do begin Comm1 := ''; Moji := Copy(DataForm.CowsTableCODE.AsString, 6, 4); for p := 1 to 4 do begin MC := StrToInt(Copy(Moji, p, 1)); case MC of 0: Comm1 := Comm1 + 'o'; 1: Comm1 := Comm1 + '1'; 2: Comm1 := Comm1 + '2'; 3: Comm1 := Comm1 + '3'; 4: Comm1 := Comm1 + '4'; 5: Comm1 := Comm1 + '5'; 6: Comm1 := Comm1 + '6'; 7: Comm1 := Comm1 + '7'; 8: Comm1 := Comm1 + '8'; 9: Comm1 := Comm1 + '9'; end; end; Comm2 := ' '; with DataForm do begin Comm3 := CowsTableNote.AsString; if CowsTableBUY_CODE.AsInteger > 0 then Comm2 := '廃用予定' else if Comm3 = '授' then begin if CowsTableKANTEI.AsBoolean then begin if CowsTableJyuseigoNissu.AsInteger > StrToInt(Days4) then Comm2 := '長期在胎' else Comm2 := '(^+^)'; end else begin if CowsTableJyuseigoNissu.AsInteger > 70 then Comm2 := '長期不受胎'; end; end else if (Comm3 = '分') and (CowsTableBunbengoNissu.AsInteger > 70) then Comm2 := '長期不授精' else if (Comm3 = '育') and (CowsTableIkuseiNissu.AsInteger > (StrToInt(Days10) + 70)) then Comm2 := '適期逸脱'; if Comm3 = '授' then Comm3 := Comm3 + IntToStr(CowsTableJyuseigoNissu.AsInteger) else if Comm3 = '分' then Comm3 := Comm3 + IntToStr(CowsTableBunbengoNissu.AsInteger) else if Comm3 = '育' then Comm3 := Comm3 + IntToStr(CowsTableIkuseiNissu.AsInteger); end; CowsList.Add(Comm1 + ',' + Comm2 + ',' + Comm3); DataForm.CowsTable.Next; end; if j > Cows then CowsList.Add('Non'); end; MultiButton.Items := CowsList; finally CowsList.Free; end; KotaiForm.SetBunbenDays.Caption := Days4; KotaiForm.SetKannyuDays.Caption := Days7; end; |
| 2002/01/06 ついに我がPC群はWindowsXP一色になってきました。 ですが、軽快にDelphi6が動いていた環境で再インストールした途端にコンパイルエラーが出るようになってしまいました。 ですので、業を煮やしてBorlandのDelphiサポートへ対策云々のメールを送りつけてやりました。 お正月休み中ですので返事が返って来ませんが楽しみです。 Windows2000で動けば良いと言う物でもないはずですので...(怒りモード!!) |
| 2001/12/30 ノートPCのWindows XP ProfessionalでDelphiを起動し、大き目のプログラムをコンパイルするとエラーを起こす不具合が時々出ますが、メモリーを増やしたらエラーを吐かなくなってくれました。 この件の対策関係がBorlandのホームページに書き込みがありませんし対策云々も無いようです。 ほかのユーザーは大丈夫だったのかなー |
2001/10/21 | ようやっと念願のKylixをインストールしました。 それも二台のPCへ!! ですがPRG作りまではいっていませんが...何故って職場にはLinux環境がありませんので趣味の域だけに存在しています。 |
|
| 2001/09/02 Delphi6で早々に再コンパイルを敢行しましたが、VARIANT関係でかなり手直しを要求される事態に遭遇?してしまって四苦八苦症候群状態の日々が続いています。 でも、もう少し隠し技が在りそうなので探しましょうね。 |
| 2001/08/08 Delphiがバーアップで6となり発売されましたが、買い入れに大蔵大臣との直接折衝で負けそうになりましたが、今月中過ぎにでも発注出来る運びとなりました。 UNIX版共々楽しみにしています。 でも、出費と大臣の目が刺さる!! |
| 2001/05/29 DelphiでMicrosoft Excelへ書き込む場合の応用例です。 結構事務作業でExcelデータが必要になりますので覚えておくと便利です。 普段、Delphiて゜使用するTableをParadox仕様にしていますので、こんなプログラムが必要なんです。 って言うか、Excelで直に読まれたり、改変されないように・・・。 また、最後の変数クリアは必ず書き込むようにして下さい。 必要部分は赤色 procedure TTougouForm.SpeedButton2Click(Sender: TObject); var TestNum, i, CalcNum : integer; Zei : double; SM : string; K_Code : integer; Excel, WorkBook, WorkSheet : variant; j, RowNo : integer; WorkDir : string; begin
//Excelシート作成 CopyFile(PChar(GetCurrentDir + '\DATA\Init_YAT.XLS'), PChar (GetCurrentDir + '\WORK\' + GetCode.Text + '_YAT.XLS'), True); WorkDir := GetCurrentDir + '\WORK\' + GetCode.Text + '_YAT.XLS'; Excel := CreateOleObject('Excel.Application'); Excel.Visible := False; //Excelを表示しない Excel.WorkBooks.Open(WorkDir); WorkBook := Excel.ActiveWorkBook; WorkSheet := WorkBook.Sheets['Sheet1']; YatyouTable.First; RowNo := 1; for j := 0 to YatyouTable.FieldCount - 1 do WorkSheet.Cells[RowNo, j + 1].Value := YatyouTable.Fields[j].FieldName; YatyouTable.First; while not YatyouTable.Eof do begin PBar.Position := PBar.Position + 1; RowNo := RowNo + 1; for j := 0 to YatyouTable.FieldCount - 1 do WorkSheet.Cells[RowNo, j + 1].Value := YatyouTable.Fields[j].AsString; YatyouTable.Next; end; Excel.ActiveWorkBook.Saved := True; //保存時に確認を表示しない Excel.ActiveWorkBook.Save; //Excelデータ保存 Excel.Quit; //Excel終了 Excel := Unassigned; //変数のクリア WorkBook := Unassigned; //変数のクリア WorkSheet := Unassigned; //変数のクリア end; |
| 2001.04.14 プログラム作成上でどうしてもフロッピーへのデータ移動・保管が必要になり、どうしても容量的に無理でしたので下記のコンポーネントを使用して見ました。 コンポーネント内には理解不能な記述が多々ありましたが使用する上には大丈夫でした。 >> 【作品名称】統合アーカイバコンポーネント for Delphi v1.28 >> 【書庫名称】CMARC128.LZH >> 【書庫Size】73,470 Byte >> 【作者氏名】米田 昌司 ( NORG1964 ) >> 【MAIL】norg1964@ceres.dti.ne.jp >> 【作者 URL】http://www.ceres.dti.ne.jp/~norg1964 以下が上記コンポーネントを利用した私作成のプログラムの一部紹介です。 procedure TForm.SpeedButtonClick(Sender: TObject); var ArchiveFile : TArchiveFile; FileList : TStringList; cond : integer; begin Beep; if MessageDlg('フロッピーへ圧縮バックアップします。確認して下さい。', mtInformation, [mbCancel, mbOk], 0) = mrOk then begin Refresh; if not DirectoryExists('A:') then begin Beep; MessageDlg('フロッピーディスクが挿入されていないか、フォーマットされていないフロッピーのようです。 確認して下さい。', mtError, [mbOk], 0); end else begin ArchiveFile := TArchiveFile.Create(Self); FileList := TStringList.Create; try ArchiveFile.FileName := 'A:\Data.LZH'; ArchiveFile.ArchiverType := atLha; FileList.Add(GetCurrentDir + '\DATA\*.*'); cond := ArchiveFile.PackFiles(Handle, nil, '', FileList); finally ArchiveFile.Free; FileList.Free; end; ArchiveFile := TArchiveFile.Create(Self); FileList := TStringList.Create; try ArchiveFile.FileName := 'A:\Work.LZH'; ArchiveFile.ArchiverType := atLha; FileList.Add(GetCurrentDir + '\WORK\*.*'); cond := ArchiveFile.PackFiles(Handle, nil, '', FileList); finally ArchiveFile.Free; FileList.Free; end; Beep; MessageDlg('フロッピーへ圧縮バックアップを完了しました。', mtInformation, [mbOk], 0); end; end; Refresh; end; 上記サンプルプログラム中には二種類のファイル圧縮がありますので良く見て下さいね。 |
2000.10.29 テーブルの物理ソートU (複数のフィールド対応) uses Db, DBTables, Bde; procedure TableSortItSelf(Table: TTable; nFields: Integer; pFields, pCases, pOrders: Pointer); var hTable: TTable; nRecord: LongInt; Actived: Boolean; begin with Table do begin Actived := Active; Open; hTable := DBHandle; Close; nRecord := High(Integer); try Check(DbiSortTable(hTable, PChar(TableName), nil, nil, nil, nil, nil, nFields, pFields, pCases, nil, False, nil, nRecord)); finally if Actived then Open; end; end; end;
[使用例] procedure TForm1.DBGrid1TitleCleck(Column: TColumn); const bASCEND: Boolean = False; ORDER: array[Boolean] of SORTOrder = (sortDESCEND, sortASCEND); var i: Integer; SortFields: array[0..2] of Word; 三種類のフィールドをソート対象にしている SortCases: array[0..2] of Bool; SortOrders: array[0..2] of SORTOrder; begin bASCEND := not bASCEND; for i := 0 to 2 do begin SortFields[i] := i + 1; SortCases[i] := False; SortOrders[i] := ORDER[bASCEND]; end; TableSortItself(Column, Field.DataSet as TTable, 3, @SortFields, @SortCases, @SortOrders); end; |
| 2000.10.01 テーブルの物理的ソートの方法で物議をしましたが、『Delphiツール』ヘルプを参照で解決しました。 テーブルをソートして,出力テーブルへその結果を出力します。呼び出し形式は次のとおりです。
fDbiSortTable(CustomerTbl, CustomerTbl2, CustomerTbl.FieldByName('COMPANY'));
function fDbiSortTable(SrcTbl, DestTbl: TTable; SortField: TField): longint; var Field: Word; CaseIns: boolean; Recs: longint;
begin Recs := SrcTbl.RecordCount; CaseIns := True; Field := SortField.Index + 1;
if DestTbl.Active = False then raise EDatabaseError.Create('Cannot complete operation with destination table closed');
Check(DbiSortTable(SrcTbl.DBHandle, nil, nil, SrcTbl.Handle, nil, nil, DestTbl.Handle, 1, @Field, @CaseIns, nil, nil, False, nil, Recs)); Result := Recs; end; これでソートと書き込みは完了なんですが、ソートされたデータが元のデータの次へ書き込みとなりますので不都合ですのでソート前のデータをカウントし書き込み後に削除する方法をとらなければなりません。 |
| 1999.12.30 見栄えばかりを追及すると、ちょっとした落とし穴にはまってしまうことがあります。 その際たる部分が処理の速度です。 で、今回はEXCELやLOTUSで画面の更新をしないマクロでかなりの量のデータの作業させる事が良くありますよね。 これと同様にさせることが出来るのが AbcdTable.DisableControls; try 各データ処理 finally AbcdTable.EnableControls; end; これで、ずいぶん以上に処理速度を上げることが出来ます。 知っている方は申し訳ないですが我慢してくださいね |
| 1999.11.27 ついにDelphiもバージョンが5.0となりました。 当方のHDDにもようやっと5.0がインストールされました。 今回のバージョンアップの額は今までの3倍程度とごっい感じでした。 しかし、以前のバージョンの不快な部分が大分無くなっていましたので良い方向へ向いたと思います。 |
| 1999.09.08 Delphi 5.0がついに出ましたが、さすがにINPRISEですね。 すっかり上げてバージョンアップをしたようで、さすがにアップに尻込みをしています。 いずれは5.0を手に入れなければなりませんが、少々きつい価格構成です。 |
| 1999.05.23 すっかりHP更新をさぼってPRG作りに没頭していましたが、EVariantErrorに泣かされ続けています。 でも、Delphiのトレース操作が分かりましたので結構はかどりました。 自分専用のPRGであればこんなに悩まなくても良いですが、他人様用にはちょっと考えなければなりませんものね。 信悦君も以前にVariantでブツブツ言っていましたよね。 |
| 1999.05.07 以下がPHOTO MAEDAさん用に作成したフォトライブラリ管理データベースのメインメニューです。 まあまあでしょ。 ここでは一切高等なコードは無いです。 まっ、メニュー画面ですからね。 これが下のコード他を実際に見たWindow状態です。
unit MainMenu;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls;
type TMainForm = class(TForm) Bevel1: TBevel; Image1: TImage; BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn; Bevel2: TBevel; BitBtn4: TBitBtn; procedure Image1Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure BitBtn4Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end;
var MainForm: TMainForm;
implementation
uses Prg, PhotoSee, BirdSee, FlowerSee;
{$R *.DFM}
procedure TMainForm.Image1Click(Sender: TObject); begin Top := 0; Left := 0; Enabled := False; PrgForm.Show; end;
procedure TMainForm.BitBtn1Click(Sender: TObject); begin Top := 0; Left := 0; PhotoForm.Show; PhotoForm.PhotoTable.TableName := GetCurrentDir + '\DATA\PHOTO.DB'; PhotoForm.PhotoTable.Active := True; PhotoForm.PHO_CodeTable.TableName := GetCurrentDir + '\DATA\PHO_CODE.DB'; PhotoForm.PHO_CodeTable.Active := True; PhotoForm.Label11.Caption := FormatFloat('#,###', PhotoForm.PhotoTable.RecordCount); PhotoForm.DBGrid1.Color := clYellow; PhotoForm.PhotoTable.Edit; BitBtn1.Enabled := False; BitBtn2.Enabled := False; BitBtn3.Enabled := False; BitBtn4.Enabled := False; Enabled := False; end;
procedure TMainForm.BitBtn2Click(Sender: TObject); begin Top := 0; Left := 0; BirdForm.Show; BirdForm.BirdTable.TableName := GetCurrentDir + '\DATA\BIRD.DB'; BirdForm.BirdTable.Active := True; BirdForm.BID_CodeTable.TableName := GetCurrentDir + '\DATA\BIR_CODE.DB'; BirdForm.BID_CodeTable.Active := True; BirdForm.Label15.Caption := FormatFloat('#,###', BirdForm.BirdTable.RecordCount); BirdForm.DBGrid1.Color := clYellow; BirdForm.BirdTable.Edit; BitBtn1.Enabled := False; BitBtn2.Enabled := False; BitBtn3.Enabled := False; BitBtn4.Enabled := False; Enabled := False; end;
procedure TMainForm.BitBtn3Click(Sender: TObject); begin Top := 0; Left := 0; FlowerForm.Show; FlowerForm.FlowerTable.TableName := GetCurrentDir + '\DATA\FLOWER.DB'; FlowerForm.FlowerTable.Active := True; FlowerForm.FLW_CodeTable.TableName := GetCurrentDir + '\DATA\FLW_CODE.DB'; FlowerForm.FLW_CodeTable.Active := True; FlowerForm.Label9.Caption := FormatFloat('#,###', FlowerForm.FlowerTable.RecordCount); FlowerForm.DBGrid1.Color := clYellow; FlowerForm.FlowerTable.Edit; BitBtn1.Enabled := False; BitBtn2.Enabled := False; BitBtn3.Enabled := False; BitBtn4.Enabled := False; Enabled := False; end;
procedure TMainForm.BitBtn4Click(Sender: TObject); begin Close; end;
end. |
| 1999. 4. 2 大まかなプログラムは結構作れるようになり、対外的にも作成してみました。 でも、なかなか頭の中で計画した感じを実現するには、以前に使用していたデータベースソフト(dBXL)の概念?が邪魔して苦労しています。 Windows仕様のプログラム作成に取り掛かってしまった以上仕方がないので自分から慣れるしか算段はありません。 |
| 1999. 2. 21 本日も休日返上?!Delphi三昧をしていました。 腰が完全に固まってしまいましたが、結構な勉強をさせて頂きました。 今回はLotusやExcelの様に矢印キーでDBEdit間を縦横無尽に移動しょうと言う仕様作成に挑戦して見ました。 なんとか出来ました。 ついでに移動先のColorをも変える方法を取って見ましたら結構見やすい事に気がついたりして。(^^;)> 当方は未だにDelphiのサービスパックを手に入れていません。 誰かー Help me !! |
| 1998.11. 7 結構とDelphi4.0の書き方が理解出来て来ましたが、まだまだ奥が深いようです。 やはりデータベースの扱いが標準なんでしょうね。 今までの操作が信頼性ない感じだったって事でしょう。 |
| 1998.10.13 ようやっと、Delphi 4.0への3.1からのビルド方法が分かりました。 またもや、新マニュアルには載っていませんでしたが、なんとか初心者は頑張りました。 3.1で作成したプロジェクトファイルを削除してから、4.0で新しくプロジェクトファイルを作成して3.1で作成した*.PASファイルを追加して行ったら、なんとかコンパイルしてくれます。 が、あまりいじっていないプログラムであれば、そのままでも4.0でコンパイル出来るようです。 一時はサポートセンターへ怒鳴り込みを掛けようかとしましたが、ちょっと大人げない気がして止めました。 |
| 1998. 9. 8 文字列で命令?を作成して実行させることが『SINYESU』君に出来ないと言われて、かなり焦ってしまいました。 DOS版のDBXLでは実現できた操作ですが。。。。( _ _ ;)ガクッ!! としました。 どうも使い慣れた方法を選択してしまうのは、頭が固いからかも知れませんね。 忙しい仕事の合間を利用しての作成では頭が完全にウニ状態です。 |
| 1998. 8. 2 クイックリポートの作成で用紙の大きさをカスタム設定した場合に、プレビュー表示でプリンターセットアップの表示で出てしまいます。 これにはホトホト参ります。 |
| 1998. 8. 1 AsVariant 変換関数ってのは便利な関数ですね。 データベースのフィールドへ数値や文字を代入する時のすべてに使用出来るようです。 ただし、他の変換関数が使用出来る場合がありますが、コンパイルに成功しても、当てはまらない使用ではエラーになってしまいますので、なかなか奥が深いです。 |
| 1998. 7.20 おおまかにプログラムが作られるようになって来ました。 なんだか、Visual Basicにも似ていますが、本当はそうではないんでしょうがね。 If ... Then の場合にはIf文が真の場合に次の一行が実行されます。 ですので複数行を対応させる為にbegin とendで括って実行させます。 これがなかなか理解できなかったです。 マニュアルは初心者を完全に無視していますので。 |
| なんだかんだで、Windows用のプログラム作成を実行しています。 なかなか難しいって言いますか、とっつき難いですね。 パスカルとか言って反って難しくしている気がします。 Sinyetu君に教えて頂いた第一弾Delphi制覇術は 1. テーブル 2. データソース 3. グリッド 4. ナビゲーター で、決してゲーマーの合い言葉ではありませんが、Delphiでデータベースプログラムを作成する上で絶対必要かつ短絡作業工程です。 と、いつかは このページで有意義なプログラムを発表させて頂きますね。 |