2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

くだすれDelphi(超初心者用)その55

1 :デフォルトの名無しさん:2012/11/17(土) 11:36:07.56 .net
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、もしくは
質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。

Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。


■Delphi XE3 Professional/Enterprise/Ultimate/Architect エディション
64bit Windows、Mac OS Xのアプリも開発可能。ライブラリのソースコード付き。アカデミックライセンス有り。
旧バージョン(XE2/XE/2010/2009/2007/Delphi 7)のライセンス取得とダウンロードが可能。(アカデミック不可)
http://www.embarcadero.com/jp/products/delphi

■Delphi XE3 Starter エディション
個人/5人以下の企業・組織向け。アップグレード価格(※)14700円。年間売上1000US$以内の商用開発可。
(※)Delphi、Visual Studio等の有償/無償の開発ツールユーザーが対象。インストール確認は特に行わない。
http://www.embarcadero.com/jp/products/delphi/starter

■Embarcadero RAD Studio XE3 (Delphi、C++Builder、HTML5 Builder等を含むビジュアル開発スイート)
http://www.embarcadero.com/jp/products/rad-studio


<前スレ>
くだすれDelphi(超初心者用)その54
http://toro.2ch.net/test/read.cgi/tech/1325028195/

<過去スレ>
DelWiki (Delphi 関連の過去スレッド)
http://delwiki.info/?%E3%83%AA%E3%83%B3%E3%82%AF%2F%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%2FDelphi%20%E9%96%A2%E9%80%A3%E3%81%AE%E9%81%8E%E5%8E%BB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89

2 :デフォルトの名無しさん:2012/11/17(土) 11:41:19.77 .net
<関連スレ>
Embarcadero RAD Studio/Delphi/C++Builder その3
http://toro.2ch.net/test/read.cgi/tech/1346899529/

delphiで作った有名ソフトって何があるの?
http://toro.2ch.net/test/read.cgi/tech/1135654787/
【Delphi互換!?】FreePascal/Lazarus その2【GPL】
http://toro.2ch.net/test/read.cgi/tech/1261676778/

ネットワークゲーム作成のお勉強(Delphi専用スレ)
http://toro.2ch.net/test/read.cgi/gamedev/1028278884/
Delphiでアクションゲームが作りたい!! Part2
http://toro.2ch.net/test/read.cgi/gamedev/1027482533/
delphiでMMO
http://toro.2ch.net/test/read.cgi/gamedev/1072515100/


<兄弟スレ>
くだすれC++Builder(超初心者用)その5
http://toro.2ch.net/test/read.cgi/tech/1334982374/

3 :デフォルトの名無しさん:2012/11/17(土) 11:42:10.72 .net
では質問をどうぞ。

4 :デフォルトの名無しさん:2012/11/17(土) 18:57:06.32 .net
前スレ>>989から継続です。お願いします。

WinXP + delphi7(VCL)で開発します。

コンボボックスのコンポーネントで、なめらかな動きをしない
(スムーススクロールしない)ようなものはありませんか?
あるいは、作る方法はありませんか?

stackoverflow.com/questions/2968189/disable-mouse-scroll-wheel-in-combobox-vb-net
参考にして、WM_MOUSEWHEELを握りつぶすことはできました。
(ホイールが利かなくなりました。)

ただ、ホイールを無効化するのでなく、
ドロップダウンリストにスクロールバーが出ている状態においては、
リストを1行ずつスクロールさせたく思っております。

その際、スムーススクロールさせると、リストのスクロールが
目で追えなくなってしまうような描画をするので、それを対策したいと思っております。

コンボボックスに、StringGridにおけるTopRowプロパティのようなものがあれば、
対策できそうではあるんですけど、方法ありませんでしょうか?

5 :デフォルトの名無しさん:2012/11/17(土) 20:30:05.15 .net
完全に握りつぶさないでItemIndexを加減すればいいんじゃね?

6 :デフォルトの名無しさん:2012/11/18(日) 11:56:00.24 .net
TMainFormにアクセスするにはどうすればいいのでしょうか?

7 :デフォルトの名無しさん:2012/11/18(日) 12:23:10.99 .net
Application.MainForm

8 :デフォルトの名無しさん:2012/11/18(日) 12:27:38.47 .net
>>7
ありがとうございますm(__)m

