くだすれDelphi(超初心者用)その46at TECH
くだすれDelphi(超初心者用)その46 - 暇つぶし2ch82:デフォルトの名無しさん
08/03/22 10:31:34
>>81
Delphi2の記憶で申し訳ないが、
KeyDownには、KeyPressにはないShiftStateがあって
ssCtrlみたいなのを見ればよかったような。

83: ◆XcB18Bks.Y
08/03/22 11:58:06
>>82
私もそれで行けるかなと思ったのですが念のためにテストしてみたら駄目でした。
もし単にタブ文字入力を禁止したいのでしたら
単にタブ文字かどうかを調べてもしそうなら文字を消すようにすればいいと思います。

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
 //// タブ文字が入力されたら取り消す ////
 if Key = #9 then // 9はタブを示す文字コード
 begin
  Key := #0; // #0を代入すると文字入力がキャンセルされる(らしい)
  Beep; // 取り消しとは関係ないけど「おっと、ここではタブキーは無効なんだぜ」とユーザーに伝える
 end;
end;

そうではなくてもし

 [Ctrl]+[I]によるタブ文字入力を禁止したいが[Tab]キーによる入力は許可したい

というのでしたらすいませんがちょっとわかりません。


84:デフォルトの名無しさん
08/03/22 13:55:01
つダミーAction作成

85:デフォルトの名無しさん
08/03/22 16:38:48
FormのOnShortcutで if (Ctrl+Iだったら) then Handled:= trueにするとか