9 :デフォルトの名無しさん:2012/11/18(日) 17:25:36.12 .net
>>4
自分もコンボボックスに機能追加しようといろいろ研究してたので…。
前スレ975
>Windowsのパフォーマンスオプションで、「リストボックスを滑らかにスクロールする」の
>チェックを外せば、望み通りの動きなのですが。(マウスホイールによる動きが全然違います。)

それならいっそ SystemParametersInfoのSPI_SETLISTBOXSMOOTHSCROLLINGで外せば良いかと。
1つのコンボボックスのためにシステム全体を設定変更と、かなり強引ですが…。それがこちら。
http://pastebin.com/PmWkCB51
OnDropDown時にSPI_GETLISTBOXSMOOTHSCROLLINGで状態取得、その後外し、OnCloseUpで元に戻す。

>コンボボックスに、StringGridにおけるTopRowプロパティのようなものがあれば
あります。csSimpleにして ComboBox1.Perform(CB_SETTOPINDEX,50,0); すれば瞬間移動します。
ですが… csDropDownだと、どう使ったら良いやら? 難しそうです。
それに加えWM_MOUSEWHEELを真っ当に使わないでゴニョゴニョするのは、かなり大変かと。

10 :デフォルトの名無しさん:2012/11/19(月) 14:54:54.33 .net
THotKeyで設定したホットキーが押されたときの動作を設定するにはどうすればいいのでしょうか?

11 :デフォルトの名無しさん:2012/11/19(月) 19:55:04.28 .net
>>10
THotKeyのOnChangeイベント等で、HotKeyプロパティを以下のいずれかに設定します。

・ TActionList→TActionのShortCutプロパティ(実行内容はOnExecuteに記述)
・ TMainMenu→TMenuItemのShortCutプロパティ(実行内容はOnClickに記述)

ヘルプの「例」も見た方がいいけど分かりにくいかも。

12 :デフォルトの名無しさん:2012/11/19(月) 20:26:36.56 .net
>>11
ありがとうございます!

13 :4:2012/11/20(火) 01:30:53.63 .net
>>9
コメントありがとうございます。

> それならいっそ SystemParametersInfoのSPI_SETLISTBOXSMOOTHSCROLLINGで外せば良いかと。
> 1つのコンボボックスのためにシステム全体を設定変更と、かなり強引ですが…。

1つの方法ではありますね。
ただ気がかりなのが、
1.ソフトが異常終了したときに、Windowsの設定が変わってしまう。
2.同様の設定をしているコンボボックスを画面内に複数載せる場合があることを考えると、
  コンボAのOnDropDownとコンボBのOnCloseUpが同時に発生したときの処理順が気がかり。
です。

14 :4:2012/11/20(火) 01:36:13.18 .net
>>9
> csSimpleにして ComboBox1.Perform(CB_SETTOPINDEX,50,0); すれば瞬間移動します。

参考にして、以下のようなオーバーライドを入れてみました。
すると、生成して1回目のホイールだけスムーススクロールして、
2回目のホイール以降からは、スムーススクロールしないという不思議な動きをしています。
動きとしては、非常に惜しいです。

procedure MyCombo.WndProc(var Message : TMessage);
var
iIdx : Integer;
Rotation : ShortInt;
begin
if (Message.Msg = WM_MOUSEWHEEL) then begin
if (DroppedDown) then begin
Rotation := Message.WParamHi;
iIdx := Self.Perform (CB_GETTOPINDEX, 0, 0);

if (Rotation > 0) then begin
iIdx := iIdx - 1;
end else begin
iIdx := iIdx + 1;
end;

Self.Perform(CB_SETTOPINDEX, iIdx, 0);
exit;
end;
inherited WndProc(Message);
end;

15 :デフォルトの名無しさん:2012/11/20(火) 14:29:08.05 .net
TEditでhoge...○○と続く文のhogeの部分があれば実行されるようにしたいのですがどうすればいいのでしょうか?

16 :デフォルトの名無しさん:2012/11/20(火) 14:46:38.49 .net
その質問の文章、自分で理解可能なのかよ?

それはともかくエスパーしてみると、
if Pos('hoge',Edit1.Text) = 1 then
で判定かな?

17 :デフォルトの名無しさん:2012/11/20(火) 14:52:52.73 .net
>>16
すみません・・・

そのコードで試してみたところできました!
ありがとうございます!

18 :デフォルトの名無しさん:2012/11/20(火) 15:26:48.71 .net
もう1つだけお願いします・・・
hogeから10文字までの文字を引数に格納するにはどうすればいいのでしょうか?

19 :デフォルトの名無しさん:2012/11/20(火) 16:39:29.40 .net
引数に格納?? 変数に、のことかな。
hogeから? hogeを検索してってこと? それとも先の質問と同じくhogeは先頭にあるのか?
10文字まで?? 10文字なのか、インデックスで10文字目までなのか。
hogeを含むのか、含まないのか?

私のESP能力を全開にして導き出した回答。
Edit1からhogeを検索し、その位置からhogeを含んで10文字取り出す。

var
Str: String;
begin
Str:=Copy(Edit1.Text, Pos('hoge', Edit1.Text), 10);

Delphiもいいけど、日本語をがんばれ。

20 :デフォルトの名無しさん:2012/11/20(火) 16:43:18.70 .net
>>19
ありがとうごいます!
日本語のほうも勉強したいと思います・・・

21 :デフォルトの名無しさん:2012/11/20(火) 22:09:23.89 .net
超初心者の内容かと言われれば疑問ですが、ひとつ質問をしたいです。

INetCfgインタフェースなど、NetCfgX系の資源を利用できるDelphi用の定義ファイルってないでしょうか?
もしご存知の方は教えて下さい。探しても見つかりません…。

22 :デフォルトの名無しさん:2012/11/20(火) 23:09:35.61 .net
if文に2つの条件をつけるにはどうすればいいのでしょうか?

23 :デフォルトの名無しさん:2012/11/20(火) 23:28:50.03 .net
if (A=1) and (B=1) then
if (A=1) or (A=9) then

24 :デフォルトの名無しさん:2012/11/20(火) 23:29:40.24 .net
>>23
できました
ありがとうございます!

25 :デフォルトの名無しさん:2012/11/21(水) 05:35:01.31 .net
>>19 hogeが2個以上あったらどうする?
こういう処理はマッチングでやるしかないと思う Posでは物足りない

26 :デフォルトの名無しさん:2012/11/21(水) 06:17:18.19 .net
>>25
言うは易しでコードで示さないと >>18 要求では >>19 で事足りている

27 :デフォルトの名無しさん:2012/11/21(水) 06:59:28.39 .net
今足りても将来どうかな 先を見越した設計をしないと
String型を安易に使ってるのも危険な匂いがするんだけど DELPHIのバージョンで扱いが変わるし

28 :デフォルトの名無しさん:2012/11/21(水) 10:39:58.84 .net
さっさとコード出せよks

29 :デフォルトの名無しさん:2012/11/21(水) 11:41:42.99 .net
>>18を単純に解釈すると
hogeから始まる文字列の頭から10文字分を別の文字列に
コピーするにはどうしたらいいですか?

になるんだけど、これであってるかな。

30 :26:2012/11/21(水) 12:27:26.43 .net
>>29
>15 の続きで >18 の流れだから
1.TEdit 文字列 [ hoge...○○   ] の中に「hoge」が入った文があれば実行する、にはどうするか?
2.上記の条件を満たした場合、「hoge」から10文字までの文字を変数に格納する、にはどうするか?

>17 でOKな返答がある為、Unicode 以前なら結果的にどうってこともないかと
var
 Str : String;
begin
 if Pos('hoge',Edit1.Text) > 0 then
  begin
  Str := Copy(Edit1.Text, Pos('hoge', Edit1.Text), 10);
  // 処理
  end;
end;

Edit1.Text → 結果
hoge0123456789 → hoge012345
012hoge0123456789 → hoge012345
01234hoge01 → hoge01
hogeあ1いうえ → hogeあ1い

31 :デフォルトの名無しさん:2012/11/21(水) 17:18:53.12 .net
質問者はとうにいなくなってるのに周りの池沼共がギャーギャーうるさいな
こういうのよく見るけど何がしたいのかね?知識自慢?

32 :デフォルトの名無しさん:2012/11/22(木) 02:00:13.04 .net
>>25=27=31

33 :デフォルトの名無しさん:2012/11/22(木) 09:02:26.64 .net
delphixe2のListViewの横スクロールバー表示はどこで設定するの?

34 :デフォルトの名無しさん:2012/11/22(木) 11:28:29.47 .net
ListViewのスクロールバーは勝手に出たり消えたりするから設定は無いんじゃない?

35 :デフォルトの名無しさん:2012/11/22(木) 19:02:10.57 .net
レスありがとうございます。
スッキリしました。

36 :デフォルトの名無しさん:2012/11/22(木) 19:12:01.44 .net
6の時みたいに無償化イベントないかなぁ

37 :4:2012/11/23(金) 07:14:21.87 .net
ComboBox1.Perform(CB_SETTOPINDEX,*,*)
を使用する方向でやっていましたが、結局改善しきれませんでした。

そのため、SPI_SETLISTBOXSMOOTHSCROLLINGのシステム設定を
変更する方法で回避することにしました。

ちなみに、私が懸念していた点について。
> 1.ソフトが異常終了したときに、Windowsの設定が変わってしまう。
プロファイルへの書き込みをしなければ、
Windowsを再起動したときに変更前の設定に戻るみたいですので
想定よりはましでした。

> 2.同様の設定をしているコンボボックスを画面内に複数載せる場合があることを考えると、
>  コンボAのOnDropDownとコンボBのOnCloseUpが同時に発生したときの処理順が気がかり。
通常のマウス操作では、コンボAのDropDownとコンボBのCloseUpを同時発生できないので、杞憂でした。

ありがとうございました。

38 :デフォルトの名無しさん:2012/11/24(土) 13:43:57.37 .net
HTMLファイルのURLの部分のみ(複数のURL)を抜き出してlistboxに反映するにはどうすればいいのでしょうか?

39 :デフォルトの名無しさん:2012/11/24(土) 14:09:28.86 .net
「<a」が出てきたら次の「>」までを抽出する

40 :デフォルトの名無しさん:2012/11/24(土) 14:14:43.00 .net
>>39
そこまでは辿りついたのですがでどういう風に書けばいいのか分からず・・・
PosExを使うのでしょうか?

41 :デフォルトの名無しさん:2012/11/24(土) 15:04:41.10 .net
正規表現ライブラリとか使うと幸せになれるよ

42 :デフォルトの名無しさん:2012/11/24(土) 18:33:28.25 .net
URL抽出用のクラスを自作すりゃいい

43 :デフォルトの名無しさん:2012/11/24(土) 19:08:47.65 .net
>>40
<a href="
から "> まで 抜くにしてもURLのリンク記述は相対パスが多いぞ
試しにこのアドレスの表示ページをブラウザのソース表示で見てみては?
http://toro.2ch.net/tech/subback.html

HTMLファイルを読み込んで抜き出すのに
テキストベースで処理するのかバイナリーベースで行うのかで違ってくるけど
てけとうに書いてみますた

44 :デフォルトの名無しさん:2012/11/24(土) 19:12:29.63 .net
procedure TForm1.Button1Click(Sender: TObject);
var
MS_Base :TMemoryStream;
Buffer : array[0..MAX_PATH-1] of Byte;
BinarySize,Address : Int64;
Bytes : Integer;
Str : String;
Check1,Check2 : Boolean;
begin
MS_Base := TMemoryStream.Create;
MS_Base.LoadFromFile(ExtractFilePath(Application.ExeName) + 'subback.html'); // 保存してると思いねぇ

Check1 := False;
Check2 := False;
Str := '';
Bytes := 3;
Address := 0;
BinarySize := MS_Base.Size;
while Address < BinarySize do
begin

45 :デフォルトの名無しさん:2012/11/24(土) 19:14:00.78 .net
MS_Base.Position := Address;
MS_Base.Read(Buffer,Bytes);
if Check1 and Check2 then
begin
if Buffer[0] = $22 then
begin
Check1 := False;
Check2 := False;
ListBox1.Items.Add(Str); // <a href=" 〜 中の部分 〜 "
Str := '';
Bytes := 3;
end else Str := Str + chr(Buffer[0]);
end;
if Check1 and (Check2 = False) then if Buffer[0] = $22 then Check2 := True;
if (Check1 = False) and (Buffer[0] = $3C) and (LowerCase(chr(Buffer[1])) = 'a') and (Buffer[2] = $20) then
begin
Check1 := True;
Bytes := 1;
end;
Address := Address + 1;
end;
MS_Base.Free;
end; // ここまで

46 :デフォルトの名無しさん:2012/11/24(土) 19:30:47.45 .net
>>43-45
出来ました!
本当にありがとうございます
これで自分が思い描いたソフトが作成できそうです

47 :デフォルトの名無しさん:2012/11/24(土) 20:28:45.09 .net
LOOP1:
if (DATA[i] = $3C) and
(DATA[i+1] = $61) and
(DATA[i+2] = $20) and
(DATA[i+3] = $68) and
(DATA[i+4] = $72) and
(DATA[i+5] = $65) and
(DATA[i+6] = $66) and
(DATA[i+7] = $3D) and
(DATA[i+8] = $22) then
begin
 i:=i+9;
 while (DATA[i] <> $22) do
 begin
  str:=str+chr(DATA[i]);
  Inc(i);
 end;
 ListBox1.Items.Add(str);
 str:='';
end;
Inc(i); if i>length(DATA) then exit;
goto LOOP1;

48 :デフォルトの名無しさん:2012/11/27(火) 19:29:35.25 .net
Delphi XE3にてDeleteが使用できません。

while Pos('hoge', str) > 0 do Delete(str, Pos('hoge', str), 1);

以下の内容で実行すると
'Integer' と 'string' には互換性がありません
実パラメータが多すぎます
とでます
どうすれば実行されるようになるのでしょうか

49 :デフォルトの名無しさん:2012/11/27(火) 19:42:04.94 .net
>>48
自己解決しました
ListBox1.Items do
の中に入れていたのでエラーが発生したみたいです

50 :デフォルトの名無しさん:2012/11/27(火) 20:08:00.88 .net
System.deleteで解決できました。

51 :デフォルトの名無しさん:2012/11/27(火) 22:18:02.68 .net
Win32_PnPEntity を使った接続デバイスの一覧で
http://stackoverflow.com/questions/12163106/getting-device-names-using-a-com-port-number-through-the-windows-api-in-delphi
ttp://stackoverflow.com/questions/1687239/getting-connected-usb-info-with-delphi-on-vista

機器名を個別に関連付けするのに
http://www.wmifun.net/library/win32_pnpentity.html
HardwareID を参照取得したいのですが

PortData[No][0] := String(FWbemObject.name);
PortData[No][1] := String(FWbemObject.Description);
PortData[No][2] := String(FWbemObject.Service);
PortData[No][3] := String(FWbemObject.PNPDeviceID); ← これで振り分けに使うとドライバの種類になって機器個別にならない。
PortData[No][4] := String(FWbemObject.HardwareID); ← ここがエラーになる
PortData[No][5] := String(FWbemObject.Manufacturer);

Windows のシステムでハードウェアID を見るとString が複数行に渡っているため?だと思うのですが
取得する記述をどういうふうに書くのでしょうか?

52 :デフォルトの名無しさん:2012/11/27(火) 23:50:37.26 .net
WMI Delphi Code CreatorとかMicrosoftのWMI Administrative Toolsに入っている
CIM Studioを使うと幸せになれるかも

53 :デフォルトの名無しさん:2012/11/28(水) 00:37:46.87 .net
>>51
Win32_PnPEntity class (Windows)
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394353(v=vs.85).aspx

HardwareID
Data type: string array
Access type: Read-only
(中略)
Windows Server 2003, Windows XP, Windows 2000, Windows XP, and Windows NT 4.0:
This property is not available.

みたいなんですけど、OSは?

54 :51:2012/12/04(火) 20:27:08.89 .net
>>53
規制で書けませんでした
OS は XP sp3 です。
Delphi は D6 です。
HardwareID は array なんですね。
HardwareID 部分を別アレイにするとしても変動する行数をどう取得するのやらさっぱり

その後 各USB 機器やWindows の HardwareID を調べていった結果
どうやら機器そのものの ID ではなくて
その機器に使われている I/O 部分の ID だということが判りました。
結局ドライバレベルの(他メーカーでも同一のチップによるひとくくりな)大まかな振り分けしかできないようで
質問は取り下げします。 スミマセン

55 :デフォルトの名無しさん:2012/12/04(火) 20:57:16.27 .net

取得以前に、Win32_PnPEntityの場合HardwareIDは存在しないのでは?

Windows Server 2003, Windows XP, Windows 2000, Windows XP, and Windows NT 4.0:
This property is not available.

大事なことだから、二回もWindows XPと書いてあるけど。

56 :51:2012/12/05(水) 03:14:00.05 .net
>55
PnPEntity で取れるかどうかは別として
デバイスマネージャ上のプロパティ > 詳細 > ハードウェア ID
で OS から見たりした結果です。

XP でも項目と値は入っていますよ

57 :デフォルトの名無しさん:2012/12/05(水) 06:16:10.52 .net
>>52

58 :51:2012/12/05(水) 21:48:09.23 .net
>>57
目的が「機器名を個別に関連付けする」です。
その為に機器個別のメーカーが振ったローカル情報があれば取得したかったわけです。
A社の機器B 使われているI/O のチップF
C社の機器D 使われているI/O のチップF

で、この場合、共通の「I/O のチップF」しか取得できないようで
異なる通信接続手順などを自動設定できないな・・・

USB Web カメラなどは接続の(画像サイズなど)リストが出る方法があるようですが
振り分けのターゲットは、USB 接続
CP210x USB to UART Bridge Controller
の先にいる機器です。
あきらめました

59 :デフォルトの名無しさん:2012/12/05(水) 22:09:15.88 .net
>>56
なんかすれ違うなぁ。
いやXPではHardwareIDが無いなんて言ってないし、別の方法で確認したことは理解してましたよ。

>HardwareID 部分を別アレイにするとしても変動する行数をどう取得するのやらさっぱり
って書いてあったから、
arrayとかの問題以前に、XPでWin32_PnPEntityの場合はHardwareIDの取得は無理なのでは、と言ったつもり。

分かってるなら私の読解力不足。失礼。

60 :デフォルトの名無しさん:2012/12/18(火) 00:06:09.01 .net
質問です。

FindFirst(), FindNext() で開いているディレクトリの中のファイルを操作すると何か問題ありますか?

画像ビューアを作っています。ウィンドウにドロップされたフォルダを開き、ファイル一覧を得て、順番に表示し、必要に応じて画像を移動したり削除したりするものです。

61 :デフォルトの名無しさん:2012/12/18(火) 00:08:10.93 .net
60 つづき。

フォルダの中の画像が多いとファイル一覧を得るのに時間がかかるので、差し当たり百枚くらいリストを作ったら最初の画像を表示し、ユーザに待ち時間を感じさせないようにしたいのです。
FindNext() は TThread か Application.PrecessMessages で GUI と競合しないように継続するので、FindClose() する前に、ファイルにアクセスすることになります。

よろしくお願いします。

62 :デフォルトの名無しさん:2012/12/18(火) 01:50:28.19 .net
試しにどうでもいいデータでテストしてみればいいだけでは。

63 :デフォルトの名無しさん:2012/12/18(火) 05:25:00.09 .net
時間がかかるって、ファイル何個で何秒?
FindNext以外の処理で重くなってる気がする FindNext自体は高速だろう

64 :デフォルトの名無しさん:2012/12/18(火) 05:40:04.99 .net
エクスプローラ的なUIの画像ビュアーか いかにも面倒臭そう
そういうソフトだったVixってソースが何十万行もあったような・・・

65 :60:2012/12/18(火) 07:00:40.64 .net
>>62
旧バージョンではフォルダを閉じずにファイル操作していましたが別に不都合は感じませんでした。
でも本当にそれでいいのか気になって一旦ファイル一覧を作ってフォルダを閉じてから操作するようにしました。
すると今度は待ち時間が発生するのでどうしたものかと。

66 :60:2012/12/18(火) 07:09:37.06 .net
>>63-64
*.* で全てのエントリを拾って拡張子を調べて BMP, GIF, JPEG, PNG を選び TStringList に Add() しています。
ExtractFileExt(), LowerCase(), AnsiPos() をエントリの数だけ繰り返します。
コードの行数は三桁もないと思いますが while ループがあります。
実際にかかる時間は画像千枚くらいで十秒くらいでしょうか。

67 :デフォルトの名無しさん:2012/12/18(火) 08:59:41.58 .net
Win限定ならFindNext使って列挙せずに、シェルAPI使おうぜ。そうすりゃ、エクスプローラとの
見た目の一貫性とかある程度取れる。

>>60
FindFirst,FindNextももちろんだが、ディレクトリのファイルを操作する
APIの呼び出し時にもちゃんと戻り値をチェックして行儀のよくプログラミング
しておけば別に問題ないと思うけど。

68 :60:2012/12/18(火) 09:42:46.02 .net
>>67
ShellAPI ですね、調べてみます。
戻り値にも気を付けます。
いっそ、全てのファイルを取得してフォルダを閉じてから画像ファイルを選べばいいんじゃないかと思い当たりました。

69 :デフォルトの名無しさん:2012/12/18(火) 09:58:50.43 .net
つか、Application.ProcessMessagesとかかっこ悪い事はやめよう。
ファイル操作がいったいなんなのかよくわからんけど、単純にサブスレッドで
列挙するだけなら、
http://pastebin.com/cPY8duNq

70 :60:2012/12/18(火) 16:41:59.29 .net
>>69
ありがとうございます。
それも参考にしてなんとかしてみます。

71 :デフォルトの名無しさん:2012/12/25(火) 23:28:28.78 .net
delphi6を使用しています。

var
Time : TDateTime;
str : String;

begin
Time := Now;
DateTimeToString(str, 'h時n分s秒',Time);
Label1.Caption := str;

とすると、時、分、秒が表示されず数字のみの表示になってしまいます。
どうすれば時、分、秒が表示されるのでしょうか?

72 :デフォルトの名無しさん:2012/12/25(火) 23:32:00.10 .net
>>71です。
'h''時''n''分''s''秒'で解決することができました。

73 :デフォルトの名無しさん:2012/12/25(火) 23:45:48.35 .net
つ FormatDateTime

74 :デフォルトの名無しさん:2012/12/26(水) 02:45:33.20 .net
そっちも問題は一緒ですけど

75 :デフォルトの名無しさん:2012/12/26(水) 18:34:08.08 .net
procedure TForm1.FormCreate(Sender: TObject);
var
ini : TIniFile;
ExePath: String;
begin
ExePath := ExtractFilePath(Application.ExeName);
ini := TIniFile.Create(ExePath + 'settings.ini');

if ini.SectionExists('Settings') then

このようにして、settings.iniのセクション'Settings'があった場合の動作を指定しようと思ったのですが、どうもうまくSectionExistsが働いていないようで、
SectionExistsがTrueになってくれません。
settings.iniに'Settings'のセクションはあります。
解決策をどなたか教えて頂けないでしょうか?

76 :デフォルトの名無しさん:2012/12/26(水) 18:46:02.48 .net
デバッグ版DCU使ってSectionExistsの中にステップインしてみたら?

77 :デフォルトの名無しさん:2012/12/26(水) 19:03:34.31 .net
>>75
根本的な解決にはならないけど代替案。

var hoge: Integer;

hoge := ini.ReadInteger('foo', 'bar', -1);

if hoge = -1 then
begin
// invalid
end
else
begin
// valid
end;

78 :デフォルトの名無しさん:2012/12/26(水) 19:28:08.38 .net
>>76さんのやり方は出来ないことが判明したので、>>77さんの代替案を使用させて頂きます。
ありがとうございました!

79 :デフォルトの名無しさん:2012/12/26(水) 19:28:58.23 .net
>>78です。
言葉足らずでした。
>>>76さんのやり方は出来ないことが判明したので
性格には>>76さんのやり方は私の環境では出来ないことが判明したので
でした。

80 :デフォルトの名無しさん:2012/12/26(水) 22:43:09.66 .net
はぁ

81 :デフォルトの名無しさん:2012/12/27(木) 10:11:15.46 .net
tがひとつ多いとかsが足りないとかいうしょーもないオチだったりして・・・

82 :デフォルトの名無しさん:2012/12/27(木) 10:39:42.33 .net
出来ないだけじゃ分からん

83 :デフォルトの名無しさん:2012/12/28(金) 20:33:30.27 .net
出来ないのは彼女です

84 :デフォルトの名無しさん:2012/12/30(日) 01:20:29.43 .net
こんなアホそうなやつでも遭遇するバグだったら他の誰かがとっくに気付いてるし

85 :デフォルトの名無しさん:2013/01/16(水) 20:32:54.27 .net
無償、もしくは非常に安価なバージョンは用意されていますか?

86 :デフォルトの名無しさん:2013/01/16(水) 21:13:03.38 .net
Starter Editionってのがあったと思う。色々制限はあるだろうけど。

87 :デフォルトの名無しさん:2013/01/19(土) 01:45:04.23 .net
何もないフォームに PaintBox を一つ貼り付けて、プログラムも OnPaint に