86:デフォルトの名無しさん
08/03/22 20:35:56
>>83
Delphi2で申し訳ないが、
たしかに素直にやろうとしてもだめだった。
で、スマートじゃないのと
winのバージョンでタイミングの問題が気になるが
FlagをたててKeyDownでssCtrlを見ておいて、
KeyPressで
if Flag and (Key = #9) then
としたら、いちおう↓これもできた。
> [Ctrl]+[I]によるタブ文字入力を禁止したいが[Tab]キーによる入力は許可したい

87:デフォルトの名無しさん
08/03/23 15:42:06
Delphi 7ですが、コンボボックスにキーボード入力がわかりません。
itemになかった場合はキーボード入力したいのですが、Styleを
csOwerDrawVaiableとかいろいろ変更してもキー入力できないか
EaccessVilationがでます。今は、itemに項目があってそれを選択する
にはOnChange イベントで取り出しています。よろしくお願いします。


88:デフォルトの名無しさん
08/03/23 16:22:19
まずcsDropDownでダメだったことを詳細に書いて。

89:デフォルトの名無しさん
08/03/23 16:22:32
AutoCompleteはFalse、StyleはデフォルトのcsDropDownに。OnChangeで処理ってのはユーザ入力を
許してる状況ではどうなんだろ?

90:デフォルトの名無しさん
08/03/23 16:29:05
入力化なコンボボックスってかっこ悪い

91:デフォルトの名無しさん
08/03/23 16:51:28
考え方が逆だ。入力するものが選択可能なエディットだと。

92:デフォルトの名無しさん
08/03/23 16:56:20
>>87
Comboboxをただ貼り付けただけでその動作になってると思うんだけど
デフォルトの動作から具体的にどう変えたいって事?

93:デフォルトの名無しさん
08/03/23 19:23:57
皆様、ありがとうございました。
OnChangeで
Case ComboBox1.itemindex of
  1:
  2:
とかしていたのですが、キーボード入力をするとここのところでエラーになる
ようでした。しょうがないので、ComboBox1.textの値で分岐させることに
したら解決?しました。お騒がせしました。
でも、この方法しかないのでしょうか?後学のためにどなたかキーボード
入力も許すとき、どういう方法で選択されたのを知るのが常套手段なのか
教えてくださいませんか?


94:デフォルトの名無しさん
08/03/23 20:00:12
>>93
そのコードだけではエラーになるところが見当たらない
大方-1を考慮してないだけとかそんなだと思うが

95:デフォルトの名無しさん
08/03/23 20:39:44
Vistaのデスクトップは、ctrl+マウスホイールでアイコンの大きさを
自由に変えられるけど、DelphiのListView で同じ様な表現をするには
どうしたらいいんでしょうか?

96:デフォルトの名無しさん
08/03/23 21:20:58
>93
ItemIndexは0から始まる。該当アイテムがなければ-1だ。というか >91 だ。

97:デフォルトの名無しさん
08/03/23 21:33:43
>>93
いまいちよくわかってないんだけど

idx := ComboBox1.Items.IndexOf(ComboBox1.Text);
ってやればTextがItemsの何番目かがわかる。-1ならそれ以外。

98:デフォルトの名無しさん
08/03/23 22:36:31
>>87
onchange呼ばないでonselectでやれ。
それでキー入力はできるだろ


99:デフォルトの名無しさん
08/03/25 15:58:32
delphiで簡単にRSSやAtomフィード作るコンポってありますか?

100:デフォルトの名無しさん
08/03/25 20:24:53
MSXML

101:デフォルトの名無しさん
08/03/25 21:08:47
ミリ秒を時間とか分とか秒とか込みで文字列化する関数ないですか?

102:デフォルトの名無しさん
08/03/25 21:12:13
FormatDate

103:デフォルトの名無しさん
08/03/25 22:48:48
TPageControlの枠を消すにはどうしたらいいんでしょうか?

104:デフォルトの名無しさん
08/03/25 22:52:00
PageControl1.Style := tsButtons;

105:デフォルトの名無しさん
08/03/25 23:00:04
それだと無駄な余白が出来るから
PageControl1.Visible := Falseにして
表示用にTabControl1配置してHeight := 20くらいにして
その下にPanel配置してタブの切り替えのタイミングでで
TabSheet.Parent := Panel1;
TabSheet.Align := aliClient;

と面倒なことをやると枠も余白も消せる。

106:デフォルトの名無しさん
08/03/26 00:57:42
StringGrid := [goRowSelect, goRangeSelect] として、
1~3行目を選択後に2行目をクリックすると、選択行は2行目のみとなります
これを選択範囲内をクリックした場合、新たに選択せず
選択範囲を維持するというふうにするにはどうすればいいでしょうか?

107:デフォルトの名無しさん
08/03/26 13:24:09
GetIndex('漢a字', 1) => 1
GetIndex('漢a字', 3) => 4
というような関数ありますか?

108:デフォルトの名無しさん
08/03/26 13:33:28
>>107
読解力のない俺はアフォなのか・・・

109:デフォルトの名無しさん
08/03/26 13:44:21
俺もだ。すまん、アフォでごめん。

110:デフォルトの名無しさん
08/03/26 16:04:27
アフォな俺にはこれぐらいしか…
function GetIndex(s: String; i: Integer): Integer;
begin
Result := Length(AnsiLeftStr(s, i - 1)) + 1;
end;

111:デフォルトの名無しさん
08/03/26 16:52:30
2バイトで考えた文字数目が1バイトで考えた時に何バイト字目になるかを返す関数ということでFA?

112:デフォルトの名無しさん
08/03/26 16:53:19
function GetIndex(Str:String; Index:Integer):Integer;
begin
if Str='漢a字' then
begin
 if Index=1 then
  Result:=1
 else
  Result:=4;
end else
 Result:=0;
end;

俺って天才かも!

113:デフォルトの名無しさん
08/03/26 17:21:06
こうか?

function GetIndex( ws: WideString; index: Integer): Integer;
begin
Result:= Length(String(WideString(copy(ws, 1, index-1))))+1;
end;

114:デフォルトの名無しさん
08/03/26 17:35:05
>>107
俺は読めたよ

function GetIndex(test:string;num:integer):integer;
begin
if test = '漢a字' then
begin
if num = 1 then result := 1;
if num = 3 then result := 4;
end;
end;

後は自分で工夫してくれ

115:デフォルトの名無しさん
08/03/26 17:47:45
> 97様、98様
お返事ありがとうございました。試してみたいのですが、来週まで
時間がとれそうもないので、まずはお礼だけさせてください。
また、よろしくお願いします。

116:デフォルトの名無しさん
08/03/26 19:54:12
StringList遅すぎる…
Capacity多めに設定したらそこそこ改善されたけどまだまだ遅い。
Clear, Add, Stringsの列挙くらいしかやらないんだけど代替ライブラリはないものか。
MemoryStreamでも使うか。

117:デフォルトの名無しさん
08/03/26 21:20:57
遅いコード晒せ

118:デフォルトの名無しさん
08/03/26 21:26:48
MemoryStreamを引き合いに出している時点で明らかに使い方が間違っている

119:デフォルトの名無しさん
08/03/26 21:47:26
FastMM使ってなかったら、>>116はメモリマネージャ交換した方がよさそうだな。


120:デフォルトの名無しさん
08/03/26 21:49:55
FastMM って3年前からだよ。それまでStringListって遅かったのか?

121:デフォルトの名無しさん
08/03/26 21:49:57
ほんとにClear,Add,Stringsだけしか使ってない?それで遅いって、100万件ぐらい
データ突っ込んでのかな。


122:デフォルトの名無しさん
08/03/27 03:42:15
TMemoでしたって落ち?

123:デフォルトの名無しさん
08/03/27 08:18:10
自分の無能さをライブラリのせいにするな

124:デフォルトの名無しさん
08/03/27 09:03:40
配列の宣言にpackedがついている場合を見かけますが、これ何か意味あるんですか?

125:デフォルトの名無しさん
08/03/27 09:07:08
メジャーになれなかった理由の一つがまさにこういった事。
比較的多用しそうな事がいまいちで滅多に使わなそうな事がすげー便利。

126:デフォルトの名無しさん
08/03/27 09:29:16
>>124
たとえば3バイトのメンバーを持つ構造体の配列とか?

127:124
08/03/27 09:36:45
>>126

type
 THoge = packed record
  A: array[0..2] of Byte;
 end; // 3バイトの要素を持つ構造体

 THogeArray = array[0..9] of THoge;
 TPackedHogeArray = packed array[0..9] of THoge;
begin
 WriteLn(SizeOf(THoge)); // 3
 WriteLn(SizeOf(THogeArray)); // 30
 WriteLn(SizeOf(TPackedHogeArray)); // 30
end;

違いが分からないんです。

128:デフォルトの名無しさん
08/03/27 09:46:15
配列についているんじゃなくて、構造体についているのよ。
packedをつけないと、アライメントされるかどうかはコンパイルオプションによる。
常にpackedつけておけばOK。

>>127
packedを外してコンパイルしてみ。

129:124
08/03/27 09:50:48
>>128
> packedを外してコンパイルしてみ。

TPackedHogeArrayのpackedをですか?

130:124
08/03/27 09:54:58
THogeとTPackedHogeArrayのpackedを外してみましたが、
出力は変わりませんでした。
ちなみにコンパイラオプションは{$A8}です。

131:デフォルトの名無しさん
08/03/27 09:55:01
>>129
何が起こるか想像がつかないなら、やってみる価値はある。

132:131
08/03/27 10:57:08
ごめん、勘違いしてた。
混ざらないと駄目みたい。 そうなると、packed配列は意味ありませんね。

procedure TForm1.Button1Click(Sender: TObject);
type
 THoge1 = record
  A: Byte;
  B: Byte;
  C: Byte;
 end;
 THoge2 = record
  A: Byte;
  B: Byte;
  C: Byte;
  D: Word;
 end;
begin
 Caption := Format('%d, %d', [SizeOf(THoge1), SizeOf(THoge2)]);
end;

133:124
08/03/27 11:16:28
ありがとうございます。
構造体のメンバのアラインメントは他の言語にもあるのでわかるのですが、配列のpackedは謎です。
VCLのソースの中でも配列の宣言にpackedがついていたりいなかったりで、
何か使い分けがされているような気もするのですが、挙動の違いが分からないので釈然としません。
とりあえずつけておけば問題はなさそうですが・・・

134:デフォルトの名無しさん
08/03/27 11:52:13
>>133
Delphiでしか使わないなら気にしない。


135:デフォルトの名無しさん
08/03/27 15:14:18
Vista対応ってしとく必要あんのかな

136:デフォルトの名無しさん
08/03/27 16:52:40
TTabControlで質問です。

タブを選択した時に、その番号に関連付けられてるオブジェクトが
条件を満たさないときはそのタブを選択させないようにするにはどうすればいいんでしょうか?

OnChangingイベントでいけるかと思ったんですが
これから選択しようとしているタブ番号の取得方法がわかりません。
クリックの時はマウス座標を取得する事でどうにか出来ない事もないんですが、
キーボードの時に詰まってしまいます。

137:デフォルトの名無しさん
08/03/27 20:51:54
Delphiクイックリファレンスによると配列のpackedは標準Pascalとの互換性のためで
Delphiでは何の意味もないそうです

138:デフォルトの名無しさん
08/03/27 21:50:08
StrToIntをAPIで書くとしたらどうなるんですかね?
SysUtilsはあまり使いたくない性分です・・・

139:デフォルトの名無しさん
08/03/27 21:52:42
どう考えても意味不明だろ、それ。

140:デフォルトの名無しさん
08/03/27 21:57:55
>>138
APIは知らんけどSystem.Val

しかしこのスレ無内容な一行レスばっかりだな。彼らは一体何がしたいのか。

141:デフォルトの名無しさん
08/03/27 22:07:38
>>140
こんな関数があるとは・・・
勉強になります
ありがとうございます

142:デフォルトの名無しさん
08/03/27 22:12:26
関数ではなくて手続きでしたね、すみません

143:デフォルトの名無しさん
08/03/27 23:06:08
いやだってSysUtilsは使いたくないって意味不明じゃん。ValもStrToIntも変わらないでしょ。

144:|Д゚彡 ◆A6VzDeLphI
08/03/28 02:16:29
>>107
CharToByteIndex

なんだって。


145:デフォルトの名無しさん
08/03/28 05:27:30
1文字目は1バイト目から始まり、
3文字目は4バイト目から始まるって意味か。

>>138
こんなんでどうだ?(未チェック) 16進数が必要なら自分でやって。

function StrToInt(const Str: string): Integer;
var
 I: Integer;
 P: PChar;
 Minus: Boolean;
begin
 Result := 0;
 Minus := False;
 P := PChar(Str);
 if P^ in ['+', '-'] then
 begin
  Minus := P^ = '-';
  Inc(P);
 end;
 while P^ <> #0 do
 begin
  if not (P^ in ['0'..'9']) then raise Exception.Create('変換エラー'); // EConvertみたいなのあったかも。
  Result := Result * 10 + Ord(P^) - Ord('0');
  Inc(P);
 end;
 if Minus then Result := Result * -1;
end;

146:デフォルトの名無しさん
08/03/28 06:05:11
Result := Result * 10 + Ord(P^) - Ord('0');
ここおかしくない?


147:デフォルトの名無しさん
08/03/28 06:05:56
やべ、スレあげちまった。

148:デフォルトの名無しさん
08/03/28 07:09:17
123の場合、
Result := 0 * 10 + '1' - '0' → 1
Result := 1 * 10 + '2' - '0' → 12
Result := 12 * 10 + '3' - '0' → 123
であってると思うけど。

149:デフォルトの名無しさん
08/03/28 07:43:32
ああ、あってるね。ごめんなさい。


150:デフォルトの名無しさん
08/03/28 09:51:44
+,-,#0の一文字だけのとき、0になるわ。

151:デフォルトの名無しさん
08/03/28 10:01:22
URLリンク(delwiki.info)
この GetInteger10を呼び出してる GetIntegerみたいに好みの仕様を追加したらいいんじゃないの?


152:デフォルトの名無しさん
08/03/28 15:17:15
TreeViewで特定の項目だけVisible:=Falseにできますか?
または代わりの方法があれば教えてください。

153:デフォルトの名無しさん
08/03/28 17:15:01
Canvasにウィンドウ右上の_ □ ×ボタンをレンダリングする方法ないですか?
ビットマップで用意するとテーマの変更に追従できないので。

>>152
たぶん無理。Add/Deleteするしか。

154:デフォルトの名無しさん
08/03/29 00:26:03
>>153
WinAPIのDrawFrameControl


155:デフォルトの名無しさん
08/03/29 10:18:18
DrawFrameControlってテーマに対応してるの?

156:デフォルトの名無しさん
08/03/29 10:37:32
Win32APIだし、内部的にそれらのAPI使ってWindowsはウィンドウ描画してるんじゃ?

てか、それぐらい自分で試せるだろ。


157:デフォルトの名無しさん
08/03/29 10:39:03
いや、テーマAPI別にあるから対応してねぇかも。


158:デフォルトの名無しさん
08/03/29 10:45:44
Win32のスレで聞きな。そっちの方が知ってる人多いと思う。


159:デフォルトの名無しさん
08/03/29 13:26:10
TRegExprでtr演算子の置換をするにはどうすればいいですか?
たとえば「tr/abc/ABC/」見たいなのです
英語とか良く分からないしググッても出ないし・・・
よろしくお願いします

160:159
08/03/29 14:48:57
今頃ですがTRegExprでなくてもDLLを使わないようなものでなければ大丈夫です

161:デフォルトの名無しさん
08/03/29 15:53:24
TRegExprの使い方
URLリンク(delwiki.info)

PCRE使ったの
URLリンク(cc.codegear.com)

162:デフォルトの名無しさん
08/03/29 17:47:55
鬼車ベースのライブラリってないの?

163:159
08/03/29 17:54:41
>>161
> TRegExprの使い方
これを読んでみて分かりませんでした・・・
何かサンプルをいただけないでしょうか

164:デフォルトの名無しさん
08/03/29 18:08:56
ぢゃ日本製使え
URLリンク(homepage1.nifty.com)

165:デフォルトの名無しさん
08/03/30 02:33:50
DirectoryListBox で、今選んでいるフォルダの深さが何階層目かを知る方法ってありますか?

166:デフォルトの名無しさん
08/03/30 02:40:05
それ16ビットUIの名残り。使わない方がいいよ。

167:デフォルトの名無しさん
08/03/30 03:00:55
>>166
そうですか、今後なるべく使わない様にします。
じゃあ、変数に入ってるパスが何階層目かを知る方法ってありますか?

168:デフォルトの名無しさん
08/03/30 04:05:07
デリミタの数を数えるとか

169:|Д゚彡 ◆A6VzDeLphI
08/03/30 04:23:47
URLリンク(delfusa.main.jp)

俺も自作のを使ってしまうなあ。


170:デフォルトの名無しさん
08/03/30 06:13:30
StringReplaceで\を\_にでも変換して、
長さの差を取れば\の数は分かるんじゃないのか?

171:デフォルトの名無しさん
08/03/30 06:19:44
\の数だけだとUNCパスで誤動作するんじゃね?

172:デフォルトの名無しさん
08/03/30 09:42:07
はぁ・・・Del7買ってから出来たものはボタンクリックして画像表示
それから2Dのスクロールと3Dモデルの回転のみ・・・

変数宣言めんどくせー
コンパイラ時に自動作成して後で修正させるようにしてくれりゃいいのに

173:167
08/03/30 10:01:31
>>168-171
やはり文字系で処理するしかないですか
なんかディレクトリの命令であるかなと思ったんで
すいませんでした、なんとかやってみます
ありがとうございましたw

174:デフォルトの名無しさん
08/03/30 10:03:40
ExtractFileDriveしてExcludeTrailingPathDelimiterしつつExtractFilePathできる回数を数える

175:167
08/03/30 11:19:06
>>174
あっ、そういう方法でも出来るんですね
なんか出来そうな感じがしてきました
試しにやってみます、ありがとうございましたw

176:|Д゚彡 ◆A6VzDeLphI
08/03/30 12:03:39
作ってます。
URLリンク(delfusa.main.jp)

function PathLevel(Path: String): Integer;
procedure testPathLevel;

ご参考ください。

こういうのって、つくづく、実装よりも
テストコードが大事って思う。

177:デフォルトの名無しさん
08/03/30 12:06:29
>172
そういうのが苦手な人にはDelphiは向かないのかも。Delphi2007ならリファクタリングで変数宣言を
追加する機能もあるけど、ちょっと違うな。昔のVBなら変数宣言不要なモード(Option)もあった気が。

178:デフォルトの名無しさん
08/03/30 12:55:00
>>177
というかコンパイラって手抜きで進歩無さ杉
変数宣言なんか同じソース上に表示させる意味もなく、プロパティのように別窓か別ファイルでソート可能な表形式で管理・表示でいい


179:デフォルトの名無しさん
08/03/30 13:11:59
BASICでもやってろ

180:デフォルトの名無しさん
08/03/30 13:54:06
そもそもプログラミングに向いてない。

181:167
08/03/30 14:15:03
>>176
WordDecompose.pas 頂きました
色々参考にさせていただきます、ありがとうございましたw

182:デフォルトの名無しさん
08/03/30 16:20:24
ありとあらゆる変数をグローバル変数で宣言しておいたらどうだろう?

183:デフォルトの名無しさん
08/03/30 18:47:34
>>178
IDEの恩恵しか受けたことないとこういう風に育つのか

184:デフォルトの名無しさん
08/03/30 19:10:06
いや、何となくわかる。変数宣言のUI。でもソース上に書くってのに
慣れてるしプログラム書いてるって感じするし、よくよく考えてみると
GUI にするのってローカルだとかナンだとか面倒そうじゃん

185:デフォルトの名無しさん
08/03/30 20:35:28
妄想するだけでで宣言文を書けたらいいのにね。
それは冗談として、アドインで作れないの?

186:デフォルトの名無しさん
08/03/31 00:25:08
GUIで表示や追加くらいなら作れると思うが、
そんなので喜ぶのは初心者だけだし、
そういうのを作れるレベルの人は逆に生産性下がって不要なので
結果として誰も作らないってことになってるんじゃないかと

187:デフォルトの名無しさん
08/03/31 00:39:57
SpeedButtonみたいなのがいくつか5個くらい並んでて、一つは常にへっこんでて、一つを押すと他の全部が上がるってタイプのボタンはどうやってるんですか?

188:デフォルトの名無しさん
08/03/31 00:48:22
SpeedButtonをグループ化するんだ

189:デフォルトの名無しさん
08/03/31 00:54:37
できました。
どうもありがとう!

190:デフォルトの名無しさん
08/03/31 10:50:14
データベースでBlobに入っているバイナリファイルを少しずつダウンロード
したいのですが、良い方法はないでしょうか?
現在TBlobStream.CreateでそのStreamから少しずつ読み込んでいるのですが、
Createメソッドを実行した時点ですべてのデータを読み込んでいるようです。
要は少しずつReadしてプログレスバーにその状況を表示したいのです。
上の方法だとCreateを呼んだところでプログラムが一次停止したようになってしまいます。


191:デフォルトの名無しさん
08/03/31 12:19:44
それについて深く考えたことない事を始めに断っておくけど、
昔調べた記憶と今、ちょっとソース見た感じだと、少なくとも新しい独自のBlobStreamクラスと
それを返すようにADOならTCustomADODataSet,dbExpressならTCustomSQLDataSetの
CreateBlobStreamメソッドをオーバーライドして独自BlobStreamを返すようにしないと
厳しそうだな。

192:デフォルトの名無しさん
08/03/31 12:22:49
まぁ、読み込むBlobの最大サイズは設定できるようだから、それを設定して、
一次停止したようになるのを避けることはできる。根本的な解決ではないが。
それが嫌なら上記の方法以外ぱっと思いつかない。


193:デフォルトの名無しさん
08/03/31 17:29:09
d6perなんですがdialog.pasがC:\Program Files\Borland\Delphi6\Source\Vclに存在しません・・・
ちょっと修正したい箇所があるのですが誰かうpしていただけないでしょうか?

194:デフォルトの名無しさん
08/03/31 19:37:21
そのためのプロ版だ。プロ買え。

195:デフォルトの名無しさん
08/03/31 20:49:51
DBGrid1のOnDrawColumnCellで、DBGrid1の上にUpDownを描くやり方で、UpDownでフィールドの値を変えることにチャレンジしています。

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin

 // DBGridをFColorDBGrid1とFColorDBGrid2の縞々にする。
 if not (gdSelected in State) then
 begin
  if Table1.RecNo mod 2=0 then
  begin
   DBGrid1.Canvas.Brush.Color := FColorDBGrid1;
   DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end else
  begin
   DBGrid1.Canvas.Brush.Color := FColorDBGrid2;
   DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); 
  end;
 end;

196:つづき①
08/03/31 20:50:48
 // UpDownの描画
 fView := False;
 if gdSelected in State then with DBGrid1 do
 if SelectedField is TIntegerField then
 with TIntegerField(SelectedField) do
 begin

 if Table1.Active then
  updownDBGridInt.Position := Table1.FieldByName('Int').AsInteger;
  fView := true;
 end;
 updownDBGridInt.Visible := fView;
 if updownDBGridInt.Visible then
 if not CompareMem(@oldRect, @Rect, Sizeof(Rect)) then
  with Rect do begin
  updownDBGridInt.Top := Top;
  updownDBGridInt.Left := Left;
  updownDBGridInt.Height := Bottom - Top;
 end;
end;

197:つづき②
08/03/31 20:51:36
// updownDBGridIntのOnChangingEx
procedure TForm1.updownDBGridIntChangingEx(Sender: TObject;
var AllowChange: Boolean; NewValue: Smallint;
Direction: TUpDownDirection);
begin

 if (Table1.Active=true) and (0<Table1.RecordCount) then
 begin
  if not fView then exit;
  AllowChange := DBGrid1.SelectedField.CanModify;
  if AllowChange then
  begin 
  with DBGrid1 do
   if SelectedField is TIntegerField then with TIntegerField(SelectedField) do
   begin

   //Table1.DisableControls;
   Table1.Edit;
   Table1.FieldByName('Int').AsInteger := updownDBGridInt.Position;
   Table1.Post;

   DBGrid1.Refresh;
   //Table1.EnableControls;

   end;
  end;
end;
end;

こうすると、Tableにフィルターをかけてないときは、値の増減ができ、うまくいくのですが、フィルターをかけた場合、UpDownを増減すると、カレントレコードが先頭にいったり、最後にいったり(updownDBGridIntもそれにあわせて移動します)増減できなくなってしまいます。
一般的な話でなくて申し訳ないですが、原因のわかる方いらっしゃいませんか?

198:デフォルトの名無しさん
08/04/01 13:03:38
writelnで出力した文字列を
一段上に戻って再度上書きして
進行状況を表示したいんですがどうやればいいですか?

199:デフォルトの名無しさん
08/04/01 13:07:49
戻るくらいなら最初から改行するなよ