procedure TForm1.FormPaint(Sender: TObject);
begin
with PaintBox1.Canvas do begin
Brush.Style := bsSolid;
Brush.Color := clWhite;
FillRect(ClipRect);
end;
end;

と書いただけの時、フォームのダブルバッファが True だと表示されないのはなぜ?
前はちゃんと出来ていたと思うのだけど・・・

88 :87:2013/01/19(土) 01:50:44.31 .net
あ、バージョンは XE Starter です。

89 :デフォルトの名無しさん:2013/01/19(土) 08:45:42.15 .net
事故解決しました・・・

90 :デフォルトの名無しさん:2013/01/24(木) 21:34:14.71 .net
Windows 7 (32-bit/64-bit) 環境で Delphi 6 は、インストールと動作は可能でしょうか?

XP モードというものを入れないと使えない?とかありますか?

91 :デフォルトの名無しさん:2013/01/24(木) 21:47:48.13 .net
>>90
今使ってるが問題なく使えている(win7 pro 64bit)
XPモードは使っていない
開発頑張ってね

92 :デフォルトの名無しさん:2013/01/24(木) 21:59:16.63 .net
>>90
Delphi5Pro だけど Win7 32/64bit でちゃんと動いてるよ。
ただしプロジェクトファイルは Delphi 本体からでないと開けない。
F9 で実行中のウィンドウはファイルのドロップを受け付けない。
ヘルプファイルの挙動が時々不審。
この三つ以外は特に問題ない。

93 :デフォルトの名無しさん:2013/01/24(木) 23:42:16.76 .net
>>91-92
ありがとうございます。 安心して機種移行するまで今のXP環境を使います。
最近の(64-bit)機種でXPのドライバが無いものなどがあるようなので
今使っているパソコンが壊れたら開発環境崩壊? かと

94 :デフォルトの名無しさん:2013/01/25(金) 00:18:01.99 .net
Lazarusあかんの?

95 :デフォルトの名無しさん:2013/01/25(金) 19:44:18.45 .net
横から便乗質問なんですが(私も Win7 64bit Delphi5Pro です)
最近急に .hlp の起動が遅くなりました
数ヶ月くらい前から急にです
秀丸から開いたりするとタイムアウトエラーになるほど遅いです
おそらく何かきっかけがあったんでしょうがググってもあまり良い情報は得られませんでした
>>92 さんはそんなことは起きていないですか?

96 :デフォルトの名無しさん:2013/01/25(金) 23:33:29.77 .net
Delphi関係だけが遅いのですか。
ファイルのコピーとかは遅くないですか。

97 :デフォルトの名無しさん:2013/01/26(土) 00:38:16.19 .net
>>95
92 です。
うちでは起動が遅いということはありません。
うちの不審な挙動とは F1 でヘルプを開こうとしたときに、クラスではなくプロパティやメソッドの名前にカーソルがあると開かないというものです。

98 :デフォルトの名無しさん:2013/01/26(土) 02:49:54.46 .net
Windows 7 Pro 64bit に Delphi 7.1 をインストールして快適に使っています。

唯一、F1 キーによる状況検知ヘルプだけが有効に機能しません。

「C:Delphi7Helpd7.hlp ファイルが見つかりません。このファイルを自分で探しますか?」

というメッセージダイアログが出てしまいます。ヘルプファイルのパス名から \ マークが
消えています。Windows 7 側の問題だと思いますが、このスレに解決方法をご存じの方
いらっしゃいますか?

99 :95:2013/01/26(土) 11:06:48.62 .net
>>96-97
どもです
WinHelp は他に API32WH.HLP くらいしか使っていなかったのですが
今ほかの昭和なソフトで確認したら問題なかったです
秀丸に登録してみてもすぐに開きました
D5、D6、API32WH.HLP はドライブもフォルダも異なるので HDD の問題でもないと思うのですが
うまく開いていた頃はたまにオブジェクトインスペクタから開いた時に「追加情報はありません」と
出ていたくらいでその時はフォームのコンポーネントで F1 押せば正常に開いていました

100 :デフォルトの名無しさん:2013/01/28(月) 20:45:15.19 .net
Dという言語がある。D1, D2があるから、
D5, D6なんてかかないほうがいいとおもう

総レス数 987
295 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★