200:ななしへたぐらま ◆XcB18Bks.Y
08/04/01 13:44:59
Writelnの代わりにWriteで書いてバックスペース(#8)?


201:デフォルトの名無しさん
08/04/01 16:35:05
URLリンク(dn.codegear.com)を参考に自分のソフトをVistaに対応させようと思ったのですが、
ShowModalのところで詰まってしまいました
FormのプロパティにPopupParentが存在しないのです
どうすればいいのでしょうか?

202:デフォルトの名無しさん
08/04/01 19:57:44
>>201 TurboDelphi使え

203:デフォルトの名無しさん
08/04/01 20:50:47
APIなどで代替出来ないのでしょうか

204:デフォルトの名無しさん
08/04/01 21:59:02
TurboDelphi(ソース付き)をダウンロードしてPopupParentの実装を調べればいいんじゃね?

205:デフォルトの名無しさん
08/04/01 22:01:20
>>195
無関係な行を全部削除してくれんかね。

206:195
08/04/01 23:52:21
すみません。

// DBGridをFColorDBGrid1とFColorDBGrid2の縞々にする。

以下の1ブロックは必要ないですね。

削除したのを1から載せるとまたクドくなるのでこれで許してくれませんか?

207:デフォルトの名無しさん
08/04/02 01:43:01
ぜんぜんわからんわ。
UpDownコントロールをDBGridのセルの上に置いて、値を変えられるようにしたいみたいだけど。
withで間違えているのかな。

208:201
08/04/02 06:22:50
URLリンク(ddev.blog46.fc2.com)をTFormの代わりに使ったら解決しました
こちらの検索不足で申し訳ありませんでした

209:195
08/04/02 09:05:58
FilterをONにしなければ、いけるんですが、もう少しいじってみます。

210:デフォルトの名無しさん
08/04/02 20:25:55
if a and b then

という場合必ずaから評価される保証はありますか?

211:デフォルトの名無しさん
08/04/02 21:09:24
はいえ

マジレスすると完全評価にした場合のことは知らん

212:195
08/04/03 16:34:43
StringList1: TStringList;

が持っている情報量をbyteで知るにはどうしたらいいんでしょうか?

213: ◆XcB18Bks.Y
08/04/03 16:37:03
言語ガイドの記述を読むと完全評価の場合は評価順序に関する記述はありませんね。

>>210
Delphiでは論理演算子andやorでつながった式については
デフォルトではショートサーキット評価といって
左から順に評価して式全体の値が確定した時点でそこで評価を打ち切ってしまいます。

> if a and b then
だとaの値がFalseなら式全体の値はbの値に関係なくFalseになりますからここで評価を打ち切ります。
つまりbの評価は行われません。

完全評価でコンパイルさせるとすべてを評価することが保証されますが
順序に関する記述が一切無いので記述と異なる順序で評価される可能性があります。


214:デフォルトの名無しさん
08/04/03 17:59:30
>>212
Createの前後でメモリを空き容量を数えるww

215:デフォルトの名無しさん
08/04/03 18:14:12
>>212
Length(StringList.Text) + StringList.InstanceSize とか

216:212
08/04/03 18:54:09
ごめんなさい、説明不足でした。
もってるTextの情報量だけ欲しくて、だから、単にLength(StringList1.Text)+1でいいですよね?

217:デフォルトの名無しさん
08/04/03 20:21:46
以前このスレで、画面の切り替えにPageControlを使うアイデアがありました。
ワタシ今までずっと、たくさんのフォームを作って画面切り替えをしてきたの
ですが、今回、PageControl方式でやってみました。最初は良かったのですが、
ページが増えるにつれメインフォームに無茶苦茶たくさんのコンポーネントと
そのイベントなどが集中してしまい、かなり混乱してきています。
皆様はどのように整理してやってるのでしょうか。

218:デフォルトの名無しさん
08/04/03 20:30:06
まさにそのためにFrameが用意されている。
Panelのような感じでフォームに貼り付けられて
設計時には個々の独立したフォームのように扱えるから綺麗にコードがばらせる。
ListBox/ListViewなんかのわりに処理がたくさん入るようなコンポーネント単位で独立させていってもいいし。

219:デフォルトの名無しさん
08/04/03 20:48:07
フレームは以前チャレンジしたことがありまして、ただそのときは設計時に
貼り付けた先を更新してしまってdfmファイルを直して戻したり、イベント
関連で不都合があったり、何やかやで結構痛いめにあった記憶がありまして
(すっかり忘れてますが…)避けてきたのですが、うまく使えば画面切り替え
には一番使えるモノなのかですか。あぁ結構アタマ混乱気味です。

220:デフォルトの名無しさん
08/04/03 20:55:57
別フォームで設計しておいて、そのフォームに貼り付けたコンポーネントの
全部のオーナを変更してしまうとか

フォームのままManualDockで貼り付けてしまうとか

221:デフォルトの名無しさん
08/04/03 21:11:43
>>219
そういえば設計時に埋め込むと
>ただそのときは設計時に
>貼り付けた先を更新してしまってdfmファイルを直して戻したり
に絡んだエラーだか警告だかのダイアログがでまくってたような。

なので自分は設計時には埋め込まずFormCreateで
Frame1 := TFrame1.Create(Panel1);
Frame1.Parent := Panel1;
Frame1.Align := alClient;
と動的に作るようにしてる。

あとFormのOnCreate/OnDestroy/OnShow/OnHide
に相当するイベントハンドラがないのも不便なので
TFrameを継承して
DoCreate/DoDestroy/DoShow/DoHide
といったイベントハンドラもどきのvirtual procedureを持ったTFrameExを作って
更に子にFrameExのインスタンスがあったらそのもどきのメソッドを
適切なタイミングで呼び出すをTFormExもつくって使ってる。

言われてみればだいぶクセのある機能ではあるなぁw
それでも他にいい代替案がないんでずっとこの方式。
動的にタブを生成廃棄するメモやブラウザタイプのアプリを作るときにもかなり自然に使えるしね。

自分的には他にイベント関連等目立った問題はあまりないと思う。

222:デフォルトの名無しさん
08/04/03 22:21:55
十分めんどくさいなぁ、それ。しかし、そんな感じになるんだろうなぁ。

223:デフォルトの名無しさん
08/04/03 23:27:28
>216
いいけど、いいのか?Textプロパティを参照するとStrings[]の内容をCR+LF付で連結した文字列が
一時的にだが生成されるんだけど。それにCR+LFの分が計算に入ってるけど?
それにStrings[]に同一内容同一起源のデータがあると同一の領域に格納されていてデータサイズとしては
1つ分しか消費していない、という状況をどう考えるか、とか。
要は無理ってことだが。

224:デフォルトの名無しさん
08/04/04 07:20:49
TBitmap.PixelFormat に pfDevice をセットしたら、自動的に HandleType は bmDDB になるのだろうか?
TBitmap.PixelFormat に pf24bit をセットしたら、自動的に HandleType は bmDIB になるのだろうか?
TBitmap.HandleType に bmDDB  をセットしたら、自動的に PixelFormat は pfDevice になるのだろうか?
TBitmap.HandleType に bmDIB  をセットしたら、自動的に PixelFormat は pf24bit になるのだろうか?

225:最初のひとつだけYESみたいだが?
08/04/04 07:35:14
ソース嫁。

226:デフォルトの名無しさん
08/04/04 08:03:46


227:デフォルトの名無しさん
08/04/04 09:04:34
ごめん>>220はオーナーじゃなくて親だった。

procedure SetParentFromForm(dst,src:TWinControl );
var i:Integer;
begin
for i:=src.ControlCount-1 Downto 0 do
src.Controls[i].Parent:=dst;
end;

という関数を作って、
SetParentFromForm(Panel1,Form2);
のように行う
切り替える時は、
SetParentFromForm(Form2,Panel1);
として戻してやる。

オーナーが切り替わってるだけだから、ボタン類は元のフォームのイベントとして呼ばれる


228:デフォルトの名無しさん
08/04/04 14:44:17
String型の''やポインタ型のnilに相当するChar型の表現ってありますか?

例えば、String型の変数であるstrに'ABC'という文字列が入っていたとして、
一文字削って'AB'としたい場合、

 str[3] := ''; // これではエラーになりますが…

のようにしたいです。

229:デフォルトの名無しさん
08/04/04 14:50:01
SetLength(str, 2)
str := Copy(str, 1, 2)

str[3] := #0 or Chr(0)
が直接の回答だけどおそらく望んでいる動作とは異なり
'AB'#0
という3文字の文字列になってしまう。
PCharに渡すなら問題ないけど。

230:デフォルトの名無しさん
08/04/04 15:02:55
その他
str := LeftStr(str, 2);
Delete(str, 3, 1);

231:228
08/04/04 15:03:14
>>229
素早いご回答をありがとうございます。

実は、str[1]に空文字を代入して'ABC'→'BC'とするなど、
色々できたらと思ったのですが、
やはりString型として処理した方がよさそうですね。
(そもそもString型の中身について理解していないのが問題ですが...)

232:デフォルトの名無しさん
08/04/04 15:12:25
それなら delete(str,1,1) でいいと思うけどな


c言語の文字列はゼロ値終端で扱われる。 
pascalの文字列は 構造体になっていて文字のサイズ情報を持っている。
だから値#0を含む文字も含む事が出来る。

DelphiはC言語との連携が楽なように、PCharとpascal文字列の型変換が出来るように工夫されている
たとえば s:=PChar(s); と書くと、sの中から#0までの長さに自動調整される。

だから delete(str,1,1)を str :=PChar(str)+1 ; と書くことも出来る

233:228
08/04/04 16:01:13
>>232
delete関数、知りませんでした…。
その他もとても勉強になります。ありがとうございました。m(__)m

234:デフォルトの名無しさん
08/04/04 16:13:39
こんにちは、Delphiのインラインアセンブラについて質問があります。

Python for Delphi(P4D)のコンポーネントのソースを見ているのですが、

> mov eax, Self
> mov eax, [eax].DLL_PyArg_ParseTuple

の [eax].DLL_PyArg_ParseTuple とはどういう意味なのでしょうか?

eax + DLL_PyArg_ParseTuple
であってますでしょうか

235:デフォルトの名無しさん
08/04/04 18:11:10
>>234
はいな

const hoge=3;
mov eax, [eax].hoge は mov eax, [eax+3] と同じ

そういう時は、実行して、そこで止めてCPU窓を開くと逆アセ表示するからわかるよ


236:デフォルトの名無しさん
08/04/04 21:24:48
StretchDrawで画像を縮小するとかなり画像が劣化するのですが、
たとえば、1/2とか特定の縮小率にすればいいとか何かいい方法は
ないでしょうか?
Tbitmapを印刷するのに、StretchDLBitsを使う方法はDelphi Tipsで見つけたの
ですが、画面上でも使えますか?

237:デフォルトの名無しさん
08/04/04 22:36:31
縮小にはDHGL
URLリンク(www.asahi-net.or.jp)

238:デフォルトの名無しさん
08/04/04 23:53:45
こんばんは、旧バージョンについて教えてください。
サンプルでDelPhi5のソース等をもらったのですが
DelPhi5 というのはもう手に入らないのでしょうか?
現在提供されている無償版が6で5とは互換性がないと
どこかに書いてあったのでDelPhi5を手に入れる方法を
ご存知なら情報をお願いします。


239:デフォルトの名無しさん
08/04/05 00:25:14
>>235
レスサンクス!

> そういう時は、実行して、そこで止めてCPU窓を開くと逆アセ表示するからわかるよ
おお!その手があったか

240:デフォルトの名無しさん
08/04/05 00:25:55
>>236
DHGL
>237

Delphiな小技:画像の拡大と縮小(画質重視)
URLリンク(delphi.livedoor.biz)

Delphiな小技:バイキュービック(Bicubic)法による拡大と縮小
URLリンク(delphi.livedoor.biz)

きれいな拡大・縮小~Bilinear法の解説~
URLリンク(www.geocities.jp)

きれいな拡大・縮小その2~Bicubic法の解説~
URLリンク(www.geocities.jp)

Delphi(Graphics) : Resize 1. Bilinear
URLリンク(junki.lix.jp)

Delphi(Graphics) : Resize 2. Bilinear vs Bicubic
URLリンク(junki.lix.jp)

Delphi(Graphics) : Resize 3. Interpolations
URLリンク(junki.lix.jp)

Delphi(Graphics) : [GDI+] Resizing Images
URLリンク(junki.lix.jp)

>>238
Delphiの無償版はDelphi6とTurbo Delphiしかないと思う。
Delphi6でコンパイルしてみて、警告やらエラーが出たらソースを修正すればよし。

241:デフォルトの名無しさん
08/04/05 00:26:52
>>238
Delphi5のソースは大体、上のバージョンで通るから大丈夫。
通らなかったら、ここに聞きに来な

242:デフォルトの名無しさん
08/04/05 00:52:42
>>240-241
ありがとうございます。6でコンパイルしてみます。
エラーがどうしても解消できなかったら
また質問に来るのでよろしくお願いします。

243:デフォルトの名無しさん
08/04/05 05:59:25
> 237,240
ありがとうございました。さっそく、DHGLを試してみます。
Delphi Graphic Secretsはどこでも販売してなくて
Amazonでは中古を9800円で販売していましたが、今、みたら
4000円だったのでさっそく購入してみます。
もしDHGLがうまくいかなかったら、ご紹介いただいたGDI+も
挑戦してみたいと思います。
本当にありがとうございました。

244:デフォルトの名無しさん
08/04/05 06:13:45
きれいに画像を縮小したいだけだったら、DHGLを使うのに本を買う必要はないです。

245:デフォルトの名無しさん
08/04/05 15:18:51
ボタンクリックで即休止状態にしたいです。

新規プロジェクト(VCL Formアプリケーション)のフォームに配置したボタンに

procedure TForm1.Button1Click(Sender: TObject);
begin
SetSystemPowerState(False,True)
end;

と書いてコンパイルしただけでは、実行してボタンクリックしても
見た目は無反応でした。何かコードが不足しているのでしょうか・・・?

Windows XP SP2です。
ご存じの方いらっしゃいましたら、
すみませんが、よろしくお願いいたします。

246:デフォルトの名無しさん
08/04/05 16:11:20
>245
URLリンク(msdn2.microsoft.com)(VS.85).aspx

Remarks

The calling process must have the SE_SHUTDOWN_NAME privilege. To enable
the SE_SHUTDOWN_NAME privilege, use the AdjustTokenPrivileges function.
For more information, see Changing Privileges in a Token.



247:デフォルトの名無しさん
08/04/05 18:22:17
>>243
URLリンク(hp.vector.co.jp)
かなり出遅れたけど上記の nstretchf はどう?

248:デフォルトの名無しさん
08/04/05 21:00:23
delphi経験一週間の者です。

配列を2つ作って、
両者の要素をコピーし合いたいんですが、
上手くいきません。

値のコピーをしたいのですが、
アドレスがコピーされてる模様。

Delphi7で、配列の値をコピーする
方法をご教示ください。

249:デフォルトの名無しさん
08/04/05 21:02:26
配列に値入れてコピーしたらアドレスになるってどういう事?意味がわからない

250:デフォルトの名無しさん
08/04/05 22:32:28
なぜ、うまくいかないコードを示さないのだろう?


251:デフォルトの名無しさん
08/04/06 01:04:39
>>248
b := a; // アドレスのコピー
b := Copy(a, 0, Length(a)); // 値のコピー
SetLength(b, Length(a)); Move(a[0], b[0], SizeOf({要素の型}) * Length(a)); // 値のコピー

文字列の場合は t := s; とすると、s の文字列をコピーした振りをしてくれる(COW: Copy-On-Write)。

252:245
08/04/06 01:35:00
レスありがとうございます。
URLリンク(homepage1.nifty.com)
で示されてるサンプルコードでも期待した結果を得られなかったのですが、
休止状態にするには、
ボタンのプロシージャにはどのように書けばいいのでしょうorz
すみません、よろしくお願いいたします


253:デフォルトの名無しさん
08/04/06 04:32:50
なんで246を読んで試さないの?

254:デフォルトの名無しさん
08/04/06 10:03:16
面倒だからです

255:デフォルトの名無しさん
08/04/06 10:13:23
246のサンプルが252じゃねの

256:デフォルトの名無しさん
08/04/06 13:09:07
>252
ん~そこのサンプルソースでうまくいかないのであれば、それぞれの関数の戻値をチェックしてエラーが起きていないか、
そのときのGetLastErrorの値はどうなっているか、あたりを調べてみて。Win32Check関数とかお勧め。
それとこの手の質問をするときはうまくいかない環境のOSやバージョン、他のOSでの状況なども明示すること。

257:デフォルトの名無しさん
08/04/06 13:27:42
XP SP2ゆうてるじゃん

258:デフォルトの名無しさん
08/04/06 18:47:46
> 247
ありがとうございました。DHGLでうまくいったので、今のところは
必要ないのですが、いきずまったら試してみます。
ありがとうございました。

259:デフォルトの名無しさん
08/04/07 11:48:11
TDdeClientItemのOnChangeイベントって
頻繁に更新するデータとか、複数のデータに対しては
正確に動かないんでしょうか?

URLリンク(qc.borland.com)
URLリンク(homepage1.nifty.com)

これに書いてあるのと全く同じ症状が起きて困ってます。
OpenOfficeとかC#のDDE通信だときっちり動いているのに
Delphiで作ったアプリだと明らかにデータ更新が遅延したり、
中には全く反応しないitemがあったりします。

260:デフォルトの名無しさん
08/04/07 12:49:15
いつも、いつもすみませんが、教えてください。

RadioGroup1で 例えば、0:犬 1:豚とあり、初期に0:犬をマークしているようになっていると
します。で、豚を選択したときは、RadioGroup1で、OnEnterでイベントを検出して
Procedure TFrom1.RadioGroup1Eneter(Sender:TObject)
    begin Label1.caption:='pig'; end;
でうまくLabelにpigを出せるのですが、
RadioGroup1で0:犬、1:豚、2:魚として初期に0:犬をマークしているとします。
で、豚か魚をマークした時に
Procedure TForm1.RadioGroupEvent(sender:TObject)
    Case Radiogroup1.ItemIndex of
1:label1.caption:='pig';
2:label1.caption:='fish';
end;end;
ではLabelに何も表示されません。何かいい知恵はないでしょうか?

261:デフォルトの名無しさん
08/04/07 13:11:41
OnClick

262:デフォルトの名無しさん
08/04/07 13:45:16
あれー、OnClickは試して駄目だったのですが
今するとちゃんとできます。なぜだんたんだろう??
なにはともわれありがとうございました。

263:デフォルトの名無しさん
08/04/07 17:24:25
ComboBoxのドロップダウンの長さを長くするにはどうすればいいんでしょうか?

264:デフォルトの名無しさん
08/04/07 17:55:51
DropDownCount

265:デフォルトの名無しさん
08/04/07 19:12:29
>>264

ありがとです♪

266:デフォルトの名無しさん
08/04/07 19:17:28
今度からはヘルプ読もうねボク

267: ◆XcB18Bks.Y
08/04/07 19:32:51
>>221
フレームにOnCreateやOnDestroyはありませんが
コンストラクタやデストラクタをオーバーライドすればたいていのことはできると思います。
(この方法はDelphi 4(5かも)以降のフォームやデータモジュールでも使えます)

ただ各画面に共通する機能は1カ所に書く方がよいので
私も共通の基本フレームクラスを作って各画面のフレームはそこから派生させています。

画面がいくつもあるアプリなんか作ってしまうとフレームのありがたさが身にしみてきます。


268:デフォルトの名無しさん
08/04/07 20:37:58
>>267
む~そんなんですか。画面たくさんのアプリじゃあ、フレームなのかな。
PageContorolじゃ無理あるかも(以前に質問したモノですが)
どう実装するか全然ピンと来ないですが、参考となるサイトか参考書など
ありましたら教えてもらえますでしょうか。

269:デフォルトの名無しさん
08/04/08 01:07:43
>>268
以前作った検証用のサンプルを継承に依存しないように書き直して
TurboDelphi用にしたサンプルとメモ書き。
中見ればわかるけど全然大したことないよ。インターフェースは好きなように書き換えちゃって。
URLリンク(delwiki.info)

delwikiはまたphpのに戻ったのか。

270:デフォルトの名無しさん
08/04/08 09:18:52
ComboBoxのドロップダウンの幅を広くするにはどうすればいいんでしょうか?

271:デフォルトの名無しさん
08/04/08 10:18:05
CB_SETDROPPEDWIDTH を窓ハンドルに送ってやる。

こんな感じ
ComboBox1.Perform(CB_SETDROPPEDWIDTH,300,0);

272:デフォルトの名無しさん
08/04/08 10:28:22
>>268
普通にフォームに書いて設計しておくのではどうして駄目なの?
似たような配置で画面遷移で一部だけ変わるような場合も
フォームの継承使えば簡単だし


273:デフォルトの名無しさん
08/04/08 13:00:32
パラレルポートからパルスを出力したいのですが
どうすれば可能でしょうか。
パルス幅の設定とON、OFFスイッチを設け
ONしている間だけ設定値のパルス幅で出力し続けるという
感じで行きたいのですが。。。

274:デフォルトの名無しさん
08/04/08 14:02:57
パラレルポートってUSBの先にあるやつじゃなくて、パソコン附属の奴だよね?

1、I/O命令を使えるようにする。
 giveioとかGWIOPMとか
Delwikiに書いてあったんだけど消えてる。 
 キャッシュは
URLリンク(72.14.235.104)コンポーネント/GWIOPM(I/Oポートを直接叩く)

2、I/O命令をasmで呼び出すか、関数にして呼び出す

3、時間制御については、精度の保持はパソコンなので難しい

275:デフォルトの名無しさん
08/04/08 16:40:00
>>274
ありがとうございます。
時間制御ですが、ひとまずプログラム上でお約束できれば
良しとしようと思います。
マイクロ秒タイマーのコンポーネントとか使ってみよう

276:デフォルトの名無しさん
08/04/08 17:50:28
コレ結構簡単
URLリンク(www.seya.org)

277:デフォルトの名無しさん
08/04/09 11:12:43
TMemoベース(でなくてもいいけど)のコマンドプロンプトのコンポーネントってないですか?
cmdなり任意のコマンドラインツールを対話的に実行できるものです。

278:デフォルトの名無しさん
08/04/09 11:22:20
コマンドプロンプトを使った方が遥かに楽な気がする

279:デフォルトの名無しさん
08/04/10 02:58:38
自分のアプリに埋め込みたいんだろ

280:デフォルトの名無しさん
08/04/10 03:10:38
メモ帳で、Enterを押したらその行を解析して実行するのはどぉ?

281:デフォルトの名無しさん
08/04/10 03:29:39
改行は?

282:デフォルトの名無しさん
08/04/10 07:57:39
失礼します。
iniファイルを実行ファイルのフォルダじゃなくて、
ホームディレクトリに置きたいのですが、
どうすればよいのでしょうか。今は下のコードです。

IniFile := TIniFile.Create(extractFilePath(paramstr(0))+'test.ini');

実行ファイルは同じだけど、iniは各個人で持ちたい。

283:デフォルトの名無しさん
08/04/10 08:37:53
マイドキュメントのフォルダの事なら
URLリンク(support.microsoft.com)
つまり
uses shlobj ; の. SHGetSpecialFolderPath CSIDL_PERSONAL

レジストリ でもアクセス出来る
URLリンク(support.microsoft.com)


でも、実行ファイルのあるフォルダにユーザー命のフォルダを掘ってアクセスする方がいいと思うよ。
ユーザー名は GetUserName/ GetUserNameEx で取れる

284:デフォルトの名無しさん
08/04/10 09:00:10
>>282
function GetMyIniFolderName: string;
var
uName: string;
nSize: DWORD;
begin
nSize := 4000;
SetLength(uName, nSize + 4);
if GetUserName( PChar(uName), nSize) then begin
SetLength(uName,nSize-1);
end else uName := 'non';
Result := ChangeFileExt(paramstr(0) ,'' )+ '@'+uName+'.ini';
end;

実行ファイルのフォルダで "実行ファイル名@ユーザー名.ini" という感じで作る

IniFile := TIniFile.Create( GetMyIniFolderName() );

285:デフォルトの名無しさん
08/04/10 09:38:50
GetEnvironmentVariableで環境変数取る手もあるな。

APPDATA=C:\Documents and Settings\UserName\Application Data
USERPROFILE=C:\Documents and Settings\UserName

>>283のマイドキュメント/AppName/AppName.iniあたりに作るのが最も無難。

>>283
>でも、実行ファイルのあるフォルダにユーザー命のフォルダを掘ってアクセスする方がいいと思うよ。
小物フリーウェアではお手軽便利なやり方で長年使われてたけど、あまりよいやり方じゃないよ。
これが横行したのがPowerUser常用が強要されてXPのセキュリティがグダグダになった一因だし。
一長一短にしても今更推奨はできない。

286:デフォルトの名無しさん
08/04/10 09:45:08
とりあえず実行ファイルのフォルダに作ってみて作れなかったらマイドキュメントでいいと思うけどな

287:デフォルトの名無しさん
08/04/10 09:48:20
2つのStringListを同期させるにはどうすればいいんでしょう
たとえばStringListをソートした時にStringListBをAと同じように並べ替えたいのです

288:デフォルトの名無しさん
08/04/10 09:57:02
Textを全部コピーしたら。代入じゃなく。

289:デフォルトの名無しさん
08/04/10 09:58:28
中身は違うものなんだよね?
Objects の方にインデックスかポインタを無理やり入れておいたらどう?


290:デフォルトの名無しさん
08/04/10 10:08:22
>>288,289
ありがとうございます

>288
2つのStringListは全く違うものなので使えなさそうです

>>289
Objectsというプロパティに触ったことがないのでよく分かりません
もう少し詳しくお願いできますか?

291:287
08/04/10 10:43:59
>>289の通りにやってみたらできました!
ありがとうございました

292:デフォルトの名無しさん
08/04/10 11:10:17
synapse の imap クライアントを使って、gmail (imap有効済) に imap で接続しようとしていますが
接続に失敗(エラー: 10091)してしまいます
設定など足りないところがありますでしょうか?

uses imapsend;
-------------------
    with TIMAPSend.Create do
    try
        TargetHost := 'imap.gmail.com';
        TargetPort := '993';

        UserName := '***@gmail.com';
        Password := '***';

        Timeout := 5000;
        FullSSL := True;

        if Login then begin
            Caption := 'OK';
            Logout;
        end else begin
            Caption := 'NG';
        end;
    finally
        Free;
    end;
-------------------

293:デフォルトの名無しさん
08/04/10 11:16:21
ComboBoxでドロップダウンした時だけ違う文字列を表示できる?

294:デフォルトの名無しさん
08/04/10 11:19:04
OnDropDownで
combobox.items.commatext := 'a,b,c';
って話か?

295:293
08/04/10 11:35:11
>>294
ドロップダウン閉じた時にどうやって元に戻せばいい?

296:292
08/04/10 14:48:11
自己解決しました
synapse の imap クライアントは、ソースを追ってみると SSLが実装されてないような...

Indy の TIdIMAP4 の IOHandler に TIdSSLIOHandlerSocketOpenSSL を入れて、
UseTLS := utUseImplicitTLS 、下記のコードで接続OKでした

-------------
    with IdIMAP41 do begin
        Host := 'imap.gmail.com';
        Port := 993;
        ConnectTimeout := 3000;

        Username := '***@gmail.com';
        Password := '***';

        if Connect then begin
            Caption := 'OK';

            Disconnect;
        end else begin
            Caption := 'NG';
        end;
    end;
-------------


297:デフォルトの名無しさん
08/04/10 16:48:17
DateTimeToStrについて教えて下さい。

DateTimeToStrは、ロケールを意識して文字列にしてくれますが、
グリニッジ標準の文字を取得するにはどうすればよいのでしょう?

さらに、夏時間とか絡んでくると、わけわからなくなりますが、
夏時間とかいうのもVCLのどこかに規定されているのでしょうか?

298:ななしへたぐらま ◆XcB18Bks.Y
08/04/10 18:40:58
>>282
普通のアプリと同じように「ローカルアプリケーションフォルダ」に入れるのがよいのではないでしょうか。
usesにShlObjを追加して…

{ 現在のユーザーアカウントの「ローカルアプリケーションフォルダ」のパスを返す.}
function GetLocalAppDataPath: string;
var buf: array [0..MAX_PATH] of char;
begin
 SHGetSpecialFolderPath(0, buf, CSIDL_LOCAL_APPDATA, False);
 Result := buf;
end;
{ 現在のユーザーアカウント名を返す.}
function GetCurrentUserName: string;
var
 buf: array [0..MAX_PATH] of char;
 size: dword;
begin
 size := MAX_PATH;
 GetUserName(buf, size);
 Result := buf;
end;
{ 実行例 }
procedure TForm1.ShowAppDataPathActionExecute(Sender: TObject);
var Path: string;
begin
 if LabeledEdit_CompanyName.Text = '' then raise Exception.Create('社名はちゃんと入れろよ!');
 if LabeledEdit_AppName.Text = '' then raise Exception.Create('アプリ名もちゃんと入れろよ!');
 Path := GetLocalAppDataPath + '\' + LabeledEdit_CompanyName.Text + '\' + LabeledEdit_AppName.Text;
 ShowMessageFmt('このパソコンの場合,ユーザー%sの設定ファイルは'#13#13'%s'#13#13'の下に保存すべきじゃ',
  [GetCurrentUserName, Path]);
end;


299:デフォルトの名無しさん
08/04/10 18:49:07
・ショートカットキーで起動
・ショートカットを登録

このような単純な機能を持つデスクトップランチャーを、Delphiノータッチの人間が作ろうとしたらどれ位時間がかかりますか?
作成に掛かる時間…というよりも、ランチャー作成自体の難易度がどのようなものか教えていただけると幸いです

C、Java、アセンブラは初歩を嗜んだ程度です

300:297
08/04/10 18:49:15
ヘルプ検索してみましたが、
Delphiってグリニッジ時間の文字列を作りだすメソッド無いんですね。

301:デフォルトの名無しさん
08/04/10 23:09:45
>>299
Delphiはじめて二番目に作ったのがランチャだった
確か一日一~二時間やって一ヶ月くらいで使えるものにはなったと思う
その後使い込んでいくウチにバグ取りや機能追加で現在に至る
人に配れるレベルになったのは半年目くらいか(配っとらんが)
おれはCもなんも知らない状態で入門書とBBSフォーラムの情報だけだった
いまはグーグル先生もいるし質問先もたくさんあるから
あとはモチベーション次第なんぢゃね?

302:デフォルトの名無しさん
08/04/10 23:12:03
>>293
オーナードロー


303:301
08/04/10 23:15:33
>>299
C#の初心者すれでもマルチポストしたのか
Delphiやってみたいってわけではなかったんだ
●rz

304:282
08/04/10 23:28:47
遅レスすみません。
>298のコードを使わせていただきました。

いくつかアイデアをもらって心に感じるものがありました。
ありがとう。

305:デフォルトの名無しさん
08/04/11 01:13:54
>300
日付時刻の扱いについて。TDateTime型はローカル、DST、UTC等の配慮は含まれていない。
よってこれらの配慮を要する場合はTSystemTime構造体を使用してGetLocalTimeまたは
GetSystemTime(いずれもWin32API)で取得し、これをSystemTimeToDateTimeで
TDateTimeに変換して使用する必要がある。またDSTについてはWindowsの実装がナニなので
(基本的に今現在のDSTの適用状況しか信用できず、たとえば数年前の特定の日付における
DSTの適用状況はわからない)、自前で実装する必要がある。

306:300
08/04/11 09:10:00
thx!>>305

現在の時間だけで良いので、OKです。
つまり、グリニッジ時間を知りたければ、TDateTimeは使えなくて、Win32に頼るってことですね。

307:デフォルトの名無しさん
08/04/12 00:05:32
Delphiを勉強するにあたってお勧めの本を教えてください
C, C++, Javaで開発をしたことがあります

308:デフォルトの名無しさん
08/04/12 00:41:29
>>309
もちつけ

309:デフォルトの名無しさん
08/04/12 00:54:13
ぺったん。ぺったん。

310:デフォルトの名無しさん
08/04/12 01:07:19
つるぺったん。

311:デフォルトの名無しさん
08/04/12 02:11:57
>>301>>303
あ、いや、C#スレでDelphiをオススメされたんでこっち来ました
ありがとうございます。半年ならちょっとやってみたいです
この言語で作ってみたいと思ってます

近場の書店巡ってもCだのJavaだのHTMLだのの教本しか置いて無かったです
Amazonを見てみたら評価の高い教本はあるものの、中古で異常な価格のモノばかりでした
何か初心者オススメの本は無いですか?
Webで資料もみますが、とりあえず1冊は教本を持っておきたいと考えています

312:デフォルトの名無しさん
08/04/12 02:17:08
今から始めるなら迷うまでもなくC#だろ・・・

313:デフォルトの名無しさん
08/04/12 02:37:53
>>311
マニュアルの文法書。

314:デフォルトの名無しさん
08/04/12 08:07:21
>>311
IDEから文法までのを一通り説明してあるやつで
Turbo Delphiか2005用のを買っといたら。
Delphi 2005 プログラミングテクニック Vol.1入門編が無難な感じ。
シリーズ化されてて興味のある分野のものを買いたせるし。

315:デフォルトの名無しさん
08/04/12 11:08:06
Turbo Delphi無料版でアプリを作りたいのですが、
ソースを難読化するツールってありますか?

316:デフォルトの名無しさん
08/04/12 11:32:27
しんぱいしなくても>>315のソースはきっと読みづらい。

317:デフォルトの名無しさん
08/04/12 13:13:12
.NETならともかくWin32でビルドしたら
逆アセンブルしか手がないからそんなに心配することもない。

318:315
08/04/12 14:21:40
>>316
コメントでバレそうです。

>>317
DEDEなるデコンパイルソフトがあるらしいのですが、大丈夫でしょうか?

319:デフォルトの名無しさん
08/04/12 14:29:26
コメント・・

320:デフォルトの名無しさん
08/04/12 14:32:01
>>315
まずはどういう動機でどういうレベルの誰から何を守りたいのかをはっきりさせよう。

321:デフォルトの名無しさん
08/04/12 14:59:30
フォームに乗せなきゃソース見れないだろ

322:315
08/04/12 15:26:27
>>320
例えば姓名判断や競馬の予想のような、
条件を入力すると、ある専門知識に基づいた計算結果が返ってくるソフトを考えています。
バレたくないのは、その結果を算出する際のアルゴリズムやデータです。

すぐに解析されてしまうということは、
せっかく苦労してアルゴリズムやデータを作成しても、
簡単にコピー(改良版)が作られる可能性があるわけですから、躊躇しています。

323:デフォルトの名無しさん
08/04/12 15:45:32
dedeで生成したソースを読めるような奴はそうそういないと思うが、もしいたら諦めるしかない
なんか特殊な方法で圧縮するとかそんな感じにしなきゃ無理な気がする
まぁその前に>>315が作るツールにそこまでしてソースを見るほどの価値があるかどうかの方が重要だが

324:デフォルトの名無しさん
08/04/12 16:00:01
一応antiDeDeとかもあるけどね
FindWindowでDeDeにWM_CLOSE投げるだけだけど

325:315
08/04/12 16:30:52
>>323
>dedeで生成したソースを読めるような奴はそうそういないと思うが、もしいたら諦めるしかない

実はdedeの詳細を分かっていなかったのですが、それなら安心です。
シェアウェア作家や商用アプリを作ってる方も、
特に気にしていないということですかね。

>>324
ありがとうございます。参考になります。

326:デフォルトの名無しさん
08/04/12 17:19:04
URLリンク(www.moonlight.gr.jp)の真ん中のを参考にして
バイナリを読み込んでみたんですけど、かなり時間が掛かってしまいます
どうすれば読み込み時間を短縮できるでしょうか?

327:デフォルトの名無しさん
08/04/12 17:26:40
遅いのは1byteずつ読んでいるから。

ある程度の大きさのバッファを用意して、
ReadではなくBlockReadでバッファ長のバイト数を読み込むようにする。

「BlockRead」をヘルプで引くかで、ゴーグレッドれば、サンプルが出てくる。


328:デフォルトの名無しさん
08/04/12 18:10:46
生成した8個のTShapeのVisibleをFalseにしたりTrueにしたりするところで
とても時間が掛かっている(1秒くらい)のですが、原因がさっぱり分かりません。
このような問題が出た方いますか。

329:デフォルトの名無しさん
08/04/12 18:20:45
再現するコード晒せ

330:デフォルトの名無しさん
08/04/12 18:47:02
TShapeなんて使ったことないけど
他のコントロールの再描画が発生して重いイベントハンドラが呼ばれているのかも。
プロジェクトオプションのコンパイラのデバッグ版DCUにチェックして再構築して
再描画中に固まるタイミングで一時停止してみたら。

331:デフォルトの名無しさん
08/04/12 19:21:44
>>329 普通に新規で最低限のコードだと再現しないんです。
>>330 ありがとうございます。一時停止はタイミングが難しくてなかなか
思うようにいかないし何回もやってるうちにWindowsが固まるし…
再描画の他のコントロールのイベントは見てなかったのでチェックしてみます。

332:デフォルトの名無しさん
08/04/12 20:17:28
DICOMをDelphiで勉強しようと思ってopen sourceであるezDICOMを見ているので
すが、childwin.pasで
const
gMouseDown : boolean = false;
とあり、その以降で
   gMouseDown := true;
となっていて、エラーがでて代入できない左辺値ですと表示されます。
constだからそういうエラーになるのですか?もしそうなら
あまり当てにしてはならないコードと判断すべきなのでしょうか?

333:デフォルトの名無しさん
08/04/12 20:31:26
328ですが、やっぱり分からないです。描画関連のイベントでデバッグ用の
TMemoに出力するようにしたのですが、Visible := True; の前には表示
されません。困ったです。デバッグの良いアイデアか疑うべき点など
ありますでしょうか。

334:デフォルトの名無しさん
08/04/12 20:51:35
>332
constへの代入はコンパイルオプションにより可能なこともある。

335:デフォルトの名無しさん
08/04/12 20:53:18
いやだからソースどっかにあげろよ

336:デフォルトの名無しさん
08/04/12 20:53:51
>333
TShapeやTLabelのようなグラフィックコントロールの描画はコンテナの描画から呼び出される。
というわけでコンテナのPaintを起点に追うと何かわかるかも。

337:デフォルトの名無しさん
08/04/12 21:00:06
Delphiはいい加減標準でプロファイラつけろよな

338:デフォルトの名無しさん
08/04/12 21:13:25
>>333
プロジェクトのバックアップとってデバッグ用のコード仕込みまくって
いじりまくってブレーク張りまくって根性でステップ実行しまくる。

339:デフォルトの名無しさん
08/04/12 21:29:28
332ですが
>334
コンパイルオプションですね。探してみます。
>335
私への返事と解釈して↓のstandaloneのところですが
URLリンク(www.sph.sc.edu)

340: ◆XcB18Bks.Y
08/04/12 22:16:42
>>332
「型付き定数への代入」というやつです。
初期のDelphiコンパイラではデフォルトで有効になっていたのですが
途中からデフォルトで無効になりました。

プロジェクト設定の「コンパイラ」設定で有効にするのが手っ取り早い対処法ですが
型付き定数限定とはいえ定数の値を任意に変えられてしまうのはバグの元ですから避けるべきです。
(デフォルトが禁止になったのもバグ回避と思われます)
そのソースファイルの先頭に「型付き定数への代入」を有効にするコンパイラ指令 {$J+} を埋め込むのが良いでしょう。


341:デフォルトの名無しさん
08/04/12 23:11:55
>>327
ものすごく遅くなってしまいましたがやってみます
ありがとうございました

342:デフォルトの名無しさん
08/04/13 00:05:13
>>315
誰もおまい見たいなレベルの実行ファイルを解析したりしないよw

343:デフォルトの名無しさん
08/04/13 07:26:17
> 340
ありがとうございました。おかげさまで無事、コンパイルでき動くようになりました。
これで解析がはかどります。本当にありがとうございました。

344:デフォルトの名無しさん
08/04/13 11:21:33
>>342
「ある専門知識に基づいた計算結果」を求めてダウンロードするってことは、
少なくともその内容に関心があるってことでしょ
コーディングの巧拙は関係なし

まあ専門知識を持たないおまいには分からないだろうけどw

345:デフォルトの名無しさん
08/04/13 11:46:30
>>315
CGIにしたらどう? サーバ側で計算すればいい。

346:デフォルトの名無しさん
08/04/13 13:15:45
>345
サーバーをハッキングされる可能性があるのでは?

347:デフォルトの名無しさん
08/04/13 13:23:00
まだ引っ張るの?

348:デフォルトの名無しさん
08/04/13 15:14:53
SJIS最速の正規表現ライブラリってどれ?

349:デフォルトの名無しさん
08/04/13 15:23:29
鬼車をobjのLinkで使う。。。とかかな?
WinAPI使ってないから改造しないと曖昧検索(同形異区の文字や
全角大小文字の一致とか、)の挙動がWSHとかと違うと思ったけど

350:デフォルトの名無しさん
08/04/14 01:41:08
>>346
泥棒にPC盗まれる可能性も考えれば、
アルゴリズムは暗記して、そのつど出向いて計算してあげたらよさそう。

351:デフォルトの名無しさん
08/04/14 11:10:07
定数を
const
HAIRETU: Array[0..10] of String = ('a','b','c','d','e','f','g','h','i','j','k');
HAIRETU: Array[100..110] of String = ('z','y','x','w','v','u','t','s','r','q','p');
のように離れて宣言することは出来るのでしょうか?

352:デフォルトの名無しさん
08/04/14 11:50:35
別unitに分けるなら出来るよ。
アクセスするときは ユニット名.HAIRETU[4] のようにアクセスする。

353:デフォルトの名無しさん
08/04/14 12:22:47
無理

354:351
08/04/14 18:52:37
遅くなりましたがありがとうございました
変数でやる時には配列に一気に追加する方法はあるのでしょうか?

355:デフォルトの名無しさん
08/04/14 20:11:58
Delphiに疎な配列がないのできれいに書くのは難しい。

const
    HAIRETU: array[0..110] of PChar =
        ('a','b','c','d','e','f','g','h','i','j','k',
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil,
        'z','y','x','w','v','u','t','s','r','q','p');

if HAIRETU[4] <> nil then ShowMessage(HAIRETU[4]);


const HAIRETU: array [0..2] of record n: Integer; v: String; end = (
        (n:0; v:'a'), (n:1; v:'b'), (n:100; v:'z') );
for i := 0 to 2 do if HAIRETU[i].n = 1 then ShowMessage(HAIRETU[i].v);


HAIRETU := TStringList.Create;
HAIRETU.Values['0'] = 'a';
HAIRETU.Values['1'] = 'b';
HAIRETU.Values['100'] = 'z';
ShowMessage(Hairetu.Values['0'])


356:デフォルトの名無しさん
08/04/15 09:27:19
関数を作ってみた

procedure StrToArray(var Hairetu: array of string; Start: Integer; Args: array of string);
    var I: Integer;
begin
    I := Length(Args) -1;

    while (I >= 0) do begin
        Hairetu[I + Start] := Args[I];
        Dec(I);
    end;
end;

// ----------------- //

StrToArray(HAIRETU,    0, ['a','b','c','d','e','f','g','h','i','j','k']);
StrToArray(HAIRETU, 100, ['z','y','x','w','v','u','t','s','r','q','p']);


357:デフォルトの名無しさん
08/04/15 14:18:16
IMEのON、Offの仕方。
IMEの現在の状態を監視するには、なんと入力すればいいか教えてください。

ネット検索したんですが、使い方がよくわかりませんでした。

358:デフォルトの名無しさん
08/04/15 14:28:00
ImmなんちゃらってAPIだったっけかな

359:デフォルトの名無しさん
08/04/15 14:46:32
>>358
ありがとうございます。
それの具体的な使い方がわからなくて・・・。

360:デフォルトの名無しさん
08/04/15 14:53:10
私なんて、現在IMEがONかどうかを調べることすら出来なかったよ!。

361:デフォルトの名無しさん
08/04/15 15:31:20
Delphiに直接関係はないな。

URLリンク(m--takahashi.com)

362:デフォルトの名無しさん
08/04/15 18:37:32
Delphi5で商用利用できるフリーのXMLのクラスライブラリってないかな?

363:デフォルトの名無しさん
08/04/15 19:10:32
Delphi Personal version6 を使ってるんですが
自分で作ったソフトを公開する時に気をつけることってありますか
コンパイラオプションを変えたりとか、そういう事するもんなんでしょうか?

364:デフォルトの名無しさん
08/04/15 22:10:16
Xp スタイルに対応したか? Vista 対策はOK? くらいかな。

365:デフォルトの名無しさん
08/04/15 23:23:39
>357
ImeModeプロパティじゃだめなん?

366:デフォルトの名無しさん
08/04/15 23:45:49
皆さんエディタとか何使ってますか。
beginとendを強調表示とかしてくれるエディタとかありませんかね。

367:デフォルトの名無しさん
08/04/15 23:48:47
サクラエディタとか。

368:デフォルトの名無しさん
08/04/15 23:49:24
EmEditor は、Delphi の予約語を強調表示できるよ。

369:デフォルトの名無しさん
08/04/15 23:50:09
IDEか秀丸だな。

370:デフォルトの名無しさん
08/04/16 00:04:37
すみません、質問です。
TWebBrowser で表示しているWebページの高さを
OleObject.document.body.scrollheight から取得しているのですが、
どうも正確な値がとれていない時があるようです。

うまくいく場合のあるのですが、
Google 検索結果ページでの、scrollheight の値が
明らかにこっちが想定している値と違うのです。

何か心当たりがある方いらっしゃいましたら、
教えていただけたら助かります!
#スクロールバー分は考慮してます。

371:デフォルトの名無しさん
08/04/16 09:07:56
>>370
ブラウザ内部のサイズより、HTML描画された内容が小さい場合とか?

372:デフォルトの名無しさん
08/04/16 09:21:58
メインメニュー・コンポーネントについて質問です。

大見出し
├小見出し1
├小見出し2
├小見出し3
・・・

という構成のメニューがあったとして、
小見出しを「配列」で一括管理することはできるのでしょうか?

各小見出しのオブジェクトインスペクタのname項目では、N1、N2、N3...
などとなっているので、配列名にすることができません。
(このままだと、「全てのチェックボックスを外す」などの記述が大変です)

よろしくお願いします。

373:デフォルトの名無しさん
08/04/16 09:24:08
TStringList.SaveToFileで文字コードをUTF-8で保存したいのですが
どうすればいいでしょうか?htmlファイルを生成しています。

WinXP+Delphi7Pro

374:デフォルトの名無しさん
08/04/16 10:13:17
delphiで通販サイトみたいなの作ってみようと思うんだけど
何か最低限これはみとけみたいなサイトあります?

375:デフォルトの名無しさん
08/04/16 10:18:16
>>372
大見出し(MenuItem1)から小見出し操作するなら
for i := 0 to MenuItem1.count - 1 do
begin
MenuItem1.Items[i].checked := false;
end;

メインメニュー(MainMenu1)から大見出し(例としてメインメニューの一番目)を指定して
小見出しを操作したいなら
for i := 0 to MainMenu1.Items[0].count - 1 do
begin
MainMenu1.Items[0].Items[i].checked := false;
end;

でいけると思う。

376:デフォルトの名無しさん
08/04/16 10:18:24
Delphiでウェブアプリなんだー。
ちょ、マイナーだね。

ウェブで無償配布ツールものとかドライバ設定系デスクトップアプリでは、某アイコンを良く見るけどね。

377:デフォルトの名無しさん
08/04/16 10:25:02
>>373
UTF8Encode

378:372
08/04/16 10:34:44
>>375
ありがとうございます!とても助かりました。

379:デフォルトの名無しさん
08/04/16 10:40:52
>>373って
for i := 0 to Memo1.Lines.Count-1 do Writeln(f, WideString(Memo1.Lines[i]));
ってやるだけじゃだめなん?WideStringとUTF8って別もの?
そこらへんいまだに全く把握してないんだけど
どこかにアホグラマ向けの解説サイトとかないのかな。

380:デフォルトの名無しさん
08/04/16 10:52:30
別物。

381:デフォルトの名無しさん
08/04/16 11:21:33
>>376
htmlやcss、DB何かも飽きるほど使った事あるからいけるかなぁとか
思ったりしてるんだけどセキュリティ関連がよくわかんないのよねぇ

SQLインジェクションやクロスサイト云々とかそういうのはわかるけど
何か他にもいろいろありそうで怖い

Webアプリって今はjavaなんかがメジャーなのかな?

382:デフォルトの名無しさん
08/04/16 15:43:07
Dephi⑦のIDEモードってどうやるんだっけ。
他のウィンドウが見えるSDIになっててやりづれぇ

383:デフォルトの名無しさん
08/04/16 15:58:47
>>364
ありがとうございます。
Vista対策は全くしてませんので、その事を記載することにします

384:デフォルトの名無しさん
08/04/16 16:12:23
Vistaなんて使う方が悪いぐらいに書いとけ

385:デフォルトの名無しさん
08/04/16 16:13:13
>>381
phpとかスクリプトが多いんじゃね

386:デフォルトの名無しさん
08/04/17 13:37:09
質問です。
フォーカスが当たっているかコントロールは
どうやって調べればいいんでしょうか?

387:デフォルトの名無しさん
08/04/17 15:47:11
つ TCustomForm.ActiveControl

388:デフォルトの名無しさん
08/04/17 19:09:49
>>381
HTML、DB飽きるほどやってるなら、セキュリティ云々の前に、
未だに、Unicodeにまともに対応してない、Delphiを使うなんて論外だと思うが・・



389:デフォルトの名無しさん
08/04/17 19:58:55
Delphi.NETなら使えるんだろ。
.NETの便利クラスパクって来るのも疲れたし
マシン買い換えたらDelphi.Net触り始めてみたくはある。
ぼろマシンのネイティブアプリよりよっぽど速そうだw
C#のフォーム周りはどうも微妙すぎるし。

390:デフォルトの名無しさん
08/04/17 20:06:05
微妙って、.NET Framework使ってたら言語が違っても同じでないの?

391:デフォルトの名無しさん
08/04/17 20:22:49
クラスライブラリが違う。

392:デフォルトの名無しさん
08/04/17 21:04:42
ぼろマシンで走る.NETは遅いと思う

393:デフォルトの名無しさん
08/04/17 22:53:08
Delphi.NETは最悪の選択

394:デフォルトの名無しさん
08/04/17 23:34:25
>>387
ありがとうございます。できました

395:370
08/04/18 00:33:33
>>371
レスありがとうございます。

うまくいくページとうまくいかないページがある原因がよくわかりません。。
(yahoo とかだったら、うまくいくんですが)
しかも scrollwidth はうまくとれてたりするので、
さらに意味がわからないことになってます。。


396:デフォルトの名無しさん
08/04/18 01:40:53
>>374
「webアプリセキュリティ対策入門」って書籍。
サウンドハウスみたいに単純な穴つかれて個人情報漏らさないように気をつけてね。

Delphiって文字が悪い記事で新聞に載らないようにしてくださいw

397:デフォルトの名無しさん
08/04/18 01:42:34
>>389
ただでさえDelphiは未来がないのに、その中でロードマップで切り捨てられることが決定している
Delphi.NETは選択肢としてありえないよ。

俺ならchrome joyrideをつかう。それならC#でいいけどな

398:デフォルトの名無しさん
08/04/18 08:06:40
.NET起動遅すぎ

399:デフォルトの名無しさん
08/04/18 09:33:28
動作条件に.netが入ってる時点でDLする気失せる

400:デフォルトの名無しさん
08/04/18 10:06:10
最近のDelphiと一緒だな。J#まで必要だし。

401:デフォルトの名無しさん
08/04/18 11:06:10
未だに.NETの起動がどうのなんて言ってるボロマシン使ってる可哀そうな方々は
一生DEL7SJISWIN32で頑張ってなよ。
今時C2Dマシンなんて2,3万で組めるのにw

402:デフォルトの名無しさん
08/04/18 11:19:19
このやり取りも無断リンク論並に飽きたので
もう勘弁してほしい

403:デフォルトの名無しさん
08/04/18 11:48:20
デバッグの値の文字列を全部取得する方法っってありませんか。
文字列が長いと、「...」ってのが最後に入ってそこで終わってしまいます。

404:デフォルトの名無しさん
08/04/18 13:56:07
PageControl単位でマウスカーソルの出入りを監視するのってどうやればいいですか。
MouseOverだとその上に乗ってる全コントロールのMouseOverでチェックしないとうまくいかないし
それをやったところで結局正確には取れないです。



405:デフォルトの名無しさん
08/04/18 15:04:21
>>403
procedure dbgPrint(s:string);
begin
  with TFileStream.Create('dbg.txt',fmCreate) do try
  Write(PChar(s)^, length(s));
  finally free end;
end;

みたいな関数を作っておいて、
実行されない場所で呼び出しておく(そうでないと実行ファイルにリンクされない)

デバッグ時に Ctrl+F7 で 評価/変更 窓を開いて
dbgPrint( 変数名 ) と打って 評価(V) で dbg.txt というファイルに中身か書き出せる

406:デフォルトの名無しさん
08/04/18 15:06:44
>>404
CM_MOUSEENTER/CM_MOUSELEAVE を使うのでは駄目?

407: ◆XcB18Bks.Y
08/04/18 16:18:16
>>406
最近のバージョンではOnMouseEnter, OnMouseLeave イベントとして実装されていますね。

>>379
おおざっぱに言いますとこんな感じです。

・WideString…全部の文字が2バイト
・UTF-8…英数コードが1バイト(しかもこれらのほぼすべての文字コードがANSI文字列同じ)、
      漢字やかななどが3バイト


408:デフォルトの名無しさん
08/04/18 22:54:38
ユニコードが使えるエディタを作りたいのですが、良い方法はありませんか?
こちらの環境は Delphi 5 Pro です。

409:デフォルトの名無しさん
08/04/18 23:00:38
SynEdit unicode editionを使う

410:デフォルトの名無しさん
08/04/18 23:02:28
>>409
多謝!

411:デフォルトの名無しさん
08/04/18 23:40:25
stringの長さだけを初期化する方法でSetLength(s, len)ってやるのと
SetString(s, nil, len)ってやる方法の二つがあるみたいですが、
この二つの差って何かありますか?

412:デフォルトの名無しさん
08/04/20 19:09:13 BE:626494-PLT(12660)
総合アーカイバコンポで書庫内ファイルの削除したいんだけど、
RemoveItemsメソッドの使い方教えてください
↓こんな感じで動かすと書庫本体が削除されちゃうのですが…

 DelList := TStringList.Create();
 Arc := TArchiveFile.Create(Application);

 DelList に書庫内ファイル名を突っ込む←この書庫内ファイルを削除したい

 try
  Arc.FileName := "書庫本体までのフルパス";
  Arc.Options.jso := 1; // 共有エラーの場合に処理を続行
  Arc.Options.n  := 1; // 経過非表示にする
  Arc.RemoveItems(Application.Handle, nil,'', [DelList]);
 finally
  Arc.Free;
  DelList.Free();
 end;

413:デフォルトの名無しさん
08/04/21 00:35:09
>>411
SetStringで長さを設定する人を見たことが無い。
違いが気になるなら、ソース見て。

>>412
ここ見ると、追加・削除をサポートしていない形式があるみたいだけど、大丈夫?
URLリンク(www.geocities.jp)

あと、TArchiveFile.Createで例外が生成されると、DelList.Freeは実行されない。

414:デフォルトの名無しさん
08/04/21 01:15:14
>>411
SetLengthはメモリを再確保した後に内容のコピーをするような分岐がありますが、
SetStringでnilを指定した場合1つの分岐だけで即座に新しい領域が割り当てられます。
なのでSetStringの方が若干速いです。

>>413
SetLengthとSetStringはともに組み込みの手続きであり、ソース上にそのものの実装は存在しません。
場合によって別々の内部手続きが呼び出されます。この場合はLStrSetLengthとLStrFromPCharLenです。
これを初心者がソースを見て判断するのは酷でしょう。
それにSetStringで長さを設定するのはVCL内に多く見られます。
実際どうなってるか知りもしないのにそのような発言をするのはよくないんじゃないかと。

415:デフォルトの名無しさん
08/04/21 01:15:25 BE:209243-PLT(12660)
>>413
レスありがと
形式はzipだからおkだと思うんだ…
何か書き方が悪いのか何なのか
それとcreateもtryの内側に入れることにしようと思います><

416:デフォルトの名無しさん
08/04/21 01:52:53
Createをtryの内側に入れると、今度はCreateの例外で
ArcもDelListも代入前に使われちゃう。


417:デフォルトの名無しさん
08/04/21 12:31:04
>>415-516
nilで初期化しておけばおk

418:デフォルトの名無しさん
08/04/21 13:25:31
みんなー、>>516まで入りたい放題だぞー

419:デフォルトの名無しさん
08/04/21 16:51:44
Delphi.NET(2005)で質問です。

TStringGridの内容を帳票として成型して
プレビュー画面を表示した後、印刷したいのですが
一体どうすれば良いのでしょうか。


420:デフォルトの名無しさん
08/04/21 22:35:32
Excelでフォーマットを好きなように作り、プログラムからグリッドの内容をセルに流し込み、印刷で。

421:デフォルトの名無しさん
08/04/22 00:50:35
ユーザにそこまでやらせるのはひどいアプリだなぁ

422:デフォルトの名無しさん
08/04/22 00:52:49
2005で、かつ Delphi.NET 使ってる時点で論外

423:デフォルトの名無しさん
08/04/22 00:53:51
>>422
.NetとFirebirdでWebアプリ作ってる俺に謝れ!

424:デフォルトの名無しさん
08/04/22 13:12:50
ClientDataSetに放り込んでQuickReportとかは?

425:デフォルトの名無しさん
08/04/22 21:30:31 BE:975078-PLT(12660)
>>412分かる人いないかな?

426:デフォルトの名無しさん
08/04/22 23:17:35
>>425
私なら直接DLLの関数を呼び出す。

427:デフォルトの名無しさん
08/04/23 12:43:14
turbo DelphiでMSSQLのデータを表示したいのですが
知り合いにできない、と言われました。
プログラムそのものが初めてでこれからやろうとしていたので本当なのかどうかがわかりません。
本当にできないのですか?

428:デフォルトの名無しさん
08/04/23 13:06:11
>>427
普通にできる

429:デフォルトの名無しさん
08/04/23 14:20:06
>>428
ありがとうございます。これから頑張って覚えてやってみます。
友人には間違いを伝えておきます。

430:デフォルトの名無しさん
08/04/23 15:17:50
>>425
確かにzipでやってみたらファイルが消えた。
lhaならできたけどzipじゃないとだめなの?

431:デフォルトの名無しさん
08/04/23 15:25:14
>>426
日本語でおk

432:デフォルトの名無しさん
08/04/23 19:38:35 BE:557748-PLT(12660)
>>426
DLL直だとコンポーネント使ってる意味が無いというか…
最悪それに挑戦することになりそうです。

>>430
zipで出来ないとうまくないですねー
何とかならないものかしら

433:デフォルトの名無しさん
08/04/23 20:16:08
以前かなり前、TShapeの表示/非表示の切り替えが異常に遅いって
書いたモノですが、ようやく原因が分かりました。\(^o^)/
TShapeを表示させているフォームのAutoScrollをFalseにしたら、
劇的に速くなりました。良かった。これでGWは何日か休めそう

434:デフォルトの名無しさん
08/04/24 03:03:11
>>432
ZIP32.pasのMainEntry2の中でコマンド実行する前に
DeleteFile( ArchiveFileName )でファイル消されてる。
それコメントアウトするとちゃんと処理できたけど、追加のとき
エラー回避のために必要みたいなコメントあるから、ファイルを
消すときだけ処理を飛ばすようにした方が安全かも。

435:デフォルトの名無しさん
08/04/24 06:59:21
TMenuBarやTToolBarを使ってメニューを移動できるようにすると
メニューにマウスを乗っけるとボタンみたいになってしまうのですが
これを防ぐにはどうすればいいのでしょうか?

436:デフォルトの名無しさん
08/04/24 10:56:39
DelphianWorldって亡くなりました?

437:デフォルトの名無しさん
08/04/24 17:08:52
文字列型変数のアドレスを取る手続きFooがあるのですが、
その手続き内で文字列のサイズと内容をセットしたいのですが、どうすれば
いいでしょうか?
呼び出し元は
var AResult: string;
begin
 Foo(@AResult);
end;
です。
procedure Foo(P: Pointer);
begin
 // ここで文字列のサイズと内容を設定したい。
end;


438:デフォルトの名無しさん
08/04/24 20:25:22
短い文字列型を使う。

439:デフォルトの名無しさん
08/04/24 20:31:25
DelphiMLって今生きてるの?
4月8日からメールが流れて来ないんだが

440:デフォルトの名無しさん
08/04/24 20:48:01
437です。
>>438
呼び出し元の方は変更できませんので、呼び出し先の方でなんとかしたいです。

で、とりあえず、色々やってみたのですが、
procedure Foo(P: Pointer);
begin
 Pointer(P^) := Pointer(StrNew('あいうえお'));
end;
でやると一応動いているようには見えますが、StrNewの方で参照カウントが設定
されていないので、ちょっと不安です。
呼び出し元がWideStringで
procedure Foo(P: Pointer);
begin
 Pointer(P^) := Pointer(WStrNew('あいうえお'));
end;
でやるとHeapがどうたらというエラーでコケマス。




441:デフォルトの名無しさん
08/04/24 20:53:33
ぶっちゃけ

procedure Foo(var s: string);
begin
 s := 'あいうえお';
end;

これでいいじゃんと思うのは俺だけ?

442:デフォルトの名無しさん
08/04/24 21:11:37 BE:1409999-PLT(12660)
>>434
なるほど、ちょっとそのへんいじってみます。
貴重な情報ありがとうございます。

443:デフォルトの名無しさん
08/04/24 21:12:07
procedure Foo(ps: PWideString);
begin
 ps^ := 'あいうえお';
end;

呼出元がポインタで渡してるみたいだし俺ならこうするかな

444:デフォルトの名無しさん
08/04/24 22:32:32
>>439
生きてるけど、人がいなくなって瀕死状態なのかと

445:デフォルトの名無しさん
08/04/24 22:40:29
同じモジュールなら、PString(P)^ := ?? でいけそうですが。
string=WideStringなら、 >443と同じですけど。

446:デフォルトの名無しさん
08/04/24 23:09:55
>>445
日本語でおk
つかおまいのこれ(>>440)はどこでStrDisposeするんだ?
どっかにリストでももってそこで管理する気か?

447:デフォルトの名無しさん
08/04/24 23:45:37
>>434
オイラからもありがとう
とりあえずこうしといた
if Pos('-d',_lpszCmdLine)=0 then
DeleteFile( ArchiveFileName );

448:デフォルトの名無しさん
08/04/24 23:47:09
とりあえず、445<>440だ。

449:デフォルトの名無しさん
08/04/25 00:05:17
Delphian Worldは消滅したみたい。Delphi-MLは開店休業。みんなFTにいるんじゃない?

450:デフォルトの名無しさん
08/04/25 01:11:53
>Delphi-MLは開店休業。みんなFTにいるんじゃない?

へっ? Delphi-ML ってメンバーが10人あまりなんか?
それは・・・瀕死状態なんでは?


451:デフォルトの名無しさん
08/04/25 04:31:23
FT?

452:デフォルトの名無しさん
08/04/25 07:49:08
>>440です。みなさん、ありがとうございました。
>>443,>>445さんの方法でうまくいきました。
procedure Foo(P: Pointer);
begin
 PWideString(P)^ := 'あいうえお';
end;
PStringまたは,PWideStringにキャストすれば良かったのですね。
>>441
実際のFooは仮想クラスのメソッドで派生クラスでオーバーライドしているため、
インターフェースを変える事ができません。
>>446
文字列のための動的なメモリの割り当ては、呼び出し先(この場合Foo)で行っていますが、
呼び出し元のAResultの変数が破棄される時(この場合、スコープから外れた時)に、割り当てられたメモリは自動的に
解放されると思います(たぶん)。


453:デフォルトの名無しさん
08/04/25 08:47:53
質問します。よろしくお願いします。
var pArray: PInteger;
として
GetMem(pArray,100);
pArray[0]:=12;
とかすると、配列型が必要ですとエラーが出ます。
Integerのポインタを配列としてアクセスするにはどうすれば良いでしょうか。


454:デフォルトの名無しさん
08/04/25 09:20:46
PIntegerArrayにキャスト。
PIntegerArray(pArray)[0]:=12;



455:デフォルトの名無しさん
08/04/25 09:31:14
フォルダのパスから、そのフォルダの中にあるファイルのパスを所得するにはとうしたらいいのでしょうか?

456:453
08/04/25 09:37:41
>>454
うまくいきました。ありがとうございます。

457:デフォルトの名無しさん
08/04/25 09:39:00
.NET だと使えないけど absolute という便利な構文がある。

type AInteger = array [0..$ffff] of integer;
var
pInteger: ^Integer;
pArray: ^AInteger absolute pInteger;

とやれば いちいちキャストしなくても pIntegerの別名が pArrayになるんで

 pArray^[0] := 12;

と書けるよ

458:デフォルトの名無しさん
08/04/25 09:45:18
>>455 意味が判らないけど
FindFirst,FindNext,FindClose
か windows API の FindFirstFile FindNextFile FindClose
の事かな?



459:455
08/04/25 09:57:04
>>458
レスありがとうございます。
フォルダをフォームにD&Dしたとき
そのフォルダの中のファイルのパスがほしいという事です。

460:デフォルトの名無しさん
08/04/25 10:02:26
D&D の方が判らないの?
FindFirst,FindNext,FindClose の使い方が判らないの?

461:デフォルトの名無しさん
08/04/25 10:06:22
他に COM を使う方法があるよ。 やり方は
CreateOleObject('Scripting.FileSystemObject') で検索すればいいと思う

462:455
08/04/25 10:11:50
>>460
FindFirstでいけそうです。ありがとうございました。

463:デフォルトの名無しさん
08/04/25 13:27:08
>>453の件で便乗質問です。
私はいつも以下のようにしていますが、何かプログラム上の問題はありますか?
var
P: PIntegerArray;
i: Integer;
begin
GetMem(P,SizeOf(Integer)*10); // Integer10個分の領域確保
try
for i := 0 to 9 do
begin
P[i] := i*10000; // 順番に0,10000,20000,....90000を代入
ShowMessage(Format('P[%d] = %d',[i,P[i]]));
end;
finally
FreeMem(P); // 領域解放
end;

464:デフォルトの名無しさん
08/04/25 13:59:49
>>452
P は AnsiString型変数へのポインタをPWideString型へキャストすると、おかしくなると思うよ。
AResultは常にWideString型なの?

>>463
問題ない。

465:デフォルトの名無しさん
08/04/25 14:05:51
問題ないけど、この使い方なら 動的配列使えばいいのにって思うな。

466:デフォルトの名無しさん
08/04/25 14:06:29
いまどきなら動的配列じゃね?


467:463
08/04/25 14:17:19
>>464-466
ありがとうございます。確かに動的配列でいけました。
var
A: array of Integer;
i: Integer;
begin
SetLength(A,10);
for i := 0 to 9 do
begin
A[i] := i*10000;
ShowMessage(Format('A[%d] = %d',[i,A[i]]));
end;

468:デフォルトの名無しさん
08/04/25 20:33:15
フォルダのリネームって一行ぐらいじゃできないの?

469:デフォルトの名無しさん
08/04/25 20:58:09
RenameFile で出来ると思うけど?
ただ、誰かが使ってたら駄目だよ。

もしかして、自分自身が使ってるんじゃないの?
カレントフォルダを変更してみたら?

470:デフォルトの名無しさん
08/04/25 21:03:42
とりあえず試してみたら? 
if not RenameFile( oldName ,NewName ) then ShowMessage( SysErrorMessage( GetLastError())) ;


471:デフォルトの名無しさん
08/04/25 21:40:56
動的配列…
むかーし、なにもかもをTStringGridで処理してた時期を思い出した(涙

472:デフォルトの名無しさん
08/04/25 22:04:03
それはひどすぎ。動的配列がなかったときは、配列のポインタを使ったもんだ。>>463 のように。

473:468
08/04/25 23:51:18
>>469-470
ありがとう
チョット酒飲みいってたw

474:デフォルトの名無しさん
08/04/26 03:04:25
CloseQueryでFalseしてMinimizeする常駐アプリが立ち上がってると
シャットダウンできないんだけどどうやってシャットダウンなりログアウトに対応すればいいの?

475:デフォルトの名無しさん
08/04/26 03:47:34
WM_QUERYENDSESSIONで何とかしてみるとか

476:デフォルトの名無しさん
08/04/26 07:57:20
演算結果の型についての質問です。
var
 A: Integer;
begin
 A := MaxInt;
 if A + 1 > MaxInt then
  // ほにゃらら
を実行すると、if文の条件式が偽となります。
Delphiのマニュアルを見るとオペランドがInt64でない場合は、演算結果はInteger型に
なるとのことで、if文の条件式が偽になることは納得しました。
で、if文の条件式を A + Longword(1) とすると、今度は条件式が真になります。
A + Longword(1)の型は一体何になってるのでしょうか?



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch