4 :
デフォルトの名無しさん:05/01/01 03:56:15
ヘ o , ── / __, / _, /_/_/ __, /
/ \ ´ ── / / ─' / _ /
_/ \ __ / ___/ ___/ / ___/
 ̄ ̄ ̄
_ , ― 、
,−' `  ̄ヽ_
,' ヽ
( `ー'ー'ヽ`ー'ー'ヽ )
( ノ '''''' '''''':::::::ヽ )
( . )(●), 、(●)、.:( ) +
( ) ,,ノ(、_, )ヽ、,, .::::( ) <ヨン様が華麗に4get!
. ヽ ) `-=ニ=- ' .:::::::|ノ +
\ `ニニ´ .:::::/ +
,,.....イ.ヽヽ、ニ__ ーーノ゙-、.
: | '; \_____ ノ.| ヽ i
プログラミングについての質問なのですが以下のプログラムなのですがコンパイルして実行すると
hp: what had happend?
HpCheck(dmatrix.c, 178) : heap violation[ O]と出て、セグメンテーション違反です で終了してしまうのです
ちなみにdmatrix.cの178行は
double **dm_create(int n, int m)
{
int i, j;
double **aa;
aa = (double**)MALLOC(sizeof(double)*n);
for(i=0; i<n; i++){
aa[i] = (double*)MALLOC(sizeof(double)*m);
memset(aa[i], 0, sizeof(double)*m);
}
return(aa);
}
という所のaa[i]〜って所ですどうやったら回避できるのか分からないので教えて下さいよろしくお願いします
void klt(double **U, double **Y, int K){
int i, n;
double a, **v, **d, **E, T, **y;
v = dm_create(K+1, K+1);
d = dm_create(K+1, K+1);
E = dm_create(K+1, K+1);
y = dm_create(K+1, K+1);
for(i = 1; i<=K; i++){
d[i][0] = 0.0;
U[i][0] = 0.0;
for(n = 1; n<=K; n++){
y[1][n] = Y[n-1][0];
v[i][n] = U[n-1][i]*y[i][n];
d[i][n] = 0.95 * d[i][n-1] + v[i][n]*v[i][n];
E[i][n] = y[i][n] - U[i][n-1]*v[i][n];
T = klt_T(d,i);
a = T*E[i][n]*v[i][n]/d[i][n];
U[i][n] = U[i][n-1] + a;
y[i+1][n] = y[i][n] - U[i][n]*v[i][n];
}
printf("for out1");
}
dm_free(y,K);
dm_free(v,K);
dm_free(d,K);
dm_free(E,K);
}
(超初心者用)って文字だけ見たんだろうな
しかしDelphiって何?とは少しも思わなかったのかねw
すいませんおもいませんでしたorz
10 :
初心者:05/01/02 18:00:15
質問です。
Delphi6を使っています。
久し振りに起動しましたところ、ツールバーやメニューが消えてしまっています。
どうやって表示すればよいでしょうか。
よろしくお願いいたします。
画面の解像度上げてみてはみ出していないかどうかを確認。
何も表示されていない領域を右クリックしてチェックをつけてみる。
別ユーザーを作ってログインしてIDEを起動してみる。
再インストール
InputBoxなどでの質問なんですが、
英語版Windowsで表示すると日本語版WindowsだとOK,キャンセルになっている
ボタンはちゃんと英語になるんでしょうか。。
ScrollBoxでスクロール量を変えるにはどうしたらいいですか?
プロパティではなく、プログラム中で動的に変化させたいです。
>14
プログラム中で動的にプロパティに新しい値を代入する。
16 :
初心者ですが:05/01/03 21:09:47
新規作成で
ASP.NET Web
VCLフォーム
Windowsフォーム
の違いが分かりません教えてください
BMPファイルのヘッダ情報を取得するにはどうすればいいでしょう?
>>17 BITMAPFILEHEADERでぐぐれ
BITMAPFILEHEADER、BITMAPINFOHEADER、(RGBQUAD)の各レコード型がそのまま書かれてるだけだ
>>16 BCBしか使ってないからよくわからんがDel8かな?
VCLフォーム: VCL.netのTForm派生のフォーム
WIndowsフォーム: .net FrameworkのWindows.Forms派生のフォーム
だと思われ
インラインアセンブラを使って処理の最適化をしようと思うのだけど、
実行中のCPUウィンドウに表示されるシンボルと対応行表示付きの
逆アセンブルをそのままソースとして抜き出す方法はないでしょうか?
21 :
デフォルトの名無しさん:05/01/04 05:46:41
特定の日付の色を変えられるカレンダーコンポーネントを作るには何から
派生させればいいのでしょうか?
Delphi7を使用してます。
SamplesのTCalendarからが楽そうなんですが、やり方がわかりません。
>>19 CTRL-Cは別の意味になるから ALT+E+C
これで1行しかコピーできないから、これを送ってはカーソル↓を送って
というアプリを作ればなんとかなりそうだけど
残念ながら、ラベルの部分がコピー出来ない
ということで、DCU32INTを使うのが一番いいかもしれないよ。
どこで手に入れたか忘れたから自分で検索してくれ
25 :
デフォルトの名無しさん:05/01/04 13:14:49
フレームにEditとButtonを貼り、
擬似的なDateTimePickerのようなものを作成しようとしています。
カレンダークラスはDateTimePickerよりコピーしました。
ただ、ボタンクリック→カレンダー表示がどうしてもできません。
DateTimePickerはコンボのリスト内にカレンダーを描画しているいるようなのですが、
EditとButtonの場合の描画方法がわかりません。
初心者で申し訳ないのですが
よろしくお願いします。。
それ激しく見当ちがい
以下はTTreeViewのあるノードの階層化のノードをすべてソートするためのものですが
自前のソートを使った場合うまくいきません。ノードをスワップしているところがまず
いのでしょうか?
procedure ChildNodeSort(Node: TTreeNode;);
var
gap,width,i,j :Integer;
dmy :TTreeNode;
begin
if Node.GetFirstChild <> Nil then
for j := 0 to Node.Count-1 do ChildNodeSort(Node.Item[j]);
//Node.AlphaSort; や Node.CustomSort(@CustomSortProc, 0); ならもちろんOK!
gap := Node.Count-1; //ShellSort(昇順)
while gap > 0 do
begin
gap := gap div 2;
width := Node.Count-1-gap;
for i := 0 to width do
begin
j := i;
while j >= 0 do
begin
CompareStr(Node[j].Text,Node[j+gap].Text) <= 0 then break;
dmy := Node[j]; Node[j] := Node[j+gap]; Node[j+gap] := dmy; //これがまずい?
j := j-gap;
end;
end;
end;
end;
インスタンスを入れ替えるんじゃなくて内容を入れ替える
> インスタンスを入れ替えるんじゃなくて内容を入れ替える
dmy.Assign(Node[j]);
Node[j].Assign(Node[j+gap]);
Node[j+gap].Assign(dmy);
としましたがダメでした。そういうことではないのかな?
TreeViewは windowsのコモンコントロールのラッパーだから、
VCL側だけで並べ直しても意味がない。
コモンコントロールに対して送らないと結果は反映されない。
だからVCLはTVM_SORTCHILDREN を送って処理させてる。
で、自前のソートがやりたいなら
TTreeNode.CustomSort を使う方が簡単
31 :
デフォルトの名無しさん:05/01/04 18:45:26
どーでもいいけどshellsortのgapは
h := 1;
while h < n do
h := h * 3 + 1;
while h > 0 do
begin
h := h div 3;
が効率的。
>>32 アルゴリズムの本にはそう書いてありますよね(^^;)。
ソートいえば皆さん、やはりクイックソートを使うんでしょうか。
私の貧弱なセカンドマシン(Pentium U 400Mzh)で Integer 型のデータ5万個をソートした場
合
>>27 のコードでもクイックソートと比較しても体感的な差は全くないです。文字列なら(テキ
ストの種類にもよりますが)1万行でも差が出るでしょうけど、そういうことをする必要に迫ら
れたことがないので私はシンプルなシェルソートを使うことが多いです。
まったく貧弱じゃないな。
35 :
肉体労働者:05/01/04 22:21:51
すみません質問させてください。
目的
2バイトコードとアスキーの混在するテキストファイルのコンバートをしようとしています。
最終的に日本語だけになれば完成。
ファイルの仕様
日本語2バイトコードとアスキーコードが混在しています。
自分のしたこと
TFileStreamのReadメソッドを利用して1バイトづつ読み込んでバッファに保持。
CRLFが出てきたら返す。
問題点
sz := fs.Read( buf, 1);
if buf = widestring(chr($0d)) then
begin
処理...
と書いたところ判断文で死んでしまいます。
szはlongintで、bufはwidestringで変数を取りました。
デバッガでリードした値を読むと読めないので変数の取り方がおかしいのかとも思っています
どうやって取ればいいのか教えていただけますか?
1バイトずつならbufはbyte型にする。あとszの値チェックし忘れ。
Readlnじゃ駄目なのか?
37 :
肉体労働者:05/01/04 23:09:18
ご指摘ありがとうございます。
これからやってみます。サイズチェックは実際にはしてますが
ここで書くには行数制限のために省きました。
ReadInは調べてみます
また分からないことがありましたらご指導ご鞭撻よろしくお願いします
う・・う〜ん。どこから突っ込んだらよいのやら・・
ネタなのかなぁ。
でも俺も通った道だしなぁ・・。
35のどこが悪いか指摘するより
「最終的に日本語だけになれば完成。」のコードを書くほうが圧倒的に早い・・。
・SingleByteも混じってるのにWideStringで読んでどうするの、とか
・そもそもWideCharじゃなくてWideStringかよ!、とか
・そのくせなんで1ByteしかReadせぇへんねん!、とか
・1文字分づつ読んでたらオーバーヘッドがすごいことになるぞ大きいバッファにまとめて取り込め、とか
・そもそも、テキストファイルならTStringList.LoadFromFileで一発やんか、とか
> 2バイトコードとアスキーの混在するテキストファイルのコンバートをしようとしています。
> 最終的に日本語だけになれば完成。
よくわからんけど、要するにテキストファイルから2バイトコードだけを取り出したいということ?
41 :
肉体労働者:05/01/04 23:44:22
ご指摘ありがとうございます。
>>38氏
大きなバッファに取り込んでやろうかとも思ったのですが・・・
所詮は肉体労働者なので脳が足りなくて、
バッファの読み込みタイミングを考えたりサイズを考慮するのが面倒だったことと
一行のデータを切り出せると後の処理の都合が便利だったというだけです。
>>39氏
仰るとおりです。ただ、将来的には行頭のアスキーコードで処理を分岐させたいと思っています
>>40氏
ありがとうございます。これから調べてみます
>>41 function GetAnsiStr(S :string) :string;
var
i,j,L: Integer;
P : PChar;
begin
if S = '' then Exit;
L := Length(S); i := 1; j := 0;
P := StrAlloc(L+1);
while i <= L do
begin
if (S[i] in [#$81..#$9F, #$E0..#$FC]) or (S[i] = #13) then
begin //全角文字(と改行コード)の処理
P[j] := S[i]; P[j+1] := S[i+1];
Inc(i,2); Inc(j,2);
end else //アスキー文字の処理(読み飛ばす)
Inc(i);
end;
P[j] := #0;
Result := string(P);
StrDispose(P);
end;
使用例
Memo1.Lines.Text := GetAnsiStr(Memo1.Lines.Text);
いうまでもないがアスキー文字列だけの行は空行(改行コードだけ)になる。
そういうとき空行も不要というならちょっと上記のコードを改造すればいい。
StringReplaceを繰り返し呼び、半角文字を全部削除する事もできるよ!
44 :
肉体労働者:05/01/05 00:06:16
>>42氏
ああ、これは素晴らしいソースですね!
これはありがたい。
これなら行頭の文字などを判断文に追加することによりいろいろ出来ますね。
本当に助かります。感謝感激です。
あと、非常に初歩的な質問なのですが
現在、メニュを選択したときにこの処理を走らせているのでアプリが動作を占有して
死んでいるのか生きているのかもわかりません。
どうにかしたいのですがどうしたらいいんでしょうか?
自分でもヘルプとにらめっこしているんですがちょっとわからないのでご指導いただけますでしょうか?
甘えてばかりですみません。
>>44 スレッド立てて処理するか、ループの最中に Application ProcessMessages とか
TObjectから派生したクラスって簡単にコピーできないんでしょうか?
TPersistentから派生してないのでAssignできんとですorz
ググってもそれらしいのにひっかからないのでご存知の方がいれば
教えていただければと
なにをどうコピーするのかはプログラマがきめることなんだよ。
>>46 RTTIを使えばpublished propertyの代入の自動化は出来るかも。
ただしTPersistent, TStream.ReadComponent/WriteComponent相当の機能を
自力で実装しないといけないから結構面倒かも(その為のTComponentなわけで)。
永続化フレームワークがそれっぽいことをやってそうな気がしないでもないけど
たぶんTComponentの機能を利用しているだけだと思う。
ようは簡単には出来なさそうってこった。
47の言葉が全てを語ってる。
漏れも自力で実装した。
つーか、どこかに「Assignは各クラス各々で実装すること」みたいなこと書いてなかったっけ?
前にVCLソースでAssignを継承の大元までたどったことがあったけど
結局「Assignメソッドが用意されているなら引数をメソッドに引き渡す。ないならなにもしない」というコードだったよ。
50 :
肉体労働者:05/01/05 09:05:34
昨日は皆様のおかげで随分進んだような気がします。
ありがとうございました。
現在は昨日の最後の問題を解決すべく試行錯誤しております。
>>45氏のご指摘されたようなやり方を考えているのですが
ちょっとスレッドはむずかしそうなので・・・
あと、自分がやりたいことは、もしかしたらSendMessageを使うと可能かもしれないと思っています
まぁ、SendMessageの使い方もわからないのでどっちもどっちなんですがねw
プログラムはやっぱり難しいですね。
なにもわからず始めてみたものの、悩んでばっかりです。
>>50 だって、簡単だったらプログラムに金払う奴なんていなくなるだろ?
amazonでdelphiの本買おうと思ってるんですがおすすめの本とかありますか?
ちなみにほかのプログラミングもさわり程度しかやったことのない初心者です。
バージョンはdelphi6です。
かなり初歩的な質問で申し訳ないのですが、PCと対戦する、ジャンケンプログラムを
作りたいのですがどこからはじめたらいいのかわかりません。
参考になるようなHPなどありますか。教えてください。
57 :
デフォルトの名無しさん:05/01/05 23:28:09
delphi2005はWinXP Homeでは使えないのでしょうか
>>54 そのレベルから入るなら(賢明だと思います)
自分なりのデザイン(ウィンドウのイメージね)を考えれば
書き加えるべきコード自体は単純そのものだから
どこぞのHPなど参考にするより、自分で試行錯誤した方がよさげです
61 :
デフォルトの名無しさん:05/01/06 03:08:22
>>51 誰でも出来る簡単な仕事にだって金を払ってるよ!
42氏のコードを見てて思ったのだけど
最近 IsDBCSLeadByte は使われなくなったのだろか?
結果は同じなんだろうけど、こっちで行けるのならよりスマートじゃまいか
全般的に42は変。
> 最近 IsDBCSLeadByte は使われなくなったのだろか?
D3以降ならByteType 関数もあるからそれを使う方が普通だろうね。
だけど
>>42の方法なら、たとえば半角・全角の英数字だけを取り出す
といったことも簡単にできる。
> 全般的に42は変。
集合型を使った判定が珍しいとは思うけど、べつに変じゃないだろ。
何で StrAlloc 使ってるの?
使ったこと無いから分からんけど、イイの?
下位互換性ルーチンちゃうの?
くだすれが最も生産的なすれになっている予感w
そもそもなぜPChar?Stringじゃだめなのか?
>>65 全然問題なし。ヘルプでStrAlloc調べろ。
もっとも
>>42の場合とくにPCharを使うこともないとは思うが・・・
CかPascalかって悩んでる時点でだめだね。
プログラマに向いてる奴は4言語ぐらい使いこなすマルチリンガル。
そして、ただのコーダーに限って1言語しかできないとくる。
Drag and Drop Component SuiteでDropFileSourceを
使用してアプリからD&Dでファイルをコピーしたいのですが、
ただたんにコピーするのではなく、違う処理を途中に
入れたいときがあるので、ドロップ先のフルパスを取得したい
のですが、そのようにすればドロップ先のフルパスを取得
できるのでしょうか?
ちょっとすみません
二次元配列で
array[0][0..9] := (100,100,100,100,100,60,40,20,20,10);
みたいな感じで一気に代入する方法ってないものでしょうか
array[0][0] := 100;
array[0][1] := 100;
とやっていくのはどうにも間抜けな感じがするんですが
ループつかうには数値に規則性がないので悩んでます
文法的なサポートはない。
SetArr(var dst; src: array of Integer);
でも作るしか。
73 :
初心者:05/01/06 16:53:39
別Unitでクラスを定義したら
↓こんなメッセージが・・・
---------------------------------------------------------------
デバッガ例外が発生
XXX.exeがEAccessViolationクラスの例外を生成しました。
アドレスXXXXXXXXでアドレス000000に対する読み込み違反がおきました。
---------------------------------------------------------------
これってクラスの定義の方法が間違ってるの?
直接クラスと関係なし。アクセス違反なだけ。インデックスの範囲外へのアクセスが一番多い原因
>>71 配列定数とかグローバル変数の初期値ならこんな感じでできる。
ローカル変数だったり、処理の途中で代入したいのなら無理。
const a: array[0..1, false..true] of Integer = ((0, 1), (2, 4));
var a: array[0..1, 0..1] of Integer = ((0, 1), (2, 4));
うんこ
>>71 自分で関数を作ればよい。
でも初期値をずらずら並べるのはバグの元
マルチバイト考慮なし?
まだ勉強開始したところなのでまずは愚直に書き
ほかの部分が完成したら関数の作成にもチャレンジしてみたいと思います
お答えいただきありがとうございました
>>71 コピペして、Var2Dimの値がどうなるか試してみな。
procedure Test;
type
T2DimArray:array[0..1][0..1] of Integer;
const
CONST2DIM:T2DimArray:array=( (0,1),(2,3) );
var
Var2Dim:CONST2DIM:T2DimArray;
begin
Var2Dim := CONST2DIM;
end;
時々ヘルプに載ってない言葉に出会うことがあるのですが
みなさんどこで知り、どこで勉強してるのですか?
例えばEM_LINEFROMCHARとかEM_GETLINECOUNTとかです。
使ってるのはdelphi 6 personalです。
>>13 英語にはならないはずです.
InputBox関数の『OK』『キャンセル』のテキストはConstユニットで定義されているリソース文字列を使っているためです.
対策としては同等の関数を自前で作成して実行時にOSの設定言語に合わせてCaptionを書き換えるか,
プロ版以上をお持ちでしたらDialog.pasのInputBox関数とInputQuery関数(InputBox関数が内部で呼び出している)
のソースをコピペしたものをベースにしても良いと思います.
>>46 Delphiの言語仕様にはオブジェクト(インスタンス)を丸ごとコピーする機能はありません.
よって自分でコピーするメソッドを実装するしかありません.
なおTPersistentクラスのAssignメソッドはコピーを支援するだけでコピーそのものは各派生クラスの同メソッドが自力で行っています.
(※フィールド変数があまりにも多いようでしたら関連する要素ごとに
集合型変数やオブジェクトにまとめた方がよいかもしれません)
>>64 文字列全体を調べる場合はLeadBytes変数を使って自分で判定する方が速度では有利かもしれません.
またLeadBytes変数やByteType関数を使うと日本以外で2バイト文字を使う国に移植する場合に
ソースコードをいじらなくて済むメリットがあります.
(『そんなのあり得ない!』,って思うかもしれませんが
今,勤め先で開発しているDelphi製アプリケーションに韓国語版の話が来ています)
>>73 アドレス00000000と言うことですので,
宣言したオブジェクト変数の実体(インスタンス)を作っていないのかもしれません.
たとえばTNantokaクラスのフィールド変数FNantokaを宣言したものの
FNantoka := TNantoka.Create を実行する前に FNantokaのプロパティを参照したりメソッドを実行したのかも…と.
厨な質問でスマン
Delphiでコンパイルしたファイルのアイコンってどうやって変換するんだ?
色んなツール試してみたが「アイコン以外のリソースを含むファイルは書き換えられません。」て出るんだよ・・・
つまらん質問、そして板違いなのかもしれんが誰か教えてくれ、頼む。
ResourceHackerを使うか、
素直にプロジェクトオプションで最初からアイコンを用意しておく。
>>84 変えられるハズだがなぁ。
オレは「KH IconRewrite98」っツールを使ってるけど。
…って思ってちょっとやってみたら、
UPXで圧縮したのはダメだった…。
もしかして関係あるアルカ?
>>86 Windows全般のキーワードなのですか。
なんだかややこしそうですが、少しずつ覚えていくことにします。
ありがとうございました。
>>81 CとWin32APIでアプリケーション作ろうとすれば
否応なしに目にすることになる。
APIの学び方について簡単に解説してもらえませんか?
DelWikiのFAQに掲載したいと思います。
あ、気楽にお願いします。
後で何度でも修正できるWikiですから・・・
だからあまり信用出来ないんだよなぁ
初心者の質問とその回答以外は他所でやんなさい
>>83 ありがとうございます。バカでした。
×ListA.Create;
○ListA := TMyList.Create;
95 :
デフォルトの名無しさん:05/01/07 16:56:24
はじめまして。
Label1〜5を使うとして、FormatDateTimeで取得したHH:mm:ssをLabelに出力したのですが、
これを取り込んでLabel2〜4に順に現在の時間、5分後、10分後、15分後の時間(文字列として固定する)を
表示させたいと思っています。
どうすればいいのでしょうか。ご教示のほど、よろしくお願い致します。
96 :
デフォルトの名無しさん:05/01/07 16:59:17
Label2〜5の間違いです。
dt := Now; // 現在
dt := dt + 1/24; // 1時間後
dt := dt + 1/(24*60); 1分後
98 :
デフォルトの名無しさん:05/01/07 17:40:35
>>97 ありがとうございます。
例えばその1時間後にタイマーを鳴らしたい場合、どうすればいいのでしょうか。
ググってみたんですが混乱してしまい・・・
99 :
デフォルトの名無しさん:05/01/07 17:41:40
もう1点。
>>97 dtはintegerでしょうか。
>>98 TTimer使え
Timer1.Interval := 3600 * 1000;
>>99 dt: TDateTime;
>>100 今Delphiが入っていないPCからなのでテストできず申し訳ないのですが、
Timer1.interval := 3600 * 1000;
とwavを組み合わせるにはどうすればいいのでしょうか。
初心者で本当に申し訳ありません。。
Timerで一時間も待たせるとかなりズレが起きる予感。
10秒ごとに実行させて時間の差を求めてやったほうがいい予感。
>>102 方法はいくらでもある。というかそれくらいならしらべr
>Timerで一時間も待たせるとかなりズレが起きる予感。
その根拠は?
メッセージを処理するまでのタイムラグだとしたら
10秒よりはるかに少ないが。
>>104 なんでそんなに強気でかかるんだよ。。
精神的にもそっちのほうがいいと思うんだが・・。
意味不明
TTimer で十分
漏れも103の意見に賛成なんだが・・。
例えばインターバルを1ミリ秒にセットして
OnTimerイベントに、1ミリ秒以上かかるような処理を書くと
おもむろにその分づつ時間がずれていく・・。
そんなTimerに信頼が置けるか?
>>104 WM_TIMERそのものの精度が当てにならないのは常識じゃないか?
>例えばインターバルを1ミリ秒にセットして
ありえない!
TTimer の分解能は約40msだよ。1時間で40ミリ秒ずれることに何の問題が
ある。
>>103 の方法は最大10秒もずれるし、無駄な処理が多い。
> WM_TIMERそのものの精度が当てにならないのは常識じゃないか?
「精度」の意味が分かってないのね。
1回のタイムアップで最大約40ミリ秒ずれる場合、1時間の計測で何が不満なの?
お前らカップラーメンとかなめ過ぎ。
やっぱ時間計測はリアルタイムOSじゃないとな。
マインスイーパのあの四角いマスってなにで出来てんの?
まさかボタンを並べてるわけじゃないよね・・
ボタンじゃなくて自分で描いてるんだろ。
左上を白っぽく、右下を黒っぽくすれば出っ張ってるように見える。
OnMouseDownでクリックされた座標からどのボタンが押されたかを割り出す。
>>116 メモリアドレスが連続しているほうが速いから。
hoge[]のアドレス調べてみろ。遅いほうはアドレスバラバラだから。
そんなコード書いたらキャッシュ効率が恐ろしく悪くなる。
>>117 CPUによって速度が逆転してる理由は?
配列のサイズが約400kbだから一次キャッシュに収まれば速いし収まらなければ遅いと予想。
CPUごとの一次キャッシュサイズ調べてみたら。そこらへんは良く知らない。
120 :
デフォルトの名無しさん:05/01/08 20:38:25
'C:\xxx\yyy\zzz'
これから'zzz'を抜き出すにはどうしたらいいですか?
123 :
120:05/01/08 20:56:56
ケツ拭いたりマンコに突っ込んだりした指で食い物つかんでも平気なら好きにするがいいさ。
( ゚Д゚) ?
126 :
120:05/01/09 03:43:30
>>124 逝ってる意味が分からない。
既知害ですか?
127 :
デフォルトの名無しさん:05/01/09 03:46:02
今日からDelphi6を使い始めたんですが、「;」を記述しているにもかかわらず、コンパイル時に以下のエラーが出ます。
[エラー] Unit1.pas(50): 演算子またはセミコロン (';') が必要です
[致命的エラー] Project1.dpr(5): 'Unit1.pas' ユニットはコンパイルできませんでした
なぜでしょうか・・・?
あなたのハードディスクの中身を透視できれば多分わかるのだと思うのだけど。
一行前の行にセミコロンがないんじゃないの?
130 :
デフォルトの名無しさん:05/01/09 04:29:24
>>127 残念ながら私はエスパーではないのであなたが書いたソースが理解できません
131 :
127:05/01/09 04:33:27
>>129 そのとおりですた・・・orz
すみませんありがとうございます。
129氏は冴えてるね
134 :
127:05/01/09 05:04:25
しかし、なんかコンパイルのたびに間違っていない行で止まりますね。
何もしないでもう一回コンパイルを実行したらうまくいったり、
その行をもう一度書き直すとうまくいったりします。
とくに最後の行でよく止まります。なんででしょうか・・・?
自演だろ
セミコロンうんぬんのエラーは文法的にどっかおかしいと出る
必ずしもエラー発生行の手前とは限らない
137 :
127:05/01/09 05:54:23
そうなのですか・・・。
いまDelphiでググって出てきたユーザーさんが開いているHPのチュートリアルを
やっているところなんです。
そのサイトに記述してあるとおりに自分でDelphiに記述してもエラー(というか止まる)が出るので
サイトのほうからコピペしてきてコンパイルするとうまくいったりします。
もちろん記述に間違いはなかったのですが・・・。
>>137 よほど自信があるみたいだが、お前の目と手の精度がダメダメである確率は100%。
>>137 セミコロンや、begin、end の過不足はソースを上から下へ検査して
いって矛盾が発生した時点でエラー発生となるから、入れ忘れたり
入れすぎた場所より後ろで発生するケースは多いよ。
if (hogehoge) then begin
・・・・・・・・;
・・・・・・・・;
end else
・・・・・・・・;
こんなif文書いたときなんかは要注意。
if文がネストしてる中にこういうのがあると間違えやすいから
140 :
デフォルトの名無しさん:05/01/09 12:32:24
TComponent を継承してクラス TMyComponent を作るときコンストラクタの引数が TComponent
と異なる場合 override 指定するとコンパイルエラーになります(マニュアルにもそう書いてあ
る)。
ところが内部にオブジェクト変数(以下の例では FCollection)を持ち、それをコンストラク
タで生成する場合は override 指定しなければならないという説明が他の解説書(服部誠著
「Delphi2.0 コンポーネントセット」)にあり、困惑しています。以下の例では override 指定
しなくても(したくても上に述べた理由で、できない^^;)一応動いていますが、ほんとにこれで
いいのでしょうか?
TMyComponent = class(TComponent)
private
FCollection: TCollection;
public
constructor Create(AOwner: TComponent;
ItemClass: TCollectionItemClass);
・・・・・・・・・・・・・・・・・
published
property Collection: TCollection read FCollection write FCollection;
end;
constructor TMyComponent.Create(AOwner: TComponent;
ItemClass: TCollectionItemClass);
begin
inherited Create(AOwner);
FCollection := TCollection.Create(ItemClass);
end;
constructor Create(AOwner: TComponent); override;
property ItemClass: TCollectionItemClass;
にしとけ。親のと異なるconstructorはoverrideできない。
TmyCompo = class(TComponent)
constructor
constructor TMyComponent.Create(AOwner: TComponent;
ItemClass: TCollectionItemClass);
でやった場合、コンポーネントを登録したときにおかしくなる。
フォームなんかに貼り付けて実行した場合
TMyComponent.Createが呼ばれずにTComponent.Createが呼ばれて
ItemClassの値がうまくセットされないはず。
>>137みたいなやつは
自分が初心者であることに気づいていない。
初心者ほど自信満々で、すぐコンパイラを疑う。
100%お前が間違ってるんだから、
分かるまでソースを見直せ。
コピペで動くのに、コンパイラを疑うのは100年早いってことだよな
146 :
デフォルトの名無しさん:05/01/09 13:36:13
ふむ。けど、コンパイラが原因かどうかは解らないけれど不思議な現象が出る事有り。
今回の件は、論議する価値無しだけどね。
>論議
馬鹿なのか?
>>140 > TComponent を継承してクラス TMyComponent を作るとき
単にクラスとして使うのならとくに変な使い方をしない限り問題はないだろう。
この場合 constructor を新規に作成したことになるから
>>143 の指摘通りコンポーネント
としてインストールしても利用出来ない。
149 :
デフォルトの名無しさん:05/01/09 13:53:38
150 :
sage:05/01/09 13:58:22
これからDelphiインストしようと思います
踏み込んでもいいですか?
雑談は雑談スレで
152 :
デフォルトの名無しさん:05/01/09 14:01:37
>>146 >不思議な現象が出る事有り
どんな現象?
>>146みたいなやつは
自分が初心者であることに気づいていない。
初心者ほど自信満々で、すぐ不思議な現象にしてしまう。
100%お前が間違ってるんだから、
分かるまでソースを見直せ。
内部エラー:L????
155 :
デフォルトの名無しさん:05/01/09 15:03:24
>>152 関係無い所を変更してコンパイルするとエラーした。
filelistbox1の中のファイルを削除して
i:=filelistbox1.ItemIndex;
とするとiには0しか入らない
しかしこれで以前は正常な値が代入されていた
むしろこちらの方が不思議?
filelistbox1.ItemIndexの値が何時まで
保持されているかは不定?
Delphi6既知のバグは2つ程判明したけれど
ほんとに解るまでは大変ですよ。だから
>>153さんよ!
あんたの次元じゃないのさ。
155は典型的な初心者w
157 :
デフォルトの名無しさん:05/01/09 15:35:13
> 保持されているかは不定?
保持されていないよ。要求がある都度見に行く。そこが思い違い。
どんな凄い現象かと思えば…
ここは初心者がええかっこしたがるスレですから
かわいいじゃん
162 :
デフォルトの名無しさん:05/01/09 16:36:46
stringをcharに入れるにはどうすればいいですか?
c := s[1];
PCharなら
p := PChar(s); // or @s[1];
c : array[0..255] of char;
str : string;
str := 'abcdefghijklmn';
for i := 0 to length(str) do
c[i] := str[i];
長い場合は、ループでひとつひとつ入れるのですか?
StrCopy(c, str[1]);
Move(str[1], c, Length(str));
ウインドウのハンドル?が変わった瞬間に何か動作をさせたいんですけど
どうすれば良いのでしょうか。例えばIEのウインドウをアクティブにした瞬間に
「Google - Microsoft Internet Explorer」みたいな感じで文字を表示させたいと
思っています。ウインドウのハンドルは取得できたのですが、取得するタイミング
がうまくいきません(;´Д`)
OnActivateイベントに記述するとか
ウィンドウがアクティブになるとハンドルが変わるの?
フォアグラウンドタスクの変更を検出したいんだろ
Delphiのソースコード説明一覧が載ってるサイトはないでしょうか?
皆さんレスありがとうございます。
>>169さんの言っている通りの事をやりたいと思ってますた。
グローバルストリングにすべき文字列を間違った部分で宣言してました。
変えてみたらうまく動作しますた(;´Д`)
どうもお騒がせしました。
そんなに簡単とは思われないけど > フォアグラウンドタスクの変更を検出
FormのOnCreate時ってまだForm自体は作られていないの?
Formのサイズを変更する命令を発行してるのにサイズが変わらないときがあるんだけど・・
フックすりゃいいじゃん。簡単かどうか知らんけど
すいません。自己解決しました。
勘違いが原因だったようです。
177 :
デフォルトの名無しさん:05/01/09 22:10:36
>>158 >保持されていないよ。要求がある都度見に行く。そこが思い違い。
ん。確かに。しかしどこに読みに行くのでしょう?
ディスクにはアクセスしないから多分・・それで気が付いて・・
それにしても動いていたのは確かだし、再コンパイル後
エラーした為、処理の順序を入れ替えたので動くのは当然だし。
文法エラーはちゃんと出るんだけどなぁ・・・・
> しかしどこに読みに行くのでしょう?
そりゃ、FileListBox のコントロールにAPIをつかって読みにいくのさ。
ListBox はウィンドウズのコントロールだからね
>>170 意味分からん。
何のために何の情報が欲しいのかもっと具体的に書け。
>>170 意味分からん。
何のために何の情報が欲しいのかもっと具体的に書け。
>>170 意味分からん。
何のために何の情報が欲しいのかもっと具体的に書け。
182 :
デフォルトの名無しさん:05/01/10 01:51:02
uho
>>170 意味分からん。
何のために何の情報が欲しいのかもっと具体的に書け。
>>170 ソースコード自体を見ろ。結局それが一番勉強になる。
Delphiって凄いね。。俺みたいな低脳でもプログラムが作れてしまうなんて。
ビジュアルプログラミングツールまじすげすげすげヴォー
187 :
デフォルトの名無しさん:05/01/10 09:14:39
日本語Delphi6をダウソしたんですけど、表作成機能が英語なのはなんでですか?
題名とか日本語文字化けします。
そんなことないけど?
189 :
187:05/01/10 11:04:30
>>188 ActiveXのチャートコンポーネントを配置して右クリック>Wizard...を選ぶと全部英語なのですが。
190 :
187:05/01/10 11:20:26
もちろんアップデートは入れてるよね?
ActiveXのチャートコンポーネントが英語版なんでは
>>177 メモリに読みに行くにきまってんじゃん。
スワップアウトしてたらハードディスクになるけど。
194 :
187:05/01/10 12:09:16
>>191 よくわからんですが、Delphiのフリー版のやつです。
ちょっと確認してきます。
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
ファイルが使用中かどうか確認する方法を教えてください。D6パー
とりあえずオープンしてみて成功したら少なくとも排他的には使用中でないことが分かる。
ああ、便乗して質問させてもらおう・・
ファイルサイズを得たいのですが(必要なのはファイルサイズだけ)
WindowsAPIのGetFileSize関数やDelphiの付属の関数やTFileStreamなどをとっても
必ず一度ファイルを開く必要があります。(ファイルハンドルを得るため等)
そのため、使用中のファイルなどは場合によってはオープンに失敗して関数が失敗することが起こってしまいます。
ファイルサイズを求めたいだけなので、そういう使用中かどうかなどは関係ないように思うのですが
もっと簡単に(できればファイルを開く処理を使わずに)ファイルサイズを得る方法ってないですか?
FindFirstとか
>>198 TSearchRec型の変数を使う。
C:\Windows以下のファイル名とサイズを列挙するサンプル
procedure TForm1.BitBtn1Click(Sender: TObject);
var
F: TSearchRec;
RetValue: Integer;
begin
ListBox1.Clear;
RetValue := FindFirst('C:\windows\*.*', faAnyFile, F);
try
while RetValue = 0 do
begin
ListBox1.Items.Add(Format('%s(%dByte)', [F.Name, F.Size]));
RetValue := FindNext(F);
end;
finally
FindClose(F);
end;
end;
やはりそれしか手はないのか
某のことだからGetFileSize(const FileName: string;var FileSize: Cardinal): Boolean;
みたいな関数でも用意しておいてくれないかなぁと思ったが・・
FindFirstを利用して自分で作るか・・。
function FileInfo(FileName: string): TSearchRec;
var f: TSearchRec;
begin
Win32Check(FindFirst(FileName, faAnyFile, f) <> 0);
Result := f;
FindClose(f);
end;
FindFirstでのファイルサイズは integerだから2G以上のファイルの場合は
別の手を考えないといけないよ。
Delphi7のアップデートってありますか?
>>204 Update1と非公式パッチがありますけど・・・
D8のアップデートはまだか
開発環境でWinの最新パッチ当てられないのは問題だろ
>>207 .NET 1.1 SP1 対策パッチなら、とっくに出てますけど。
54でも質問しましたが、GUIを使ったジャンケンプログラムを作っているんですが、
Jpgの表示は可能ですか?
可能です
ヘルプは見ない主義なのかな?
TImageでもつかっとけ
>>206 すみませんがもう少し詳しくお願いできませんか?
>>215 あまりしつこいと、「それすら(略)なら諦めろ」ってレスが来ちゃうぞ。
もっと具体的に「○○が分からない」ぐらいまで、自分でやってからに
した方が良いと思う。
>>216 すみませんでした。もう時間がなかったのでつい言ってしまいました。
始めに、ボタン3つ(ぐーちょきぱー)作って押すと画像を出るようにしたいのですが
ひとつずつ異なる画像を表示させることができません。(ボタン1にAという画像を表示
させる、ボタン2にBを表示させたいのにAが出てきてしまう)
本当に超初心者なので質問するのも恥ずかしいのですが、教えてくださると大変
助かります。
218です。解決できました。次はコンピューターにランダムにぐーちょきぱーを
出させるようにします。また質問させてください。 無駄レス本当にごめんなさい。
グーちょきパーをランダムに表示させるやり方がわかりません。X=random(3)というのを使うらしいのですが
どうやったらいいかわかりません。教えてください。 今日はもう寝ることにします。
>>218 いや、「卑屈になれ」と言いたい訳じゃないのだが…。
あと、「該当のソース」をちょっとでもいいから見せるとレスが付きやすいかと。
個人的にはもっと「いじり倒してから」人に聞いた方がいいかと思うけど。
ありゃ、続きがあったのか。218しか見てなかった。
うーん。
>>222 220があってもなくても言ってることは正しいと思うぞ。同意だ。
もう少し具体的に何がワカランのか書け。
Delphi2005になって気づいたんだが"resourcestring"って昔からあったっけ?
偉い人教えて
少なくとも6には既にある
もっと前は忘れた
そうなんだ。
教えてくれてありがとう。
ライブラリソース見る人は自ずといろんなこと気づくが
見もしないやつはずぅっと教えて君のままだな
Personalのやつは見れない。
あと自分でできるやつは書き込まないから目立たない。
何が分からないのか分かってるようなら自分で調べられるからね〜
要するにそういう人は初心者ではないわけで
ある程度やむを得ないかもしれないけど
早くまともな答が欲しかったら
恥ずかしがらずに自分のソースをうpしる>初心者
初心者スレで玄人気取りとは恥ずかしい奴らだな・・・
きちんと要点をまとめて物を尋ねられるかは人間関係の
素養の問題で、素人玄人は関係ないと思う。。。
>>225 はい。わかる範囲具体的にいいます。
procedure TForm1.btnGuClick(Sender: TObject);
begin
Image2.Picture.LoadFromFile('./gu.bmp');
end;
という風にボタンを押すと画像が出るようにしました。後は、コンピュータ
相手にじゃんけんをしたいので、コンピュータがランダムにグーチョキパーを出すようにしたいのですが、
やり方がわかりません。
お前が
>>220で書いたX=random(3)がそのまんま答えだろ。
>>234 グー、チョキ、パーのグラフィックを
あらかじめ3つのImageコントロールへ入れておいて
ImageコントロールのVisibleプロパティを操作した方が楽でないかい?
プログラミングたのし〜〜〜〜
gu1.bmp〜gu3.bmpまで3種類あって、グー用のイメージをランダムに出したいんだろ
#
つーかその度にロードするのはヨクナイ
ボタンクリック時
※あらかじめ3つのイメージを同じ位置に重ねて配置しておく
procedure TForm1.btnGuClick(Sender: TObject);
begin
Image1.Visible := True; //グー
Image2.Visible := False; //チョキ
Image3.Visible := False; //パー
end;
↑↑GuClickとか固定じゃなく、3つのボタンクリックを同じイベントに充てて
Senderを見て振り分けるほうが良さげ
ジャンケンするとき ※FormCreateなどでRandomizeをしておく事
var
iCom: Integer;
begin
iCom := Random(3); // iComの値は 0 1 2 のどれか
case iCom of
0: //グーと仮定 判定して勝ち負けを決める
1: //チョキと仮定 ..
2: //パーと仮定 ..
end;
//..判定結果の表示
end;
SHBrowseForFolderで.ulFlagsに
BIF_RETURNONLYFSDIRS or BIF_NEWDIALOGSTYLEを指定したとき
なぜかBIF_RETURNONLYFSDIRSが無効(マイコンピュータなどが選択できてしまう)になってしまいます
さらに呼び出したときの表示位置が必ず画面中央になってしまう
解決法はありますか?
OLEInitializeで初期化はしてます
WinAPI スレにいけば
Delphi7でコンパイルしたユニットをDelphi5で使う方法ってないでしょうか?
SSE2使いたくてD7 Architect Trialを落としたけど、コンパイルしたdcuは
Delphi5で通らない……。
初心者でもないんだが
今、SDKソースをDelphi用に書き直して(DirectXのDirectShow関係)色々やってるんだが
特定のインターフェースメソッドでIDE上デバッグだと例外が起きる
でもデバッグでは無く、直接実行だと正常に動く
ちなみにDelpi7(Ent)。6(Ent)でも同じく例外が起きる
浮動小数演算がなんとかかんとか・・
実数計算なんかなにもしてないし、どこでエラーが起きるのかブレークかけて
特定しようにもインターフェースメソッド時に例外なので追いかけられない
インターフェースが絡むとデバッガ信用できないのかな?
>>242 *.pasならともかく、*.dcuでは同じバージョンではない限りむりぽ。
その前にトライアルの生成物を他で副次利用しようとしてるのに、平然と聞いちゃうあなた!
メディアプレーヤーでasfファイルを再生出来る?
Del7Proなんだけど、誰か教えて。
つか、試してみたらどうよ?
ファイルと2分もあればできるだろ。
すまん。書き方が悪かった。
日本語勉強しくる。
再生出来なかったのだよ。
>>248 2分でできるといった責任もあるから試してみたぞ。
再生できたよ。
そういやTMediaPlayerなんてのあったんだよな
Del3あたりの時いろいろ遊んではみたが
D7だがソースみると相変わらずmciSendCommand使ってるな
つまり再生できるかどうかは各マシンの環境によるって事だ
つーかActiveMovie取り込んだ方が手っ取り早い。当然稼働環境に無ければ再生出来ない
俺はDirectShow組み込んでるけどな
そうそう言っておくが、単にasfといっても(wmvでも)種類が分かれるからな
ローカルファイルなのかネットワーク越しなのか、認証が必要なものなのか・・・
ActiveMovieと上に書いたがそれも既にWindowsメディアプレーヤー6.4の物だし
今はMediaFormatSDK9以降のものが新しい
そのエンコ物を6.4では、そのままでは再生出来ない
C:\を*.asfで検索したらC:\Program Files\Movie Maker\sample.asfという
いかにもサンプルっぽいファイルがあったのでそれで試した。
>>243 例外を無視っとくようにIDEを設定しろ。
自分以外のモジュールの例外もIDEは拾ってしまうからね。
またはおまじないコードを設定しておくとか。
>254 サンクス でも駄目みたい、やりました。
インターフェースメソッドの戻り値はHRESULTなんだが
戻り値を返さないで例外が起きる。
他にも気味の悪いのがある。例外箇所とは別な所なんだけど
ここも戻り値はHRESULTなんだが、
この箇所にブレークして戻り値見ると、不正な値。←これがデバッガ上
不正値なら、処理を抜けてインターフェース解放としてるのだけれども、
直実行だとちゃんと動く。
デバッガ上では動かない・・・うーん・・・
254が言ってるのは例外が発生してIDE=デバッガに戻って一時的に止まってるだけなのに
例外でプログラムが終了したと勘違いしてるんじゃないかってこと。
直接実行した場合はexceptされてそのまま実行されてるから分からないだけで。
止まった状態で"実行"押せば処理が再開されるよ。
という勘違いをしていないとしたらとりあえず最適化OFFにして
範囲チェックその他をONにして地道にデバッグするしかないね。
interfaceとIDEの相性が悪いというのは自分は聞いたことないな。
ビルドによってインターフェース先のdllやocxを生成する訳じゃないから
Set8087CWは全く関係無い話だな
259 :
246:05/01/13 08:15:43
>>249 ありがとう。こっちの環境の何かがおかしいと言うことか。
>>250 ActiveMovie、DirectShowか。ぐぐって見る。
ここは粘着と健忘症の巣だな
評論家は談話室へどうぞ
MemoやListBoxは書かれてる文字がたくさんあると一定以上送受信できませんよね^^;
この場合どうすればいいんでしょうか。。変な質問ですみません;;
263 :
デフォルトの名無しさん:05/01/13 09:46:27
TeamSourceの質問ってここに書いても良いですか?
264 :
デフォルトの名無しさん:05/01/13 09:52:02
>>193 >メモリに読みに行くにきまってんじゃん。
>スワップアウトしてたらハードディスクになるけど。
それで、入れ替えたら動いた。不思議なのは、なんで
これまで問題が無かったかと言う事。
まだ有ります。関係無い所を変更したら別のところの表示が
変になり、そこを変更再コンパイル、元に戻してコンパイル
すると思ったとうりの表示に・・・・・・
こう言うの初心者には混乱の基だし何がなんだか解らない。
バグが有っても動くし無くても動かない!摩訶不思議なDelphi。
OpenGLではSet8087CWで浮動小数例外をマスクしないといけないのだが、DirectXはどうなんだろ?
>>264 抽象的なことばかり言ってないで具体例を出してくれないと。
>>264 >バグが有っても動くし無くても動かない!摩訶不思議なDelphi。
たんに知識不足。いずれにしても FileListBox は Win16 の遺物なので使わないように
>>262 > MemoやListBoxは書かれてる文字がたくさんあると一定以上送受信できませんよね^^;
送信? なんのこっちゃ
269 :
デフォルトの名無しさん:05/01/13 10:40:58
>>267 ありがとう御座います。FileListBoxに固執するのは
ShelltreeViewが他の言語では使えないかもしれないと
思ったからです。Delphiでパスカルで記述した部分は
ちゃんと動くので、出来ればシステムに依存する部分を
減らせればすっきりすると思います。
270 :
デフォルトの名無しさん:05/01/13 15:19:08
172.16.1.54 の IPアドレスを持つパソコンでのマスク値が 255.255.255.0 の
場合の ネットワークアドレスは何か、そのネットワークに接続されるアドレスの最小値
は何か? 最大値は何か?(ブロードキャスト除く) ブロードキャストアドレスは?
>>270 全くDelphiと関係ない
ネットワークアドレス 172.16.1.0
最小 172.16.1.1
最大 172.16.1.254
ブロードキャストアドレス 172.16.1.255
任意の形のウインドウを作りにはリージョンを使うってよく見るのですが、
ボタンとかの配置とかってどうすればいいのでしょうか?
ポトペタじゃなくて、createで動的に作っていくのでしょう?
くり抜かれる場所にぽとぺたしておけばいつもと同じ
>269
システムに依存ってさ、Windosユニット使ってりゃシステム依存なわけだが
ウィンドウズのコントロールとVCLの独自コントロールの区別がつかないんだろう
>>269の言ってる意味がよくわからない
他の言語で使えるかどうかってのは?DLL化してC++とかから利用出来るかの懸念?
それならエクスポート引数の話であって、処理が何なのかという事は関係無い。
それともShellTreeViewが他のマシンで動くか分からないという懸念?
シェルは、SH***、IShell***、ItemIDListなどを使っている。
これらはWindows95以降なら動く。動かないのはWin3.1以前のもの
今時Win3.1を使ってる輩はまず居ない。
一歩譲ってそれを考慮するとしたら、16ビットVerのDelphi1を使う事になる。
>>268 説明不足すみません;;
クライアントソケットからサーバソケット(或いはその逆)にSendTextで送信した時
の事です。
>>278 FileListBox も ShellTreeView もウィンドウズのコントロールなんだよ
10年くらい前はWindows3.1でBorlandC++(当時4.0)使ってたな
CDメディアが台頭してきてSCSIからIDEに変わってE-IDEに変わる頃だ
当時はavi動画とか見て劇的だった
Win95が出回る頃は、WinGやWaveMixなんかが出てきてDirectXの基はこの頃だな
インターネットも当時モデム14400で電話代気にしながらチャットにはまってた頃だ
もう10年か・・・
>277
鮮度テキストなんか使うからだろ
自分でバッファとって船頭バッファを複数回繰り返せ
俺はWinGSDKのサンプルにあった256色ディザのハーフトーンなんちゃらとかいうのを今でも使っている。
厳密には誤差拡散ディザでは無く、ハイキューブリック式アルゴリズムだが
画像表示するアプリ書くとき、256環境時はこれでディザする
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
>>277 クライアントもサーバーも一回の受信イベントで全部受信できるとは限らんぞ
285 :
デフォルトの名無しさん:05/01/13 21:23:03
他のスレッドでは書き込めない超低レベルの質問を勇気を持って書き込みます。
RichEditが2つあって、一方のRichEditに文を書いて改行するたびに、もう一方の
RichEditに同じものを表示させたいのですが、どうすればよいでしょうか。
なるほど〜。ありがとうございます。
今までバッファとった事とかないのでどこかを参考にしながらやってみたいと思います。
今リモートファイルマネージャを作ってるところで、ファイルを実行させたり削除したりと
いうところまでは何とかできるようになりました^^;
そこでシステムフォルダみたいにファイル数(文字数)が多いフォルダをを取得した時に
途中でリストが切れてたのでなんでじゃあと思ったらそういう事だったんですね。
聞いてみて本当に良かったです。助言ありがとうございます!
>>285 元になるricheditのonkeyupイベントに次のような処理を書く。
procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = 13 then RichEdit2.Lines := RichEdit1.Lines;
end;
>ファイルを実行させたり削除したりと.....何とかできるようになりました
要は独自文字列を受け取ったりして何かをするんでしょ(これを独自プロトコルと言う)
コマンド文字列がどのくらいの文字長あるのか知らないが、
低速な環境なら最初の何文字かしか受け取らないでタイムアウトする場合もある。
何とかできると言うが、たまたま動いてるだけで、ソケット通信としては堅牢とは言えない
まぁSendTextが何をやってるかソース見て、真似て、理解すれば、どんな大きなファイルでも受け渡し出来る
DelphiとC++builderってどっちが超初心者向けなの?
言語文法が違うだけでどっちもさほど川欄
どんな開発ツールでも込み入ったことやるには超初心者には直ぐに壁に当たる
壁の向こう
壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁
俺
292 :
デフォルトの名無しさん:05/01/13 22:49:53
すいません 質問させて頂きます。
Yahoo!メッセンジャーや,MSNメッセンジャーなどのクライアントを作りたいと思っています。
具体的にYahoo!メッセンジャーや,MSNメッセンジャーなどのサーバーに接続するにはどのようにしたらいいでしょうか?
どなたか 助言お願いします。
んなこたねぇだろ
>295
どういう所が?
言語仕様が汚くVCLとの相性も悪いから
初心者に向いているとは言いがたい
マイナーな言語が初心者向きだと?
メジャーが好きならVBでもやっとけ。
そこでPythonですよ。
VBは難い
標準のコンポーネントで事足りる程度ならいいけどデフォルト動作をオーバーライドしたい時や、直接ハンドル使ってなんやかんやしたい時は相当な労力を要する。
VCLも割とガチガチに思えるTWinControlでも、オーバーライドする労力はVBより容易い
>>294 ありがとうございます。
Yahooメッセンジャーのはないんでしょうか?;;
>>304 ありがとうございます。
このサイトは知ってるんですが.....
Delphiでの接続の仕方がわからないんです....
具体的にどのようなコンポーネントを使ったらいいかとか、コードなどがわからないんです。
Delphi製のYahooChat用のクライアントは YMChat
ttp://www.the21world.jp/ などがあるんですが こんな感じのものを作りたいんです。
せっかくサイトを教えて頂いたのにすいません orz
306 :
デフォルトの名無しさん:05/01/14 02:10:38
System.Xml.XmlTextReaderに似た使い勝手のXMLライブラリってどれですか?
307 :
名無し募集中。。。:05/01/14 10:16:22
はじめまし
Label.captionに任意の文字を表示したいのですが
表示する文字が場合によって1文字だったり50文字だったりするので
またLabelの横にEditを置いているのでLabelに表示する文字列が長すぎると
すべて表示
すいません途中で送信してしまいました
>>307はスルーでお願いします
TLabel TEdit というようにコンポーネントを配置して
Label.captionに任意の文字を表示したいのですが
表示する文字が場合によって1文字だったり50文字だったりするので
文字数が長いと全て表示されなくなり
またTEditにかかってしまい見栄えが悪くなります
ラベルに表示する文字列の長さは決まってないので
予め文字列最大長ぶんだけ確保するということができません
何かいい方法はないでしょうか?
そんな場合は Label の横に何も配置しない。Edit は下に配置する
310 :
デフォルトの名無しさん:05/01/14 10:44:38
みんな、どんな本で勉強してる?
マイナーなのか、ほとんど参考書が売ってない・・・orz
やっぱVBかC#に乗り換えるかな。しかし金がない・・・orz
>>309 素早いレスありがとうございます
>そんな場合は Label の横に何も配置しない。Edit は下に配置する
やはりその方法しかないんですかね。
デザインが変わるから出来ればやりたくないんですが・・・・
とりあえず必死にヘルプよんでAutosizeやらAnchorsやらAlignmentやらを
色々いじってみます。
あとDelphian Worldも見て何かコンポーネントないか探してみます
駄目ならFormの幅と横に配置してあるTEditの幅等を計算して
ゴリゴリForm.Canvas.Textoutで描画するしかないかな・・・
>>308 左右に幅があるならこんな方法もある
Label1.Left := Edit1.Left - Label1.Canvas.TextWidth(Label1.Caption);
文字列設定するたびに Edit の方を動かす方がよくないか
TLabeledEditを使うとか。
>>312-313 貴重なご意見感謝します
アプリ起動時に言語ファイルを読み込みそれに応じて
Label.Captionを設定するのですがデザインを日本語ありきで作っていたので
英語や中国語だと日本語に比べて文字数が増えるので
横に突き抜けてしまっていたのです
>>312さんの方法は勉強になりました
>>313さんの言うとおりEditを動かしたほうがよい場合(Editの幅が狭い場合)
もあると思うので用途によって使い分けていこうと思います
Labelに固執するなら、キャプションに割り当てる前に文字長カットすれば?
俺ならそんな箇所はラベルなんか使わず、ReadOnlyのEdit使うけどな
iLabelPosition := label1.Left + Label1.Width;
edit1.Left := iLabelPosition + ○; //○はLabelとEdit間のスペース幅
左右に余裕があるので上のようにEditを動かすようにしました
>>317 確かにReadOnly、Color := clBtnfaceあたりのTEdit使えば
表示されない部分はキーでスクロールすればいいから楽ですね
でも、とある方の「強い」要望でTLabel使わざるを得ないのです
「とある方」みたいな人がPMやSEな環境で仕事はしたくないな
左右の余裕を超えた文字列が入ると、
フォームにスクロールバーが出るワケだ。
そこでまた君は苦労するワケだ。
次はボタンの文字がはみ出しますという質問するに1000TButton
フォントサイズを1にすればダイジョブ
文字長見て適当に改行#13#10しちゃえば?
仕事なら仕様と確認して
マルチランゲージで作るなら余白多めにUI作るのは定石。
それは置いといて、VCLは日本語環境と非日本語環境でデフォルトのフォントサイズが異なるので、
1バイナリでやろうとするとスケーリングのバランスが悪くなる問題がある。
この問題を回避するには、スケーリングを制御するコードを書き足すか、
VCLのデフォルトフォントの初期化部分を書き換えると回避できるぽい。
超初心者にその助言は酷だな
相手が分からなそうだと思いつつ敢えて
>>324みたいな事言う人って酷いですぅ!
フサスレ見ればどういう連中がレス付けてるのか分かるだろ。
マルチランゲージで作るなら、
TForm.Scaled
は絶対falseにしとくこと。
>>327 ユーザ激減で残ったのは精鋭というか、カスというか、苦しむところだ
ファイルのプロパティを開くにはどうしたらいいのでしょう?
(エクスプローラで、ファイルを選択→右クリック→プロパティと同じもの)
Yahoo!メッセンジャー鯖に接続する具体的なコードはないんでしょうか。。orz
activexの取り込みで、メディアプレーヤーを取り込んだんだけど、
playとかfilenameとかの命令が無いんだけど。。。
メディアプレーヤー9とかだと、変更されているのか?
336 :
デフォルトの名無しさん:05/01/14 22:42:57
漏れは愚痴を言いながらも日曜プログラマとして
Delphiでツールを作り続けてまつ
Delphi7だけどね
const
ary: array[0..2] = ('A', 'B', 'C');
として、if 'A' in ary then ...のような評価式が出来るメソッドはありますか?
TStringListに格納してIndexOfはちょっと使いにくいので・・・
ansimatchstr
おお!!ありがとう!
下記のコードが今までベストと思っていたので本当に感謝してる!
const
ary: array[0..2] = ('A', 'B', 'C');
begin
s2 := 'B';
for s1 in ary do
if s1 = s2 then ShowMessage(s1);
end
そういう事だよ
.netならマッチングクラスと予想してクラスを見れば相応の関数が見つかる
でもDelphiだと、そこまでクラス化されてないから関数を知らない&気付かないで自分でコードを書いてしまう
> マッチングクラスと予想して
Delphi だって「文字列処理ルーチン」と予想してヘルプみるとすぐ見つかるけどね。
多次元配列の、2番目、3番目の添え字の最大値と最小値は、
どう求めればいいですか?
1番目はhighでいけるみたいだけど・・・
添字付けする方法は,MyMatrix[2,45] と MyMatrix[2][45]の 2 種類があります。
High(MyMatrix)
High(MyMatrix[Low(MyMatrix)])
345 :
デフォルトの名無しさん:05/01/15 13:17:10
今作っているアプリでメインフォーム以外でAlt+F4を押されると
プロセスが残ってしまいます。
Alt+F4を無効にするにはどうすればいいでしょうか?
>>345 フックしてAlt+F4来たらメッセージ捨てる
OnClose で Application.MainForm.Close;
プロセスをダイアログ代わりにするヤツ大杉。だめ設計の見本
>>348 Windowsってそうやらないとコールバック関数登録デキネーんだよ。
351 :
デフォルトの名無しさん:05/01/15 14:34:20
GroupBox内にEditやらRadioGroupやらが乗っかってる場合
GroupBox.enable := Falseにすると中の各コンポーネントも自動的に
Falseになる方法はないのでしょうか?
力技で
if Boolean(RadioGroup.ItemIndex) then
begin Edit1.Enable := True; Edit2.Enable := False; end
else
begin Edit2.Enable := False; Edit2.Enable := True; end
これはコンポーネント増えたらマンドクセ
GroupBox内のParent辺りを見て
for i := 0 to GroupBox内のコンポーネント数 do
begin obj[i].Enable := False end
なんて出来れば嬉しいのですが
procedure SetEnabledAll(Control: TWinControl; AEnabled: Boolean);
var
c: TControl;
i: Integer;
begin
Control.Enabled := AEnabled;
for i := 0 to Control.ControlCount-1 do
begin
c := Control.Controls[i];
if c is TWinControl then
SetEnabledAll(TWinControl(c), AEnabled)
else
c.Enabled := AEnabled
end;
end;
SetEnabledAll(RadioGroup1, not RadioGroup1.Enabled);
>>352 ヘルプ見てたらControlCountというプロパティ見つけたので
これ使えるなと思ってたら既に偉大なる先人が教えてくれた、感謝
しかも再起を使って入れ子にもバッチリ対応している、驚き
本当にありがとうございました
フォームが表示されて一度描画された直後に処理を記述するにはどうすればいいですか?
今はTimerで1秒後に処理していてカコワルイ・・・
356 :
デフォルトの名無しさん:05/01/15 16:15:39
すいません、あまりに初心者な質問なのですが
a := b := 10
なんてことは出来ないのですか?
コンパイラに「代入できない左(ry」と怒られます
代入は文であって式じゃないので無理
>>356 素直に
b := 10;
a := b;
とかやるしかないと思うよ。
うはwww更新しわすれてたwwwwwwおkkwwkkwkwk
あまり使わないフレーム使って凝ったの作ったんだけど
フレームってデストラクタ呼ばれないのな。Freeを明示して解決したがそれまでハマッタ
362 :
デフォルトの名無しさん:05/01/15 19:07:52
超初心者なのでお許しを。
Memo1.Lines.Add('text');
こうすると改行されるのですが、改行しない方法を教えてください。
memo1.lines.text := memo1.lines.text + 'text';
364 :
デフォルトの名無しさん:05/01/15 20:13:25
棒グラフ(横)をアニメーションさせるプログラムを作っています。
TimageとTimerを使ってなんとかそれらしきものは作れたんですが
少しちらつきなどがでてしまいます。
何か他にいい方法は無いでしょうか?
>>365 ヘルプから
DoubleBuffered 見てみるといいよ
単なる棒グラフなら、右側の□を描いてから左の■を描くようにするという方法もあるよ。
全部を消してから描くからチラツクのだからさ
ただ、数字を棒上に描き込むという場合は、これは使えないけどね
早速試してみたいと思います。
ありがとうございました。
370 :
デフォルトの名無しさん:05/01/16 12:08:22
>>193と他の人。
>メモリに読みに行くにきまってんじゃん。
>スワップアウトしてたらハードディスクになるけど。
そこなんですよ。どんな風にタイミング取ればいいのか?
APIとVCLは、解りません。知りたいとも思いません。
先日も不可解な現象がありました。PaintBoxの表示が微妙に変なので
書き換えてコンパイル、元に戻してコンパイルすると元に戻りました。
371 :
デフォルトの名無しさん:05/01/16 12:13:52
>>371 無事成功しました。
form1.DoubleBufferd := true にするだけで画面のちらつきがなくなりました。
>>367の方法については今調べているところです。
>>370 > APIとVCLは、解りません。知りたいとも思いません。
君の知りたいことはまさしくこれなんだが。
知りたくないのなら、質問しなければいい。
>>370 とりあえずソースを見せてよ。
そうしたら原因が分かるかもよ。
>>372 form1.DoubleBufferd := true
は、全体を描画するための、隠れビットマップを作成するから、負荷大。
だから、DoubleBufferdを使う時は丁度収まるサイズのパネルを使うのが一般的かな
>>375 ご親切にどうも。
負荷の事は気になってましたので助かります。
教えていただいたとおりパネルを使いたいとおもいます。
System.Random使わない乱数ルーチンってある?
複数の乱数列を同時にもてるようなの。
>377
??
>>377 独自の乱数を作ればいいジャマイカ
アルゴリズムの本でも嫁ばよかんべ
FAQ以外はろくな答えが返ってこないなここ・・・
しょぼい回答者しかいないときもあるさ
だ が そ れ が い い
フォーム上に配置された任意の画像にマウスカーソルが重なった時と
フォーム上に配置された任意の画像からマウスカーソルが離れた時、
イベント(画像の入れ替え)を発生させたいのですがどのようにすれば良いでしょうか。
384 :
デフォルトの名無しさん:05/01/16 22:24:34
短いサンプルプログラムがたくさん載ってある、超初心者向けの本を教えてください
>>383 procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Panel1.Color := clRed;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Panel1.Color := clWhite;
end;
こんな感じですか?
>383
OnEnter、OnExit。任意の位置ならOnMouseMoveで位置判断して処理する
イベントの無いコンポーネントなら継承コンポ作ってイベント公開すればいい
TWinControlの子孫ならpropertyをpublishedにするだけ。
すまん嘘ついた。OnEnter、OnExitはフォーカスだった
なのでまともな回答として、コンポーネントとして作るが。取りあえずTPanelで例
TMyPanel = class(TPanel)
private
{ Private 宣言 }
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
protected
{ Protected 宣言 }
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
public
{ Public 宣言 }
published
{ Published 宣言 }
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;
...
procedure TMyPanel.CMMouseEnter(var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
end;
procedure TMyPanel.CMMouseLeave(var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
end;
procedure TForm1.Check;
begin if img1=img2 then begin
Label3.Caption:='あいこ';
Exit
end;
if (img1 =1)and(img2=3)then begin
Label3.Caption := 'あなたの勝ち';
Exit
end;
if (img1=2)And(img2=1)then begin
Label3.Caption :='あなたの勝ち';
Exit
end;
if (img1=3)and(img2=2)then begin
Label3.Caption:='あなたの勝ち';
Exit
end;
Label3.Caption:='あなたの負け';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if state=False then begin
state:=True;
Label3.Caption:='じゃんけん'
end
else begin
Image2.Picture.LoadFromFile('./gu.bmp');
img2:=1;
state:=False;
check;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin if state=False then begin
state:=True;
Label3.Caption:='じゃんけん'
end
else begin
Image2.Picture.LoadFromFile('./choki.bmp');
img2:=2;
state:=False;
check;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if state=False then begin
state:=True;
Label3.Caption:='じゃんけん・・・'
end
else begin
Image2.Picture.LoadFromFile('./pa.bmp');
img2:=3;
state:=False;
check;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin Randomize;
img1:=Random(3)+1;
img2:=Random(3)+1;
State:=true
end;
end.
>>388-391までのプログラムですが、コンピューター側の画像が出ません。なにが問題かおしえてください。
refreshでは。
質問なんですがPos、もしくはAnsiPosで行を知ることができないでしょうか?
行を知る?
Memoのテキストか?
見つかった文字までの間にCRLFが幾つあるか数えれば?
>>393 やりたいことがいまいちよく分からんけど、
TStringListに入れて行数(Count)調べた方がいいのでは?
>>377 Mersenne Twister法は?
一応乱数列を入れ替えることが出来る。
BSDライセンスだが。
>>391 「いちいちファイルを読み込むな」って言われなかった?
>>399 まぁまぁ。
まずは「ひとまず完成」まで行かせてあげたら?
疑問はその後、湧いてきたら解決していけばいい。
前回ずれた回答して全く理解させられず
さらにまた同じ回答してるのが笑えるな。
それがDelスレクオリティ。
404 :
デフォルトの名無しさん:05/01/17 03:28:41
>>387 通りがかりの者ですが、Delphi-MLにもありましたけど、
CM_MOUSELEAVEは必ず発生するとは限りません。
この現象を回避するのにかなり労力を使ってます
再現方法の一例:
フォームを二つダブらせる、下フォームの上にこのパネルを配置
上フォームをアクティブにしてマウスカーソルをクリックしないで下フォームのパネル上に持ってくると
CM_MOUSEENTERそのまま元の位置にカーソルを戻すとCM_MOUSELEAVEは発生しません。
同じ問題は、TSpeedButtonでも見られたはず。(Xpスタイル適応してDelphi7で確認しました)
何かいい方法無いですかねぇ…。
大麻でマウス座標監視
>404
どういう事?、いま試したけど。アクティブなフォームじゃなくても正常だったよ
TPanelで試したが、TControlの子孫なら大丈夫そうだけど
構造上、タイマで調べるかフックで監視するかぐらいしか無いと思うぞ。
TSpeedButtonは、
CM_MOUSEENTER
CM_MOUSELEAVE
を捉えてなんかやってるから上手くやってあげないと駄目なだけで、
このメッセージをスルーしてるコンポなら、>387の通りで大丈夫なハズ
と言うよりSpeedButtonとかはFlatとかがあるから、イベント作るならややこしいかも
とは言え、XPMan使うとおかしいのはVCLが浅はかと思うけどね
Delphiの「グリットに合わせる」は標準で8*8ですけど
VCやVBの標準値がいくつかわかる方いますか?
>>409 どうでもいいかもしれないけど「わかる方いますか?」って聞き方は微妙だと思う。
411 :
デフォルトの名無しさん:05/01/17 11:33:18
他の方が作ったコンポーネントを利用させてもらおうと思ったら
コンパイル時にTDB,TDBGridが見つからないと言われました。
ネットやDelphiの中を探したのですが見つかりませんでした。
この2つのクラスもどこかで落としてくるのでしょうか?
はじめまして。
TEdit内でCtrl+Aを押された場合に全選択状態にするには
どうしたらよいでしょうか?
Text1.SelectAllをすればいいのはわかったのですが
どういうイベントに記述すればよいのかわからないので
教えてください。
>412
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key = Ord('A')) then
Memo1.SelectAll;
end;
>411
DB関係はProfessional以上なら標準で在る。
ProとEntでも差異がある。パーソナルなら諦めかな。Midas絡みも無理でしょう
>>413 使っているのがフリーのPersonal6です。
上位バージョンの試用版も米国のサイトから落としましたが、
Personalである限り無理ということですね。
丁寧にありがとうございました。
付け加えた質問で恐縮ですが、
データのセーブはcsv的にテキスト形式で保存し、
ロード時はMemoにロードし","を区切にして
TStringGridに貼り付けていこうと思うのですが
他に効率の良いコンポーネントや方法はあるでしょうか?
>>413 それだと[Shift]+[Ctrl]+Aでも同じ挙動になってしまうから、
if ([ssCtrl] = Shift) ...
のほうがいいんじゃないかな?
直接ODBCやADO使うコンポとか探せばあると思うよ
データが少なければ、そのcsv?独自データでもいいが
> 4 1 5
細かい所は好きにすればいいじゃん
やり方はあれで分かるだろうから、不備があれば自分で考えられるだろ
そんな言い方はおかしい
>>412 TActionで標準のアクションを追加してTEditSelectAllのShortCutプロパティにCtrl + Aを割り当てる。
>>387使ったブラウザのリンクみたいなラベルコンポがあったら教えてください。
ラベルは古くから色々あるけど、その程度なら作ればいいじゃん
フォントカラーとアンダーラインを切り替えるだけじゃないの?
google厨乙
代案の方が100倍マシ
いや、
387のコード見て理解出来てる人が、そんなコンポ教えてって言うのがオカシイ
>>416 探せばありますか。今度時間をかけて漁ります。
試したところ上位の試用版にDB系のコンポーネントがありました。
でも試用版なので使い続けるわけにはいかない…。
constructor Create; overload;
constructor Create(APara: Integer); overload;
でCreateからCreate(APara)を呼び出すことって出来る?
constructor Create;
begin
Result := Create(0);
や
inherited Create(0);
end;
のようなことがやりたい(デフォルト引数というのはなしね)。
やってみればいいだろ。アフォ?
やってみてできないからやる方法があるか聞いてるんだけど・・・
ん?DCUデバッグ有効で両方のコンストラクタにブレークすれば追えるよ
で、出来ると思うよ。
というか・・干渉ですが、
Createから別のCreate(**)を呼ぶならコンストラクタにする意味無いと思います。
Create(**)内でCreateならわかるけど
どっちのインスタンス化でも大丈夫、引数無ければデフォルト値の零
TMyObject = class(TObject)
private
{ Private 宣言 }
FCount: Integer;
public
{ Public 宣言 }
constructor Create; overload;
constructor Create(APara: Integer); overload;
property Count: Integer read FCount default 0;
end;
...
constructor TMyObject.Create;
begin
inherited Create;
FCount := 0;
end;
constructor TMyObject.Create(APara: Integer);
begin
Create;
FCount := APara;
end;
Result := Create(0);
なんて出来るの?
435 :
デフォルトの名無しさん:05/01/18 09:26:50
TDateTime型で二点間の時間差をLabelに表示しようと思い
ヘルプを見ながら試行錯誤したのですが、どうにも上手くいきません。
//aTimeはNowより以前の時刻を表すTDateTime型
Label1.Caption:=FormatDateTime('yyyy/mm/dd HH:nn:ss',(Now-aTime)-693594.0);
どこを訂正すれば良いでしょうか?
西暦0年なんて存在しないって知ってる?
delphiでPPCのアプリって作れますか?
MAINMENUコンポーネントでCAPTIONが ファイル という項目を
作成したのですが、実行すると
ファイル(Z)と項目が表示されます。
(Z)を表示させないようにする方法と、
できれば()内の文字を任意にする方法を教えてください。
宜しく御願いします。
ファイル(&F)
ちなみに英語圏UIの場合は&File (Fの下に下線)
いくらググっても僕の脳ではわからないのですが。
掲示板などに書き込みさせるようにはどうしたらいいのですか?
とりあえず、Indy9をインストールしました。
Postをするとか書いてあったんですが良くわかりません誰か教えてください。
AutoHotkeys = maManual
446 :
デフォルトの名無しさん:05/01/18 19:44:05
PaintBoxの使い方がイマイチ理解できません
イメージとしてはPaintBoxという画用紙に
テキストなりイメージなりをペタペタ貼っていくのだと思いますが
参考になるページ等があれば教えていただけないでしょうか
OnPaintイベントでDrowする、純粋なWinSDKの低レベル描画手法。というか基本
HDCはCanvas.Handle
>>446 TCanvasのヘルプ嫁、の方が早いと思われ
最良の学習方法は
DEMOフォルダにあるプロジェクトの中から興味のあるものを見つけて
コードやコンポーネントのプロパティを調べまくること
位置付けとしては、GDIを使う場合のDCを表示枠として提供するもの
DCを提供するだけで、再描画はしないので永続表示するならOnPaintが必要
まぁほとんど全てのコンポがWM_PAINTで再描画してるんだけど、
ライブラリ化されてローレベルな部分は隠蔽されてるから、いきなり初心者がTImageなど使ってもそれなりのものは出来る。
ビットマップヘッダーやらなにやらGDIを直接使う場合は、本来のWindowsSDKに戻る。
とは言え、いきなり初心者がWindowsSDKのみでアプリを書くのは無理。
TDateTime型の範囲を確認しましょう
差分なら実数を自分で日付形式表示しれ
っていうか、秒単位なら SecondsBetween() で時間を求めて、あとは整数のわり算だけ
結婚適齢期なんだが、考慮してくれ
455 :
デフォルトの名無しさん:05/01/19 09:53:41
石を投げずに聞いてください
1ピクセルは何mmなのでしょうか?
くだらない質問してすいません
Delphi-MLで調べたら見つかりますた
>>453 SecondsBetween() は閏年を考慮してるよ
460 :
デフォルトの名無しさん:05/01/19 17:25:04
だれか教えてくれ〜
a(n)=1×2×...×n
b(n)=b(n-1)+b(n-2)、 b(1)=1、 b(0)=0
・n(≧1)が入力として与えられたとき、
a(n)の値を返す再帰的なプログラムを記述せよ。
・上記の問題を再帰を用いないプログラムで記述せよ。
・n(≧1)が入力として与えられたとき、
b(n)の値を返す再帰的なプログラムを記述せよ。
・上記の問題を再帰を用いないプログラムで記述せよ。
※ただし入力と出力は全ての整数型で与えられるとし、記述はDel-phiで記述せよ。
>記述はDel-phiで記述せよ。
スレ違いですよ♪
デジャヴだな Del-phi も
アセンブラでも再帰を必要とするのに出来る訳ねーじゃん。寝たか
再帰的なプログラムを記述せよ・・で?・・再帰を用いないプログラムで記述せよ・・ハァ??
全部の値の定数でも並べればぁ
再帰処理を見せないために、その再帰処理をする関数をDLLにしちゃえばいいんだよ
>>463 おまいのレスこそネタだよな?ネタだと言ってくれ〜
アセンブリまで砕いたら殆どのAPIは中で何度もジャンプループしてるだろうよ
基本は足算引算とビットシフトしか無いんだよ
VCLとして既にある関数を自分でわざわざ作っている予感がして不安になるときが多々あります。
気にしないことだな。くだらない関数もたくさんあるし。
470 :
デフォルトの名無しさん:05/01/20 05:39:50
新規プロジェクトを作ってフォームにImageList1を配置して実行するとうまくいくのですが、
画像(例えば"C:\Program Files\Common Files\Borland Shared\Images\Buttons\ABORT.BMP")
を一枚でも読み込んで実行すると
'ImageList1.Bitmapの読み込みエラー:ストリームからのImageListデータの読み込みに失敗しました'
と出てしまいます。何が悪いのでしょうか?
環境はDelphi6 Proとパッチは一通りあてています。
別に問題ないけどな
IDE上で読み込み済みなのか、起動時に動的に読み込むのか、どっちだ?
Pro版ならソースもってるべ。
>>460 function a(n:Integer):Integer;
begin
if n>1
then a:=n*(n-1)
else a:=1;
end;
function a(n:Integer):Integer;
begin
result:=1;
while n>1 do begin result:=result*n ; dec(n);end;
end;
474 :
デフォルトの名無しさん:05/01/20 10:57:58
bitmapやjpgの画像の色をpixelごとに読みたいんですが、どうすればよいでしょうか。
bitmap.canvas.pixels[] 速度がほしければ scanline
jpg 画像は bitmap に写し取って同様にする
Cのソースをパスカルに変更するソフト、どこにあったけ?
477 :
474:05/01/20 15:06:24
procedure TForm1.Button1Click(Sender: TObject);
var
Bmp: TBitmap;
Fname: TFileName;
begin
if OpenPictureDialog1.Execute then
Fname := OpenPictureDialog1.FileName
else
exit;
Bmp := TBitmap.Create;
try
Bmp.LoadFromFile(Fname);
Form1.Canvas.Brush.Bitmap := Bmp;
Form1.Canvas.FillRect( Rect(0,0,100,100) );
Label1.Caption := IntToStr(Bmp.Canvas.Pixels[50,20]);
finally
Form1.Canvas.Brush.Bitmap := nil;
Bmp.Free;
end;
end;
end.
こんなプログラムを作ったんですが、labelの行を追加するとbitmapが正しく表示されません。
また、labelの数字もなんか変ですし。本当はR,G,Bそれぞれの値を得たいのですが、どうしたらよいでしょうか。
いやーそんなことないよ。良いんじゃない?
>>477 やってみたけど、別に問題がないと思うけど。Label1の行の有無にかかわらず、特に差はなかった。
ただ、Bmp.Canvasのサイズに対して、OpenPictureDialog1で読み込まれたBitmapのサイズが
大きすぎの可能性はないだろうか(小さい場合はタイル状に並ぶことは確認できると思う)。
>labelの数字もなんか変ですし。
ヘルプでTCanvas.Pixelsを熟読しる。たぶん-1が返ってきている状態に陥ってない?
480 :
480:05/01/20 15:30:27
function MojiMoji(s1,s2:string):integer;
var
i : integer;
begin
result := 0;
for i := 1 to 4 do
begin
if StrScan((PChar(s1)) and (PChar(s2)),s2[i]) <> nil then
begin
Inc(result);
end;
end;
end;
例えば、s1='abcd' s2='bbef'と代入させた時に、
s1にはbが1個、s2にはbが2個含まれているので、
上記の関数を使うと、2という結果が返ってきます。
私が求めているのは、いくつ組が出来るかってことなので、
この場合は、1という結果が欲しいんです。
s1の2文字目のbとs2の1文字目のbという組が出来たら、
s1の2文字目のbとs2の2文字目のbは組として成立させないよう、
以降s1の2文字目のbは使わないようにしたいんです。
上記の関数をどう書き換えれば良いでしょうか?
TreeViewで同じ階層に同じ名前のノードを作れなくするにはどうしたらいいですか?
>>480 その前に
(PChar(s1)) and (PChar(s2))
の意味がわからんのだが・・・俺がアホなだけか?
(PChar(s1)) and (PChar(s2)) って意味不明なんだが?
s2[i] で巡回してるんだから、PChar(s1) だけじゃないのか、この部分。
それに s1 と s2 を入れ替えると結果がかわるでしょ。
同じ文字がある場合はそれを s1 にしてごらん
484 :
480:05/01/20 16:09:40
間違えました。。。もとは、
function MojiMoji(s1,s2:string):integer;
var
i : integer;
begin
result := 0;
for i := 1 to 4 do
begin
if StrScan((PChar(s1)),s2[i]) <> nil then
begin
Inc(result);
end;
end;
end;
です。
>481
子ノードを全検索して作成有無を判断するしか無い。リネームなんかも同じ
関数の動作原理を理解してないのが原因
>>480 こんなんどうよ?
function MojiMoji(s1,s2:string):integer;
var
i : integer;
begin
result := 0;
for i := 1 to 4 do
begin
if Pos(s2[i], s2) < i then
begin
continue;
end;
if StrScan((PChar(s1)), s2[i]) <> nil then
begin
Inc(result);
end;
end;
end;
やっぱ、
If cond then If cond then else ---
やっぱbigin - end - で囲っちゃう いらないけど
if cond then
if cond then else
else
-- がいまだにできない
Delphiと関係あるのか?
正規表現が無いから文字検索が面倒なのは確かだが
正規表現があるとその使い方が面倒だが
そんなヤツはposでやってりゃいいだろ
493 :
480:05/01/20 16:53:58
482さん、483さん、486さん、487さん、
どうもありがとうございました。
それともう一つ質問なんですが、
上記と似たような関数なんですけど、
s1とs2に、何種類の文字が含まれているかを調べる関数を作りたいのですが、
どうすればよいでしょうか?
さっきのs1='abcd' s2='bbef'だと、
6種類という結果が返ってくるような関数です。
よろしくお願いします。
pos で出来ることを正規表現つかってやるヤツもいるんだな
自分で少しは考えるってことはしないのか?
正規表現あればバグは減る
どうして?
>>493 function HowManyKinds(const s:string):integer;
var
i:integer;
begin
result := 1;
for i := 1 to Length(s)-1 do
if StrScan(PChar(@s[i+1]),s[i]) = nil then Inc(Result);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(HowManyKinds('abcd'+'bbef'));
end;
複雑な電文の解析処理してるルーチンとか考えてみ
while内でかなりのcaseとposとフラグ使ってでグルグル回さなきゃいけない罠
正規表現なら簡素になるだろ、物によっては一行で済むかもしれん
IndyのTIdMessageでもヘッダー部にバグ潜んでるし
500 :
480:05/01/20 17:26:09
498さん、どうもです。
まずは、しっかり理解してから使います。
ありがとうございました。
正規表現にバグ潜んでるかも知れんし
Delphi8以降でdotNetなら正規表現使えます
Delphiにバグ潜んでるし
TTableでいうところのApplyUpdatesにあたる命令が
TADOTableにはありますでしょうか。
ADO自体の特性を理解してから、ADOコンポーネントのヘルプ見ろ
506 :
デフォルトの名無しさん:05/01/20 21:58:37
エディタを作ろうと思うのですが
特定単語などを自動的に太字にしたり色変えたり・・したいと思い、
リッチエディットでやったのですが、太字に変えると幅が大きくなってしまします
IDEのエディタは予約語に限らず等幅でボールドしたり解除したりしてますよね
こういう風にしたいのですが
サブクラスウインドウやめて、DCやらフォントやらキャレットやら
自分で実装しないといけないのかしら?それだと超めんどくさいのですが
なんか簡単にできるプロパティとか見落としてるのでしょうか
(他人のコンポーネントは無しということで)
>サブクラスウインドウやめて、DCやらフォントやらキャレットやら
>自分で実装しないといけないのかしら?それだと超めんどくさいのですが
>(他人のコンポーネントは無しということで)
無理
超めんどくさい事することにします・・・ハァァ 超時間もかかる
ちょう初歩的な質問なのですが、ネットワークを使用するプログラムは
通常どれくらいのポートを開くものなのでしょうか。
物にもよると思いますが、例えばチャットプログラム等ではどうなのでしょうか。
文字送受信用とファイル送受信用で別のポート使いますよねたぶん^^;
どうかご教授お願い致します。
>>510 こんなに使っている物なんですね^^;
次からはもっとちゃんと調べるようにします。
お手数お掛けしました&ありがとうございました!
一つのプログラムがどれくらいのポートを開くかって事では?
1PCに1つ割り当てれば良いと思うけど、ちがうの?
>>509 TCPとUDPについて調べろ。話はそれからだ。
その人たぶんね、ソケット通信組めるレベルじゃないよ
既にクライアントとサーバ間でやりとりをするプログラムはいくつか作っています。
しかしいつもソケットコンポーネントを置く時に「これでいいのかなぁ〜」と疑問を抱きつつ
置くのでプログラミングが上手な方々にどうすべきか聞こうと思ったのですが、
よく考えたら既存のプログラムのポートを調べれば済む話だったという訳です^^;
ともかく皆さんどうもです〜^^;
VBと対比されて説明されることがありますけど、
VBにできなくてDelphiにできることってなんですか?
ない
519 :
デフォルトの名無しさん:05/01/21 09:27:25
超初心者です。
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
begin
if OpenDialog1.Execute then
Bitmap.LoadFromFile(OpenDialog1.FileName);
end;
こんなプログラムを作ったんですが、Bitmap.Load…のところで例外が発生します。
「Project1.exeがEAccessViolationクラスの例外を発生した。Project1.exeのアドレスxxxxで
アドレスyyyyの読み込み違反がおきた」とでて先に進みません。実行を続けようとしても同じ
メッセージが繰り返されるだけです。helpを読むと、ツールのデバッガオプションで何とかしろ、
と書いてありますが、よくわかりません。どうすればよいか教えてください。
TBitmapというインスタンスを生成する必要がある
Bitmap:= TBitmap.Create;
try
if OpenDialog1.Execute then
Bitmap.LoadFromFile(OpenDialog1.FileName);
finally
Bitmap.Free;
end;
521 :
519:05/01/21 10:23:49
>>520ありがとうございます。でも今度は「ソースファイルが見つかりません:Graphics.pas」とエラーになります。
何度も申し訳ないですが、どうすればよいか教えてください。
522 :
519:05/01/21 10:31:56
フォルダーが違うとかではなく、検索してもありませんでした。
すみません。質問です。
プログレスバーを使ってファイルのダウンロード状況を表示したいと思っています。
どのように書けば良いかサッパリわからないです。
ダウンロードするファイルのサイズをMAXに指定して、
Positionを現在ダウンロードできているファイルサイズ?
とするような感じなのだろうなぁとは思うのですが・・。
うまくいきません(-_-;)
お騒がせしました。for使ったらできました^^;
検索の仕方を覚えようと書いてみたんですが
全く反応がありません。
何が悪いんでしょうか?
procedure TForm1.Button1Click(Sender: TObject);
var
sr:TSearchRec;
i:integer;
begin
if FindFirst('C:\',faDirectory,sr) = 0 then
begin
repeat
showmessage(sr.Name);
until FindNext(sr) <> 0;
end;
FindClose(sr);
end;
すいません、自己解決しました。
質問よろしいでしょうか?
別アプリのウインドウにあるコマンドボタンのEnableの状態を取得したいのですが、
APIがわかりません。FindWindow,FindWindowEXでウインドウハンドルを取得するまではわかるのですが・・・
ご教授お願いいたします。
529 :
519:05/01/21 12:34:21
自己解決しました。ありがとうございます。
>>528 IsWindowEnabled
マァAPIの質問はAPIスレのがいいよ
>>516 RuntimeDLLなしでアプリを実行すること。
kernel32.dllをスタティックリンクする方法を教えてください。
スタティックにしたらプロセスどこからもらうんだ?
そんな巨大なプログラムはいらないな
ふふふ、ランタイムDLLだといいたいんだろ
ハローワールドならシバクゾごるぁ
>>516 >VBと対比されて説明されることがありますけど、
>VBにできなくてDelphiにできることってなんですか?
VBってポインタ扱える? 確か使えないと思ったが・・・・
いずれにせよ
「VBにできなくてDelphiにできること」
の方が
「DelphiにできなくてVBにできること」
よりずっと多いとおもふ。
ローレベルにVB詳しいヤツがここ見てると思うか?
俺はVBでAPIを扱おうとしたところで挫折してDelに乗り換えた口。
>>532-540 お客様、談話室が空いていますので、そちらのほうでゆっくりしていってください。
VBはAPIを使おうと思ったら、自分で宣言しないといけないんだっけ?
APIを使うようなアプリは作るなって事か。
>>543 ?
Windows とかのユニットで宣言してあるじゃん。
LongHornでもAPIを亡き者にしようと画策しているけど、
よっぽどAPIが嫌いなのね。
>544 はハイレベルな人間。よってローレベルコードを必要とする柔軟なものは作れない。
548 :
デフォルトの名無しさん:05/01/22 08:08:02
すんません。質問なんですが、
Form1.Create時にForm2のobjectを参照することは出来ないのでしょうか。
(Form2生成前だから?とか)
一応、Form1のonShowイベントで参照させて回避しましたが、気になるもので。
答えてくださった方々ありがとうございました。
>>541 スレ違いになる仕様の問題になることを質問してしまってスミマセン。
550 :
デフォルトの名無しさん:05/01/22 10:42:46
質問いいですか?
HP上のデータを、ClientSocketを使って、
ダウンさせるにはどうしたらよいのでしょうか?
FTPのコマンドを理解すればよいのでしょうが、
FFFTPの作動画面見てもはっきり分かりません。
ご存知の方、回答よろしくお願いします。
(´_`)。oO(落とすだけなのにFTP使う意味あるのかなぁ…)
>>548 Form2を先に生成するように設定する
>>554 そうするとForm2.Create時にForm1のobjectを参照することは出来なくなってしまいます。
とか言うなよ。
>>554 Application.MainForm を設定しなければならないのでその方法はおすすめできない
>>553 ないだろ。WinInet とか、もっと簡単に UrlMon 使えば一行だよな。
> LongHornでもAPIを亡き者にしようと画策しているけど、
そんなことないよ。アセンブリのコードがAPIになるから使いまくりだろ、ふつう
>>548 Object参照じゃないが、
Form2にあるメソッド使いたいだけならこれはどうだ?
TForm2 = class(TForm)
public
class procedure Hoge;
end;
procedure TForm1.OnCreate(Sender: TObject);
begin
TForm2.Hoge;
end;
Objectの参照は作らないと無理。
>>548 プロジェクト-オプション-フォームの自動生成の対象でForm2をForm1の上に来るようにする。
そうすれば先にForm2が作られるので参照できる。
OnShow で参照して不便なことなど何もないだろ
562 :
デフォルトの名無しさん:05/01/22 16:14:45
Delphi6でユニットのライブラリの*.hlpファイルを生成する
ドキュメンテーションツールってないですか?
>550
FTPじゃない。HP上なんだからHTTPプロトコルだよ。
564 :
デフォルトの名無しさん:05/01/22 17:14:19
いまdel6presonalインストール中なんだけど、
「共有ファイル」ってディレクトリは具体的に何に使われるもんなの?
ビットマップイメージとかデバッガとかデータベース関係とか
BDE
BDS
Data
Database Desktop
DBExpress
Debugger
Images
MSHelp
SampleDictionary
>>565 それは「共有ファイル」っていうんだろうけど、
誰と誰が共有すんの?
「delphiと他の言語とかOSとかが共有」とかするならc:\に置こうと思ってるんだけど、
「delphiのプログラムAとプログラムBが共有する」ならd:\に置こうと思っててさ。
あーめんどくさっ
やっぱり全部デフォディレクトリにする。
>>565レスどもでした。
PCがイカれててよくOS再インスコするので、こういうの迷う。
>>566 他バージョンのDelphiとかBCBとか
デフォルトにしとけ
ゲームの作り方とかじゃなくて言語仕様など、言語そのものについての入門サイトで
おすすめなとこありますか?
言語仕様なんてろくに理解しないまま
プログラムを組んでる俺は勝組
言語仕様よりアイデアだな
表面なら、どうすれば操作性が良いか、見栄えが良いか・・・
中身なら、どういうクラス設計が使いやすいか、関数の引数をどうするか・・・
と、言語仕様もよく分からないまま考えても無駄
>>571 thx!
適当に入門書購入したらコンポーネントの解説ばっかで文法のこと全然書いてなくて困ってました。
ついでに書籍でお勧めってありますか?電車でチマチマ読みたいとき用に。
pdf無かったっけ?それでも印刷しとけよ
質問させてください
Halbow氏のTCommonMemoryクラスを試してみようと、以下のコードを書いたのですがどうにも巧く文字列を取得してくれません。
ステータスバーだと取れるのですが何故かTEditだと文字列の取得に失敗します(文字列の長さの取得には成功している)
どなたか理由の分かる方はいらっしゃいませんでしょうか?
なおターゲットプログラムは勿論起動してますしTEditが貼られてます。
procedure TForm1.Button1Click(Sender: TObject);
var
hTargetForm,hEdit:HWND;
Len: integer;
AllocSize:DWORD;
CM:TCommonMemory;
PC:PChar;
s:string;
begin
hTargetForm := FindWindow('TTargetForm',nil);
hStatusbar := FindWindowEx(hTargetForm,0,'TEdit',nil);
if hEdit = 0 then begin
ShowMessage('Target Statusbar is not found');
exit;
end;
AllocSize := 1 + LOWORD(SendMessage(hEdit,WM_GETTEXTLENGTH, 0, 0));
CM := GetCommonMemory(hEdit,AllocSize);
GetMem(PC,AllocSize);
Memo1.Clear;
Len := LOWORD(SendMessage(hEdit,WM_GETTEXT,AllocSize,LPARAM(CM.MemPtr)));
CM.Read(0,PC,Len);
SetString(s,PC,Len);
Memo1.Lines.Add(s);
FreeMem(PC);
CM.Free;
end;
ZZZ......
+ へ ,,,..-'"へ ⌒ヽー-、..,,,...-イ''⌒ヽ
/ ゝ-─‐-/' ヽi! ヽ、 i, ,ノ
+ /" i! .... ゙'';;.. Y"
,/' '''''' '''''' 〈 :::::. '';;... 'i- 、,,
+ i'(-==), 、(==-)、 'i, :::::::: :::: 'i! ゙"ヽ、
i! ,,ノ(、_, )ヽ、,, 'i ::::::::: ''':;;; ヽ、 ゙)
ワカッタニャー 'i,::::: `-=ニ=- ' ,/ヽ '''' 'i,-‐'"
/⌒ヽ、 `ニニ ´ :::,,-‐ ゝ ............. ヽ、
( ヽ、 u ,,.-‐''" ,) ::::::::: '\,
ヽ、,, ノ,.-‐''" ノ-‐''"´( ::::::::::: )
"~ ( ,. -'" ヽ、 _,,... -‐─'''"
ヽ、,,.. -‐'''" ``゙"´~
./  ̄/〃__〃  ̄フ / / / o ヽ /
―/ __ _/ ./ / / ── / ̄ /
_/ / / /\ _/ ヽ_ _/
── / ──┐ ┼─┐ |
──┐ /| | l | l l |\_
_ノ | _ノ ノ _/ _ノ |
ト|
ト|
ト|
ト|
/\ト|___/ヽ
/'''''' '''''':::::::\
. |(○), 、(○)、.:|
| ,,ノ(、_, )ヽ、,, .::::|
. | `‐=ニ=‐ ' .:::::::|
\ `ニニ´ .:::::/
,,.....イ.ヽニニニニニニニニン-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
> ヽ. ハ | ||
∧_∧
(´・ω・`)
( つ旦O
と_)_)
>>577 WM_GETTEXT はウィンドウテキストの取得だからOSがよきに計らってくれる
コモンメモリは必要ない
他アプリのテキスト変えるよーなの作っちゃイヤン
それは言えてる
鈴木教授マンせー
数値リテラルとstrToIntのフォーマットを教えてください
587 :
デフォルトの名無しさん:05/01/23 14:13:12
IPアドレスをLongWord型で取得できたのですが
それをホスト名に変換したいのですが
gethostbyaddr()を使うのかなといったところまでは
調べられたのですがその先になかなか進めません。
もしよろしければ教えていただけないでしょうか?
よろしくお願いします。
ソケットコンポのソース見りゃいいじゃん
∫,,,,,,,,,∧,,∧ じゃあ、ソースみて
⊂,,,,,,,,,つ,,゚Д゚ミつ 教えてやれよ。
Longword型に取得というのがよくわからないが
これじゃだめかの?
function GetHostName(ip : string) : string;
var
PH : PHostEnt;
InAddr: TInAddr;
W : Word;
WSADATA : TWSADATA;
begin
result := '';
if ip = '' then exit;
InAddr.S_addr := inet_addr(PChar(ip));
W := MakeWord(1, 1);
WSAStartup(W, WSADATA);
PH := gethostbyaddr(@InAddr,4,PF_INET);
if PH = nil then
begin
exit;
end;
result := string(ph^.h_name);
WSACleanup;
end;
590 :
デフォルトの名無しさん:05/01/23 19:02:49
質問。delphi入門がてら、超簡単なチャット的なものを作ろうとしてます。
でも、接続〜切断の処理をわけるとうまくいくのに、まとめるといまくいかない。何故?
clientsocket(名前:csoc)を使って、
「接続」ボタン押すと
csoc1.address := edtConnectHost.text;←IPアドレスが入ってる
csoc1.Open;
「送信のみ」ボタン押すと
csoc1.Socket.SendText(edtInput.text);←送る文字列ね
「切断」ボタン押すと
csoc1.Close;
なら上手くいく。なのに、
「送信」ボタン押すと
csoc1.address := edtConnectHost.text;
csoc1.Open;
csoc1.Socket.SendText(edtInput.text);
csoc1.Close;
だと、2回に1回しか、相手にメッセージが届かない。
最初は失敗で、次は届く。次はまた失敗、の繰り返し。
で、ログを次のように出したところ
csoc1Connect→「接続しました」
csoc1Write→「送信しました」
csoc1Disconnect→「切断しました」
初回は接続、送信までしかログが出ない。
2回目は接続、送信、切断までログがでる。
次はまた送信まで。 以上です。
>>590 ほんとだ。今まで気付かなかったw
csoc1.Open;とcsoc1.Socket.SendText(edtInput.text);の間に
どうでもいい処理を挟めばとりあえず動きそうな悪寒。
ごめんなさい嘘です。忘れてください。
↓エロい人おながいします
非同期ソケットのことを何もわかってないな
エロいですが質問者です。
個別ボタンと送信ボタンでいろいろ試したところ、
送信ボタン1回目で接続ができて、
送信ボタン2回目で送信と切断ができているもよう。
せめて、openでちゃんと接続できたのか取得したいんですけど。
ヘルプに書いてない(見つからないだけ…?)
OnConnectがあるだろ
わかってないと思うよ。
分かってればソケット絡みは、質問の前提条件として言うだろし。
あの質問だと、同期?非同期?と聞き返さなきゃいかんから面倒
「なにそれ?」なんて言うかもしれないし
おっしゃるとおり、わかってません。
まずはそれを勉強するとします…。
回答ありがとうございました。
同期
スレッドが動作をブロックする。
recvなどは取得出来るまで制御が戻らない。
タイムアウトを適所に入れる
非同期
コマンド発行後すぐにスレッドに制御が戻る。
コマンドが完了していないかもしれない。たぶんしていない。
完了通知はイベントの形で通知
アプリとして大抵は、同期接続をマルチスレッドで使う
シーケンシャルじゃないということだぬ。
で、OS何よ、Win3or2KorXPorNT
オス
ソケットは知っていたけど、同期/非同期は知らんかった…。
こりゃテクネ受からんな。
>>598 なるほど、つまりopenしたらOnConnectイベントが来るまで
待たないといかん、と。
>>600 自分ですか、2kです。
2Kなら、大方うまくいくよ、でもそれでも
とりこぼしあるからリカバリーはしっかりと、どこまでエラーにするかだな。
俺はテクネ持ってるぞ。ざまーミロ
テクネは関係ないか。組み方の問題だから。
まあいいや、とにかく
「送信」ボタンでは接続だけ
↓
OnConnectで送信
↓
OnWriteで切断
でうまくいきました!
練習だし、エラーに関してはシカトしときます。
openした時点で、「接続しにいくだけの別スレッドが始まる」イメージですね。
だから、即送信してもうまくいくとは限らない(即、じゃあ大抵ムリ)、と。
よっしゃ、勉強になりました。
大体通信処理は大変だよ。リトライするべきだし。ローカルファイルの
読み書きとは全く違うよ。
だからぁ。目的はワンボタンで接続、送信、切断したいんだろ?
理解深めたのは良いこととして、
エラーは無視とか言うんなら最初のコードで、君の中じゃ完了だったんじゃねーか
非同期なんか、実用的なもん何も作れん
∧_∧
( ;・∀・)
( つ旦O
と_)_)
教えてるほうもレベル低いな
超初心者がくだらないレス付けるすれですから
せっかく非同期使うんだからキャンセルボタンぐらい付けようや
>>609 うわーありがとうございます。
せっかく応援されたのでがんば
ろう。
>>610 ワンクリックで送信できなかったのが、
ワンクリックで送信できるようになったのです。とりあえずそれでおk。
最初のコードじゃ明らかに予期した動きではない。
でも、せっかくだからキャンセルボタンと、
〇秒以上繋がらなかったらエラー、くらいやるかなぁ。
しかし、テクネも持っていないやつがいるとは驚きだぜ
煽りでも何でもないけど、「入門」に「チャット」はどうかと思う…。
上級方面だと思う…。
まだいたのかよ( ´,_ゝ`)プッ
質問終わったので数字コテはずします。
>>619 他の言語経験は長く多く、
また飲み込みも早いほうなので、
「TCP/IPプログラミング」と「delphi」を同時に勉強しようと思いまして。
テクネ持ってないけど勉強はしたからある程度わかるし、
VBと、C(API使ってのwindowsアプリケーションをメモ帳でちまちま作った)
経験があるのでGUIとかイベントドリブンとかは慣れてるし。
まあ、あくまで「チャット的なもの」。
今のところ1対1Onlyだし、双方からお互いにTCP接続してるし。
しかもそれを放置してじゃんけん機能つけてるとこだし。
>>621 そかそか。
いや、単純に「入門」はどうかと思っただけだから。
否定してるワケじゃない。
他に「入門しやすい道があるのに…」ってだけ。
>>622 いえいえ、至極まっとうなご忠告だと思います。ども。
自分も、他の人が「入門でチャット」って言ってたら突っ込むし。
簡単なマルチスレッドやシステムコールバックとかちょっとやった方がいいよ
マルチスレッドの実装自体は簡単だから。排他がややこしいが。
面倒ならScktCompのほうのソケットコンポで、それほど理解出来て無くても使える。
それでも問題にぶつかるだろうから、スレッドや排他はそのとき考え詰めればいい
いや、世の中すべて非同期なのにね、変なの
>>624 一応、次はマルチスレッドやろうと思ってます。
最終的には、winnyとかのノード集めてうんたらかんたらを利用した、
違法性のない…なんかゲームでも作りたい。
鈴木教授マンせー
皆凄いなぁ。俺今19でプログラミング始めたばっかなんだけど。。
CSockとSSockで簡単なアプリ作って浮かれてたけど
やっぱ手遅れかなぁとか思ってしまった(つД`)
意味ワカメ
なんだか知らない事ばかり話されているので
果たして今から勉強して仕事としてやっていけるだけの
知識を数年の内に身に付けられるのかなぁと。。
君次第
がんがりまする(´・ω・`)
ホソキカズコは言う。あなたはこの一年が勝負だから一生懸命やってごらん
一年後・・・あまりパっとしない結果になった。生活レベルも特に変わらん
ホソキカズコは言う。頑張りが足りなかった結果なのよ!
マルチ商法や詐欺まがいと同じじゃねーか、ランダムな事言って金せしめてるふてぇ野郎だ
細いクスコ?
今でもやっぱり、Del2,Del3あたりに買ったちょっと分厚い本が一番ためになるな
Del4あたりから書籍は殆ど買ってないけどさ
APIコールでOSの動作解説して、同じ処理するコンポーネントを平行解説してる
ver上がる毎にコンポーネントの解説ばかりになって、lowレベルな事しようとしても分かんない
>>633 if お前 = ホソキカズコと同じ方法で稼げる状況にある then
begin
ホソキカズコと同じ方法で稼ぐ;
end;
finalization
if ( (>636) shr (LOWORD(>633)) AND $8FFF0000 ) > 0 then
訴えられタイーホ
>>633 というかカズコのいうことを間に受ける奴って
アサハラショーコーのいうことを間に受けた奴と同レベルだよね
何かにすがりたいときもあるのさ
そんなときはソプに行く
おれもつれてけ
Sofmapの紙袋わすれるなよ
リストビューを使っています。
listView1.Redraw := false;
--内容書き換え
listView1.Redraw := true;
のように書き換え中に画面をちらつかせない方法が
あれば教えてください。
誰とやる時も病気感染らないから心配だなぁ
>>643 ListView1.Items.BeginUpdate;
ListView1.Items.EndUpdate;
>>645
スペシャルサンクス
助かりました。
TWinSocketStream.WaitForData についてですが、ヘルプには
> ソケット接続で情報を読み書きする用意が整っていることを確認できます。
とありますが、実際にやってみると読み込みをする準備が整っているかどうか(ソケットにデータが届いているか)はわかるのですが、
書き込みの準備が整っているかどうかがわからないような気がします。
接続の状況によらず、ソケットに受信データが届いているときは True 届いていないときは Fales を返してきます。
どうすれば書き込みの準備が整っていることを調べられるのですか?
書き込みは必要ない、送信しきったかどうかで判断するといいよ
確かあそこselectの仕方がオカシイ気がした
650 :
デフォルトの名無しさん:05/01/24 12:10:32
コンボボックスに値をセットする際、Object部に数値を保持させようとしています。(無理やりですが)
取得する際は
Integer(Self.Items.Objects[Self.ItemIndex])
でとれることがわかっているのですが、セットするときに
AddObject('あ',Object)
のObjectに数値をうまくセットする方法はどうしたらよいのでしょうか?
型が合うようにキャストするだけ
var
iData: Integer;
begin
iData := 1;
ComboBox1.Items.AddObject('hoge', TObject(iData));
end;
652 :
650:05/01/24 12:36:43
>>651 そっか!
できました
ありがとうございました〜
なんでTObject型なんだろな、TreeNode.DataなんかはPointerなのにさ
654 :
デフォルトの名無しさん:05/01/24 12:58:52
VCで作られたDLLをDelphiからコールしているのですが
DLL内で非常に時間がかかる処理があるのでCPU使用率が
100%になってしまいます
if not CreateProcess(nil, PChar(aExe), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI) Then
Raise Exception.Create('プログラムの起動に失敗しました');
if AWait then
begin
While WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT Do
Application.ProcessMessages;
end;
上みたいなノリでDLLでも同じようなことができないでしょうか?
DLL内のコードがいじれないならできない
スレッド作りゃいいだけ同期は考えな
657 :
デフォルトの名無しさん:05/01/24 13:08:24
RichEditまたはMemoコンポーネントにおいて、
行ごとに文字色を変えるには、どうすればよいのか
ご存知の方、教えてください。よろしくお願いします。
スレッド内で100%になるなら同じだろ
>>657 TMemo ではできない
TRichEdit ならできるがそんな使い方はおすすめできない
そのDLLの関数を呼ぶスレッドのプライオリティ下げりゃ落ちるだろ、処理時間増幅だが
>>655 DLL内部はいじれます
DLLからコールしてる関数は0で正常、それ以外でエラーと定義しているので
エラーコードは必ず0以上と仮定するなら
iRet := -1
while Func1 > -1 do
Application.ProccesMessages;
でいけそうですかね?
>>656 スレッドはメンドいからパス
落ちるかどうかはそのときの他アプリの状況にもよるし、100%が95%になっても
本質的に解決するわけでもないし
>DLL内部はいじれます
ならなんとでもなるんでは。Sleepかませたり
>657
素直にGDIオンリーでテキストエディタを作りたまえ
DLLで思い出したよぉおッッ!!!
Explorer.exeにインジェクションとかやりてぇええええ
666 :
デフォルトの名無しさん:05/01/24 16:04:34
パッケージの使い方を教えてください。
mylib.pasというユニットを作ってmylibs.bplというパッケージを作りました。
C:\Program Files\Borland\Delphi6\Projects\Bplにmylibs.bpl, mylibs.dcpがあります。
mylibs.bpl以外のソースやプロジェクトファイルを削除してIDEにmylibs.bplを登録しました。
サンプルプロジェクトのUnit1でuses mylib;すると
mylib.dcuが見つかりませんというエラーがでます。
bplがあれば元のソースはいらないと思うのですが何が悪いのでしょうか?
>>667 そうなんですか・・・
ではリリースに必要なのは*.bpl, *.dcu, *.dfmということで
ライブラリの開発・テストと使用を厳密に分けたい場合は
こんなディレクトリ構成にすればいいですか?
mylibs\
lib\ // *.bpl, *.dcuの生成先。*.dfmを..\source\から手動でコピー。ユーザーはこのディレクトリだけを参照する。
sample\ // サンプル(..\lib\*.bplを使う)
source\ // パッケージのソースファイル(*.pas, *.dfm)、プロジェクトファイル
test\ // ライブラリ開発時のテストプロジェクト。(..\lib\*.bplを使わずにプロジェクトに..\source\*.pasを直接登録)
不機嫌なヤツだなー
かわいそうに。もしかしてD2005使ってた?
私の使用している Delphi はいまだに Ver5 なので
http://www.bekkoame.ne.jp/~itotaka/ で公開されている Shell Component Library
Version 0.96 を使っております。
このソースを見て次のような疑問にぶつかってしまいました。
TShellTreeView の public な関数である TShellTreeView.Undo は ShellCtrls.pas で
function Undo(Index: Longint = -1): Boolean;
のように宣言されていますが、サンプルプログラム(MainFrm.pas)を見ると
procedure TDemoForm.UndoButtonClick(Sender: TObject);
begin
ShellTreeView.Undo;
end;
のように引数無しで使用されていて、もちろんコンパイルも通ります。しかし
ShellCtrls.pas を見ても TShellTreeView.Undo が overload されている形跡はあり
ません。どうしてこれでよいのでしょうか。
大変レベルの低い質問かもしれませんが、ご教示いただけたら幸いです。
function Undo(Index: Longint = -1): Boolean;
は Undo; 呼び出しできる、Undo(-1)と同等
function Undo(Index: Longint): Boolean;
は Undo; 呼び出しできない
{宣言部}
function Undo(Index: Longint = -1): Boolean;
implementation
{実装部}
function Undo(Index: Longint): Boolean;
は 前者と同じ
(ヘルプ参照>パラメータ:デフォルト値)
exeに別のexeから特定の文字列を埋め込み、それを起動時に読み込んで
動作に反映させたいと思っています。どのようにすれば良いでしょうか。
よろしければご教授ください。
イミワカリマセン
その文字列は何処にあって、起動時読み込むと言うが、何を対象としているのか
分かりにくくてすみません。
設定を外部に保存せずにexe自体に保存したいと思っています。
起動時にはその設定部分を読み込みたいと思っています。
プロジェクト|オプションのバージョン情報で埋め込んでGetFileVersionInfoで取る。
後はあまり難しく考えずに
var msg: String = '$INFO$埋め込みたい文字列$';
とかやってexeを開いて$INFO$*$のパターンを検索するとか。
>>672,673
ありがとうございます。なるほど、そういうものなのですね。
> 設定を外部に保存せずにexe自体に保存したいと思っています。
動作中にこんなことをしたいのなら無理
ini ファイルとかレジストリとかなんのためにあるか考えると、exe のなかに動的に
何かを保存することはできないのでは
レジストリ使う奴はアホ
そんなことでアホかどうか判断するヤツはアフォ
exeと同じ場所にini作る香具師はアホ
HKEY_LOCAL_MACHINE以下にレジストリキー作る香具師もアホ
そんなことでアホかどうか判断するヤツはアフォ
∫,,,,,,,,,∧,,∧ exeと同じ場所にini作る場合は
⊂,,,,,,,,,つ,,゚Д゚ミつ gethostnameでホスト名を得て
ホスト名.iniとしておけば
UNCとかでexe呼び出ししても
設定がマシン別になって幸せになれる?かな
そろそろ別の質問いこうか
定型データ、例えば2chのdatを読み込んでひとまとまり毎に配列にしまうにはどうすればいいですか
すげー基本だろうけどわかりません
例えが悪いので答えられない
自分でも何が言いたいかよくわからないので出直してきます
>>649 亀レスですみません。
ありがとうございます。
それで行きます。
おまいらの為に俺がなんでも作ってあげよう
何がしたいのか言ってみ
>>691 ありとあらゆる事をしたい。
何でも出来るアプリを作ってくれ。
>>691 Form1のButton1をクリックすると
下着姿の森公美子が俺の家にやってくるアプリをお願いします。
697 :
デフォルトの名無しさん:05/01/25 15:36:30
文字列をJIS X 0201形式に変換してバイトデータとして送りたいのですが
皆目検討も付きません
テーブル表を作って
for i := 0 to Length(sData) -1 do
begin
if sData[i] = $41 then bData := $41
else if sData[i] = $42 then bData := $42
end.......
とやるしか方法はないのでしょうか
end;
698 :
デフォルトの名無しさん:05/01/25 17:09:02
TComboboxについて
@TComboboxのリスト内の項目数はどうやって取得するのでしょう?
A文字列入力後、OnExit時にその文字列がリストにある場合OnSelectへ遷移するのですが、
OnExit内でOnSelectに遷移するかどうか判断できないものでしょうか?
(OnExit時点ではItemIndexがきちんと入っていないようなので・・・)
>>698 TComboBox.Items.Count
TComboBox.Items.Indexof(文字列)でどうだろう
INIの変わりにXML使ってる人いる?
使ってる人は、どんな感じですか?
701 :
698:05/01/25 17:47:45
>>699 できました!
ありがとうございます
やっと仕事が進められます(泣
3時間も悩んでしまった自分(鬱
Del 7 Proで EmbeddedWbを使うにはどうしたらいいでしょうか?
自作のソフト、exeと同じ場所にini作るようにしてるんですけど
どなたか
>>683がなぜダメなのか補足していただけませんか
>>708 Winのユーザーごとに設定保存しろってことでしょ
>>700 INIファイルの代わりに使うのは面倒。
オブジェクトを丸ごと保存・読み出しする仕組みの備わってる言語なら結構便利かも。
DelphiってTXMLStreamみたいなのはないのかな。
xml.WriteComponent(Data)できたら嬉しいんだけど。
今更感たっぷりですが、皆様ありがとうございます。
レジストリ使う奴氏んで
使うんならアンインストーラー付けてちゃんとクリーンにしてくれな
>>697 shift_jis → iso-2022-jp じゃなくて、全角を半角にしたいんですよね。
LCMapString API を使う。
どうして? 使われないんだから、放置でもよくないか?
と煽ってみる(藁
文字形式変換なら、perlからの移植ソースでjconvart.pasとか言うのがどっかにある
あと、持ってる本で「Delphiで作る拘束CGI」という本にも、色々ルーチンがあったな
形式規則が理解出来ちゃえばなんて事無いんだけどね
> 自作のソフト、exeと同じ場所にini作るようにしてるんですけど
いいとおもうけど?
そんなときはアレですよ
そのなんかのフリーソフトが使ってるレジストリと同じキー使って、自分もフリーで公開する
でも誰も使ってくれない(笑
アプリ設定だけならいいけど、>704 の様に個別だと、
ユーザー毎にセクション作らなきゃいかん。中身他人にも見られるし。
>>715 HKEY_LOCAL_USERならユーザーごとに独立してるしファイルで持つにしても各ユーザーディレクトリのApplicationDataに入れとけばいいだけじゃ?
ツールボタンの並び替えを行いたいのですが
ToolButton1.Left := 100;
こんな感じでやると位置は変わるのですが
ボタンをクリックするとVisibleとかEnabledがめちゃくちゃになりバグります。
やり方が間違ってるのでしょうか?
>716
iniに対して言ってるんだよ、いちいち・・・..ボケ
今のマシンでWin3.1動かしたら軽くて軽快だろうな。すぐ博士登場するけど
Win.ini使えばいーじゃん、今時使ってる奴居ないから被らないぞ
そこでVirtualPCですよ
てかそのまえにPC98版のWinしか持ってねーや
超どうでもいいんだけどさ!
自作ソフトウェアをダウンロードしてもらったりその感想貰ったりするのって
すげぇええぇえ嬉しいのね!
要望とかうざいけどな
>>725 人間が鍛えられるよな。> ユーザからの要望
むかしDelphi4使ってたんですが、
なにを血迷ったかDelphi 2005 Proを買ってしまいました。
お金ある時にはがき来たもんですから。。。
ところで、UNLHA32を簡単に使いたいんですが、
2005でも使えるコンポーネント、またはユニットありませんかね。。。
2005ってD7付いてくるの?
宣言してコマンドラインっぽく呼び出すだけだからな…
>>727 「Common Archivers Library - 統合アーカイバ・プロジェクト 開 発 室」のは?
Delphi 2005 Proで使えるかは知らないけど。
「バグ大杉」って、プロレスラーの名前みたいじゃね?
バグゥー大杉ー、2005ポンドー、某ランド所属ー。
>729
なんとなくできそうですけど、
エラーになった時点でお手上げ
当方その程度のスキル・・
あなたのレベルであっても、何をして、何のエラーが出たかぐらい書く事出来るでしょ?
エラー報告するために使ってる訳でもなし・・・
意味不明だが、掲示板は初めてか?
>>717 単純に入れ替えをするだけなら、これで出来ましたけど。
TForm1.Button1Click>ToolButton2.Left:= -ToolButton1.Left;
TForm1.Button2Click>ToolButton1.Left:= ToolButton2.Left;
ほっといてやれよ。そのうち自分で気付くから。
忙しいUIだな。使いづらそう
うむ、ボタン位置が変わったら使い慣れしない人が殆どだろう
Action.ShortCutにCtrl+/割り当てても呼び出せないんだけどそういうもの?
Delphi 7 Proで
EmbeddedWbを使うにはどうしたらいいでしょうか?
インスコしようとすると
[エラー] IEUtils.pas(49): 未定義の識別子 : 'Unassigned'
[エラー] IEUtils.pas(52): 未定義の識別子 : 'VarArrayCreate'
[エラー] IEUtils.pas(53): 未定義の識別子 : 'VarArrayLock'
[エラー] IEUtils.pas(53): ポインタ型が必要です
[エラー] IEUtils.pas(54): 未定義の識別子 : 'VarArrayUnlock'
[エラー] IEUtils.pas(63): 未定義の識別子 : 'VarIsArray'
[エラー] IEUtils.pas(64): 未定義の識別子 : 'VarArrayHighBound'
[致命的エラー] embeddedwb.pas(32): 'IEUtils.pas' ユニットはコンパイルできませんでした
と出るんですが
Delphi6Personalだと問題無くインスコール出来ました。
WWW
いいかげんうるせぇなマルチ野郎
KOLをのフォーム上に通常のソケットコンポーネントを置いたのですが
未定義の識別子となってしまいます。KOLのフォーム上で利用するには
何かしなければならないのでしょうか。
なんでKOLなんか使うんだよ
KOLのソースを持っていて読めるて改良してフィーdバックできるなら使え、
使ってくれ。コメントだけでも良いぞ
そんなレベルじゃないだろ
>>744 をみれば・・・
ここの連中は教える気ねーよな。
相手が分からないと分かっててわざと分からない事を言ったり
嫌味ったらしくグダグダ書いたり。
とか言いつつ俺はKOL使った事ないから教える事はできないけどw
KOL使うのってExe小さくしたからだろ? それでソケット*コンポ*を使うのが分からんところだな
皆さんレスありがとうございます。
>>752さんの言う通り、KOLを使うのはやめようと思います。
私には扱うのも難しかったですし(・ω・`)
それではまたヾ(´・ω・`)ノ
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
いいかげんこのテンプレ変えたほうがよくない?
「なにがわからないのか」がわからない質問者なんかに答えることなんてできないぞ。
このスレをより良くしたいと思ってるなら今すぐ消えてくれ。
数学駄目な俺に三角関数?とかいうの教えてくれ
放物線ってどうやって書くのか
代案厨乙
不親切なインターネットですね
つーか放物線に三角関数なんていらねーだろ。
小学生?(放物線は中学で習う)
>>760 なんか最近代案厨というのが流行っているのか
代案に過剰反応する変なのがいるんだよな
Del厨が最近不機嫌なのはD2005がゴミだとわかってきたからじゃないの?
残念!!!!!!!!!!
>>754 答えていただきありがとうございます
Variantの宣言とは どこに何を付け足したらいいでしょうか?
理解できなくてすいません...
ふぁ〜ぁ おまいら眠くなってこないか?
じゃあただの荒しか
は?
苦だスレもついに寝たスレ化したか・・・
まともな初心者なんかいなくなったからだね
>>773 全部初心者に押し付けるなんて凄いね。
あ、なるほど。君みたいな初心者が増えたのなら仕方ないね^^;
>>775 初心者質問なんかここ数日ないだろ? レベル低い質問と初心者質問とは違う
最近のDelphiに嫌気さしてユーザ辞めてく人が多いのに、入門者がいないんで
この板の厨房スレも閑散としてるわな。
人少なくなって、回答者の質も激さがり・・・・これが大きい
フリーの6を使ってる人はもう脱初心者だろうし
D8からはDelphiに飛びつく人はDel房だけだろうし
.NETするならVCL.NETなんかよりFrameWorkのオブジェクト覚えた方がいいし、
バージョンアップは期間2段階設けて値段変わるし、
前Verのバグはほったらかしで新Ver出すし、
業界じゃDelphi開発するする企業は更に減っていくだけだし、
結局ホビーユーザー向けに成り下がってるのにエンタープライズ版なんかあるし、
ヘルプは手抜きだし、
日本HPも手抜きだし、
電話対応悪いし、
声がオタクっぽいし、
風呂の温度がずれてるし、
ヘソのピアス跡が痛々しいし、
中だしは拒否するし、
マットは下手だし、
たまに時短するし、
うーん・・・w
ほんとにもう駄目かもわからんね
del5だけで業界生きてきた俺には次何すりゃ良いのさ?
やっぱC++とかビジュアルC・・・? つーかそこらへんの違いもわからねぇ・・・
>>780 >ほんとにもう駄目かもわからんね
駄目でしょう。長角出るまではなくなることはないにしても。
>>780 俺Delphi初心者だけどCとC++とVC++は書けるぞ。
だから、何?
>>776 あなたの中で「初心者」はどのように定義されてるのですか?
厨は新しい語句を作りたがるよね。
何だよ「初心者質問」って。(´゚c_,゚`)
このスレだけで1本のフリーソフトが作れたので感謝してます。
>>782 俺はdel5一本でやってきたのさ。
昔にCはやったことあるけどいまいち出来てなかった。
で、数年後del5に救われた俺だがそれも消えつつあるのか。
Del5だけで生活できたんなら、C# だって C++ だってできそうなものだが・・・
ほんとだ、ここが最後の砦だったのに・・・・ついにネタスレになったか・・・・
俺は2時間それなりに楽しめて3回出来れば◎
大抵2本だけど流れもあるし楽しめればそれも◎
>>766 エラーの出てるUnitのusesにVariantsを書け。
usesが見つからなかったらUnit毎に検索しろ。
検索はCtrl+Fだ。出てくるダイアログの入力場所に"uses"のタイプしろ。
タイプの仕方がわからなかったら、パソコン教室に通え。
以上
まぁガンバリナ
794 :
デフォルトの名無しさん:05/01/27 17:22:15
>>736 ボタンの位置は変わるのですが、enabledやvisibleがめちゃくちゃになります。
ToolButtonを3つ作って、ToolButton1のEnabledをFalseにして
procedure TForm1.ToolButton3Click(Sender: TObject);
begin
ToolButton1.Left := toolbutton3.Left;
end;
を実行すると位置は変わりますが、ボタンをクリックすると
ToolButton1とToolButton2のEnabledがFalseになります。
どうしてですか?
ほんとのToolbar32クラスはカスタマイズ可能なんだけど、VCLはそれをさぼってるんだよな
NameA
MailA
commentA(ここが複数行の場合がある)
NameB
MailB
commentB
・・・
のように続くデータを繰り返し処理するときはどうすればいいですか
途中が複数行になる場合があるのでNameをTstrings.Lines[i*3]とかで取得できません・・・
複数行になってるかどうかどうやって知ることができるの?
それが分かればかいけつなんじゃないの?
>>797 繰り返し、どうしたいの?
「複数”行”」って、どういう意味?
>>797 前もって行数を指定しておく
NameA
MailA
CommentCount=3
comment1
comment2
comment3
NameB
MailB
CommentCount=1
commentB
・・・
Commentを一行にまとめる。Comment := TStringList; Comment.CommaText := lineで取得。
NameA
MailA
comment1,comment2,comment3
NameB
コメントの終端を決めておく。ただし"[ENDOFCOMMENT]"というコメントを入力されると誤動作する。
NameA
MailA
comment1
comment2
comment3
[ENDOFCOMMENT]
NameB
自分でデータ構造考えろ
たとえば
NameA[#0]MailA[#0]commentA[#0]NameB[#0]MailB[#0]commentB[#0][#0]....NextEec
当然バイナリとして扱う、テキスト定型に展開する処理も必要
あくまで一例であってどういう構造にするかは作者の勝手
レスありがとう、基本的にデータの構造は変更しない前提で悩んでましたが
このままだとどうしようもなさそうなので構造から変えることにします
803 :
デフォルトの名無しさん:05/01/28 08:37:38
Labelを使って右から現れて左へ消える、
流れる文字列を表示するにはどうすればいいですか?
ニュースの字幕みたいなことをしたいんですが…。
TStrings[n] := TStrings[n] + 'っうぇうぇ'; としたらリストのインデックスが範囲を超えてると言われました
文字列の末尾にただ連結させたいんですがどうしたらいいのでしょうか
805 :
デフォルトの名無しさん:05/01/28 10:15:46
Delphi2005 はかなりヤバいっすか?
Delphi8 にしといた方がいいっすかね…。
まだ買えるのかな、Delphi8。
>>803 ひとつの手段としては、タイマー使ってLeftを-1すれば良い
>>804 Count-1 を使えば? n が駄目なんだよ
>>803 Marquee Delphi でググってごらん、たくさんコンポがあるよ
>>805 Delphi8 は Delphi.NET 専用だよ。いまどき使ってる人いないよ
811 :
デフォルトの名無しさん:05/01/28 10:46:24
すいません。ボタンの表示色って変わらないんでしょうか?
ColorプロパティがFontの中しか見つからないので。
ホントすいません、お願いします。
Windows の仕様でボタンの色、テキストの色は変更できません
TBitButtonならテキストカラーのみ変更できる
>>812,813
ありがとうございます。できないんですねorz
Panel使って「ボタンだ!」って言い切ります。
>>809 やっぱできません このへんよくわからないで使ってるせい臭いので手直しお願い島す
var aaa: TStringList;
begin aaa := TStringList.Create;
〜〜〜
aaa[n] := aaa[n] + 'っうぇうぇ';
aaa[aaa.count-1] := aaa[aaa.count-1] + 'っうぇうぇ';
最初の一行は当然 add してるよね?
>>815 nの値は何
StringListに1行もデータないんじゃないのか?
だあああわかりました、空のとこに追加しようとしてたから出来てませんでした
ありがとうございますお騒がせしました
Image1 := TImage.Create(Self);
Image1 := TImage.Create(Application);
Image1 := TImage.Create(nil)
それぞれの違いを教えてください
上から Owner がそのハンドラのオブジェクト、Application, なし ってこと。
Owner について知りたければヘルプをどうぞ
ある文章にある指定した文字列をクリック、もしくはマウスを文字列上に移動させたときに、
その文字列の簡単な説明が書いてあるウインドウ?を表示させたいんですが
どうしたらいいんでしょうか?
英語と違って、日本語は語句が空白で区切られてないから、難しいだろな
>>822 なんか漠然とし過ぎっつーか、どういうファイルの文字列の事言ってるの?
小説などのストーリーをまとめるのに使えそうなプログラムを作ろうとしているんですが
その中のキャラクターのプロフィールを表示する画面で
あらかじめ作成しておいた辞書みたいなものに登録した単語の内容を
そのプロフィール画面で簡単に見れたら便利かと思って作ろうとしたんですが・・・。
ファイルはテキストファイルで多くて50行ぐらいの文章です。
辞書に登録する単語数もそれほど多くならないと思います。
>>805 D2005で.Net切れば現状では一番いい。
なんだかんだ言いながらD2005は使ってる人多い。
Delphi Configuration Managerでさらに使用するのだけ絞れば
さらに安定度は増す。
でも、いろいろやるの面倒な人はD7使っとけ。(D8は論外じゃ!!)
>>822 onMouseClick or onMouseMoveでポインタの座標上の単語を調べて
動的にフォームを作成して表示、引数にその単語を渡してFormShowで表示
どうもスマートじゃないな・・
>>822 よ〜わからんが、俺ならこうする。
ヒント出したいコントロールのShowHintをTrueにして、TApplicationEventsをはっつける。
OnShowHintって言うのがあるからそこで説明のヒントを書くべし。
ヒント出したい単語はTStringListやらのクラスで読み込むときになんか目印でもつけとけ。
Hint出すたびに文字列を走査してたんじゃ遅いからな。でも50行ぐらいならそれでもよし。
829 :
デフォルトの名無しさん :05/01/28 18:36:42
文字列を先頭から1文字づつループで取得したいのですが、
以下のコードだと全角・半角が混在した際に正しく取得できません。
MidStr関数しか出てこないのですが、何かほかに適切な関数などあるのでしょうか?
ShNM : String;
cntNM: Integer;
for cntNM := 1 to Length('AAaa') do
begin
ShNM := MidStr('AAaa',cntNM,1);
end;
やり方は色々だが
Upperなどで大文字にした文字バッファ内で検索して文字位置を得る
それと、検索はPosだろ
>>829 やり方はま〜人それぞれとして。
これでやってみな。
var
ShNM : WideString;
cntNM: Integer;
begin
for cntNM := 1 to Length('AAaa') div 2 + 1 do
begin
ShNM := MidStr('AAaa',cntNM,1);
ShowMessage(shNM);
end;
end;
続けてすいません。
ギコナビに似た機能があるので少し調べてみたいと思います。
>>001 ←こういうやつ。
834 :
829:05/01/28 20:01:15
>>830,832
レス有難うございます。
>>832の方法を試してみたのですが、
全角がやはりうまく取得できませんでした。
835 :
829:05/01/28 20:17:17
追記すると、
文字列は英数ひらがなカタカナ何でも入る仕様です。
MidStrだとバイト数で持ってきてしまっているようなので、
WideString型の文字を一つづつ取れる方法は無いのでしょうか?
調べているのですがみつからないです(泣
なにがやりたいのか良く分からないが
>829の[質問文]だけみると一文字ずつのループはstring[nn]でいいんじゃないの?
特定文字列ならpos、copy、UpperかLowerで駆使しながら繰り返す
マルチバイト文字考慮するなら、それようにすればいい
大文字小文字=マルチバイト文字と勘違いはしてないよね?
837 :
デフォルトの名無しさん:05/01/28 20:21:58
memo.lines.add で文字列を入れると
カーソルが一番下にきてしまいます。
これを一番上にもって来るにはどうすればいいですか?
selstart:=0だめでした。
StringToWideChar
なんと恥ずかしいというか
↓でなんとかとってこれました。
ShNM := Copy(WideString('AAaa'),cntNM,1);
すすすいません;
伝票などの入力で使う1行が複数行のグリッドってみんなどうやってる?
フレームで1行つくって動的に行数分生成してってやってるんだけど、激しく重い......orn
グレープシティーのDenpyoManみたいなコントロールがあればいんだけど、
なんかいい作りかたないでしょうか?
FAQ 日某にあるよ
> 1行が複数行のグリッド
意味不明
843 :
デフォルトの名無しさん:05/01/28 22:54:03
例えば、
hogehAogeAkgewpkgapkA
この文字列中にある「A」の数を得るには
どうしますか?
>>841 TIPSの「複数行入力できる StringGrid を作成する」のことでしょうか?
これだったら複数行違いです。
>>842 うまく説明できない。
まずは、このコントロール(?)の説明から教えて・・orn
>>843 とりあえずこれで動く
効率化とかは自分で頑張れ
var
Cout: Integer;
begin
end;
>>843 function GetNumberOfChar(const Str:string; Chr:Char):integer;
var
p:PChar;
begin
result := 0;
p := StrScan(PChar(Str),Chr);
while (p<>nil) do
begin
Inc(result);
p := StrScan(p+1,Chr);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(GetNumberOfChar('hogehAogeAkgewpkgapkA','A'));
end;
セル内文字をマルチラインにしたいのか?
おれも>842に同意。グリッドに対して「行」はグリッドの行を指す事になる。
途中で送信しちまった…スマン
846氏の方法と概ね同じ
DBならコントロールグリッド。←これ曲者コンポだが
フレーム作って独自でやってるとか書いてあるが、その実装方法が問題なんじゃない?
パネルを動的に作ってやったのあるが普通に重くは無い。
>>843 Length(s) - Length(StringReplace(s, c, '', [rfReplaceAll]))
TScrollBoxにTStringGridをおいているのですが、
Gridから別のコントロールにフォーカスを写して戻すと
ScrollBoxのスクロール位置が0に戻ってしまいます。
ScrollBox.ScrollInViewが呼ばれているのが原因みたいなので、
これを無効化したいのですが、
ScrollBoxを継承してpublicにScrollInViewを定義しなおせばいいのでしょうか?
定義する場所を変えたりしてやったんですがどうもうまくいかないのでよろしければご教示下さい。
すみません書き込んだ直後に見つかりました…
AutoScrollInViewの方をオーバーライドすればよかったみたいです。
>>839 おいおい、ちゃんと意味わかって使えよ。
StringとWideStringの違いはわかってんのか?
var
List : TList;
pi : PInteger;
begin
New(pi);
pi^ := 10;
List := TList.Create;
List.Add(pi);
//中略
List.Free
end;
この場合ってPIntegerに確保したメモリはリストが削除される時に
Disposeしてくれるんでしょうか?
piがうまく開放されるかどうか?
心配するな、うまい事行ってる、あとは
心配するな
されないだろ
明示的にDispose(PInteger(p))しないと
嘘言うなよ
TListが管理するのは、ポインタアドレスでポインタの先は何もしないだろ
Delete時にDisposeしな
case文で
1 :
2 :
それぞれのところに複数行ずつ処理を書きたいときはどうすればいいですか
1:
begin
end;
2:
begin
end;
そのまんまでよかったんですねありがとうございます
TThreadから派生したクラスで、FreeOnTerminateプロパティを
Create時やExecuteの先頭でTrueにしている場合、
TMyThread.Create(False);
だけ書いても、Executeで永久ループ等無ければ
ちゃんと破棄されてリーク等はありませんよね?
気になるならMemCheck辺りで確かめとけ
>>863 MemCheckって初めて使った。
ちゃんと破棄されていたようです、ありがとう。
865 :
デフォルトの名無しさん:05/01/29 13:36:30
ディレクトリコンボボックスで、準備の出来ていないドライブをクリックした時に
I/Oエラーを表示させないようにするには?OnClickイベントではダメみたいでした。
866 :
デフォルトの名無しさん:05/01/29 13:38:06
あっ!ドライブコンボボックスでした!
>>862 心配なら、FreeOnTerminateを明示的にtrueにしておけ
>>865 TDriveComboBox.onChangeイベント内で例外捕捉
try
DirectoryListBox1.Drive := DriveComboBox1.Drive;
except //例外処理
showmessage('エラーれすよ');
end;
870 :
865:05/01/29 14:49:49
>>869 有難う御座います。でも、ここでエラーしないようです。どうも
ここでは、まだドライブが変更されていないので
>>DirectoryListBox1.Drive := DriveComboBox1.Drive;
は成功するようです。
871 :
865:05/01/29 15:07:15
あっまた間違えた、え〜っと、
TDriveComboBox.onChangeイベントは発生しないみたいです。
onClickのところで処理するしかないようです・・・・
>>840 俺はDbAltGridを使用している(翻訳英語でいろいろでも直ぐにサポートしてくれるから)
けど、Gridがいやな人もいるのでそんな人にはDBCloneGridを使用している。
×翻訳英語でいろいろでも直ぐにサポートしてくれるから
○翻訳英語でも直ぐに回答してくれて、サポートしてくれるから
875 :
デフォルトの名無しさん:05/01/30 00:05:34
画像ビュアーのサムネイルファイルの構造を考えています
ストリームで
ファイル数
ファイル名長
ファイル名
JPEGバイナリ長
JPEGバイナリ
の様にするつもりだったのですがサムネイル生成後にサムネイルのサイズが変更された場合
ファイルを一番頭から書き直す以外修正方法はないのでしょうか?
アドバイスお願いします
イミワカリマセン
877 :
デフォルトの名無しさん:05/01/30 00:14:50
複数の値を同時に返す関数って作れますでしょうか?
A := 関数(x1,x2,…);
↑配列
見たいな?
出来ます
>>875 新しいサムネイルのサイズが減るだけならそのまま上書きする、
サイズが増えるならそのブロックは放置してファイルの末尾に追加、
放置されたブロックは後から他のデータで再利用できるなら利用する。
あとはサイズが多少増えてもいいように最初からちょっと多めに取っておく。
どの程度のマージンがあればいいのかはかは統計を取ってみて決める。
880 :
デフォルトの名無しさん:05/01/30 00:18:22
う゛ぁr
>>877 出来ない。レコード・クラス・配列なんかで無理やり複数返すか
関数(var ret1: integer; var ret2: string; out ret3: double);で引数に返したい値をセットする。
>>877 >↑配列
見落としてた・・・
同じ型の配列なら返せる。
スクリプトみたいにいろいろな型の値を放り込んで返すのは無理。
ばりあんと
>>879 なるほど
変更後のバイナリで飛ぶ位置を保存すればいいのですね
ありがとうございました
885 :
デフォルトの名無しさん:05/01/30 00:27:16
なんだ、人居るんじゃないか。いっぱい沸いてきたな
人キタ━━━━(゚∀゚)━━━━ !!
キエタ....
889 :
デフォルトの名無しさん:05/01/30 05:57:34
年末より始めた初心者です。6.0Personal。
実行後にウィンドウサイズを変更すると、いきなり落ちるのはどういった
事が考えられるでしょうか?
内容は「デバッガ例外が発生 〜アドレスFFFFFFFFに対する読込違反」
です。フォームの設定かコードの問題かさっぱり分かりませんです…
そんなことは無いと思うが、初期生成される全く空のフォームでもなるのか?
リサイズのイベントが発生してそこで落ちてるんだろ。
怪しげなイベントハンドラにブレーク張りまくってステップ実行。
892 :
889:05/01/30 06:42:11
こんな時間なのにお返事すいません。
>>890 説明がラフですいません。
特定のprocedureを実行した後だけです。
tabシートの中にStringGridを貼り付けていて
その中に検索結果を表示させるだけなのですが、
表示終了後にウィンドウサイズを変更した時落ちるんです。
>>891 リサイズのイベントは拾っていません。
まだ拾ってるイベント自体いくつもありません
TabSheetやGridは動的に作ってるのか?
検索や表示内容部位は不要でTabSheetやGridを設定してるところ晒してみ
>>892 StringGrid - tabシート…とだんだんコントロールを外していってシンプルな形にしていって
どれを外したときに落ちるのかを検証して原因を特定汁。
895 :
sage:05/01/30 12:25:42
>>892 それ配列でメモリ確保してないところに値をいれようとしてない?
var s: array of string;
begin
SetLength(s, 10);
end;
とやってるのに
s[11]:= 'hoge';
とやろうとするとそういう事になった気がする。
実際に上のコードを打ち込むと「インデックスが範囲を超えた」って趣旨のエラー文が出るんだが
for i:=0 to 11
s[i]:= 'hoge';
とかやってると「アドレスが…」というエラー文が表示されて大いに困惑する。
だったはず。
もう一度グリッドのインデックス周り中心にコードを見直してみては?
ほかに配列変数使ってるならそっちも。
基本的なボケを…orz
あげてしまってすいません。
>>892 >特定のprocedureを実行した後だけです。
自分で原因書いてるじゃん。
898 :
デフォルトの名無しさん:05/01/30 14:43:32
Indy使ったときに、
インターネットに接続していないと、
ConnectionErrorとかダイアログが出てきますが、
あのメッセージを自分で変更できないのですか?
また、表示させない設定にはできないのでしょうか?
ご存知の方、よろしくお願いします。
899 :
デフォルトの名無しさん:05/01/30 17:25:37
マジか
900 :
デフォルトの名無しさん:05/01/30 19:24:11
ScrollBox1というボックス内で特定の動作をしているときに、カーソルがそのボックスから出ないようにするにはどうしたらいいのでしょうか。
嫌がらせアプリ書いちゃダメー!
ClipCursor
ありがとうございました。
IDE内ではなく、コンパイルしたexeファイル単体で動かすとどうか。
よーし、おまいら!今日は暇な俺様が常駐してやるからどんな質問でも掛かってきなさい
Delphi7で
ShellTreeView1.Path:~'C:\Windows';
とすると少し待たされます。どうにかなりませんか?
起動時にパスを選択したいのですが、上のようにすると起動が遅くなるので何とかしたいのです。
ShellTreeViewを使わない
ShellTreeView1が選択された時になにかの表示をしている?
C:\Windowsにはファイルがいっぱいあるだろ?それを表示してる処理が遅いとか?
またShellTreeView1の表示はフォルダだけ?
たとえば全ファイルとかなら、TreeViewのアイテムが増えるわけだから、その分遅くなる。
OpenDialogとかでも同じ事が起こるよね。
Delphi のせいじゃない
つまりCPU/HDDが遅いとストレス
どうやらフロッピーにアクセスしていて遅いようだ。
BIOSでフロッピー切ったら速くなったわい。
Delphiのせいのようなんでソースファイル眺めてみるわ。
>908が正解かな、他のコンポーネントも探してみます。
みなさん見当違いのレスありがとうございました。
逆切れするのは勝手だが、フロッピーなら質問する前にカシャカシャ音がして気付くだろ
それにフロッピーにアクセスしてるのはShellTreeViewじゃないと思うぞ
>>914 別に切れてませんよ。ちょっと人とのコミュニケーションに慣れてないだけです。
私のPCにはフロッピーは付いてないんで、カシャカシャと音は鳴りませんです。
もう少し勉強いたします。ありがとうございました。
ボタンクリックしたらPageControlにタブ追加したり削除したりするにはどうすればいいですか
ヘルプ読んでもよくわかりませんでした。
>>915 質問しといて
>>913みたいな書き方は異常っぽいから
普通に敬語のままとかにしたほうが良いよ。
>>907みたいな人とはRealで関わる事がないようにしたいなぁ^−^
>>907 氏ね。二度と質問するなカス。
てめぇなんかプログラミングやめちまえよ無能。
ヘルプからの抜擢:ページコントロールの使い方
NewTabSheet =TTabSheet.Create(PageControl1);
NewTabSheet.PageControl :=PageControl1;
ほっとけば良いんだが矛盾してるし最初の質問の仕方も抽象的で悪い
そもそもフロッピーアクセスでストレス掛かるのは、装置の応答の間であって
この間にガシャガシャとアクセス音がする、装置が付いてなければ起こらない。
更に浅はかなのは、BIOS切って解決って?使うユーザーが貴方だけって事になるし、
アプリとしての品質は悪い。
俺様が何でも聴いてあげるから、日頃のうっぷんを晴らしなさい。
CreateOleObjectでVariantに値を取得して使ってます。
CreateOleObjectに成功したか、Variantの値で判定したいのですが
nilじゃ互換性のない型としてエラーが出ます。
Unassignedで判定すればいいのですか?
var hoge Variant;
if hoge = nil then ×互換性のない型
if hoge = Unassigned then エラーは出ないけどあってるかわからない。
ヒントじゃ
CreateOleObjectの戻り値はIDispatch
IDispatch(hoge) = nilですか?
失敗すると例外発生するわけで、そもそもチェックする必要がない。
var
dp: IDispatch;
v: OleVariant;
label Ahhh;
begin
dp := CreateOleObject('オナニー');
if dp = nil then goto Ahhh;
v := dp;
// いっぱい愛撫
Ahhh:
// フィニッシュ
end;
サイズの違う2次元の配列定数を関数の返り値として返したいのですが、
関数の返り値の型をどう定義すれば良いかわかりません。
const array1: array[0..1] of array[0..1] of String = 省略;
const array2:: array[0..2] of array[0..2] of String = 省略;
(省略)
if 条件 then Result := array1 else Result := array2;
こんな感じにしたいのですが、
配列定数で返すのは不可能なのでしょうか。
動的配列に組みなおすのはサイズが結構大きいため
時間がかかりそうなので避けたいのです。
>>929 自分でType〜endの型定義
Object Pascalは型に(ry
record/case
不可能、関数の型決まってる訳でしょ。
ポインタにすればいいけど、呼び出し元でどっちが返ってきてるのか判断するようにしないといけない
>>930 array1型とarray2型を定義しても
関数の返り値に指定できるのは1つだけだったと思うのですが。
申し訳無い、始めてまだ1月も経ってないため、
理解できてない部分が多いので勘違いしていたら聞き流してください。
>>931 こう言う場合に record/case 使えばいいのですね。
ありがとうございました、試してみます。
>>934 array1とarray2を含む独自の型を定義する
あるいは参照渡し(var)で戻り値を得る
便乗質問だけどrecord/caseって何?
936 :
デフォルトの名無しさん:05/01/31 17:19:09
Windowsでディレクトリやファイル名を補完してくれるエディットボックスがありますが
あれをDelphiで利用するにはどうすればいいですか?
>>935 レコードの一部のフィールドの型を切り替える仕組み。
レコードのヘルプ嫁。
>>931 record/case を試してみましたが (6.0では)
String には使用できないようです。
ですが数値関係には利用できるので半分は問題が解決しました。
ありがとうございました。
String の方に何か方法が無いか record 周り含めて Help を
もうちょっと読み込んで見ます。
>>937 こんなの初めて知った、どうもです
>>938 ヘルプ読んだところStringは
String[n]とかarray[0..255] of Charで対応できそう
Cでのunionが入り込んだ構造体を定義するにはめんどくせーぞ
>>939 デストラクタを必要としない型なら大丈夫そうですね。
ありがとうございました。
よく考えたら、
これも時間とメモリサイズのトレードオフになるのですね。
仕方ないか。
速さを求めるなら1次元にしろよ
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
945 :
デフォルトの名無しさん:05/01/31 19:46:10
D2005でRAVEを動的クリエイトして動かそうとしています。
んで、DataTextに表示させるTextのことで困っています。
Pageが変わるごとにDataTextに違う値を放り込みたいのですが、どうしてもできません。
DataFiledにReport.CurrentPageを入れれば
ページ数が表示されているので、できるとは思うんですが・・・
1個ずつクリエイトしていては激重なのでどうにかしたいんです。
ヒント下さいお願いします。
946 :
デフォルトの名無しさん:05/01/31 21:15:06
RichEditを継承してコンポーネントを作っています。困ってます。
キー入力を反映させる前にSelTextをある変数に控えておきたいのです。
例えばBackSpaceを押下する場合、OnSelectionChangeなどでは
範囲選択された文字をすべて消してしまってからイベントが発生してしまうので、
当然SelTextの中身は空っぽ。
EN_SELCHANGEなんかを捕まえてもだめだし、もうよくわかりません。
どうにかしてください。
常にSelTextをある変数に控えておけば?
あなたが問題としてるイベントでこの変数を使えばいい
「例えば」のくだりからすると、
範囲選択したときに保存すればいいんじゃないの?
そういう「動き」じゃなくて、そういう事をなぜしたいのかという、
用途というか目的を書いた方がよい
レスありがとう。。。
>>947 常に控えるやり方も試してみたんですけど、
「常に控えている」だけに、使う時には既にもう空っぽなのです。。。
>>948 なるほど。
複数回アンドゥ/リドゥ機能を実装したいと考えています。
そこで、「テキストに何かしらの変更かあったとき、どの部分が変更されたか」
を控えておく必要があったのです。
>範囲選択したときに保存
これ、よさそうですね。「範囲選択した時」のタイミングを得る方法さえわかれば・・・
ちょっと調べてみます。。
RichText2.0なら複数回Undo/Redoに対応してるけど、
DelphiのTRicheEditは1.0なんだよねー。
2.0用のpasファイルはあるのにね。
952 :
デフォルトの名無しさん:05/02/01 01:53:19
var
lIniFile : TIniFile;
***.pas(***):未定義の識別子 : 'TIniFile'
なんで?
考えうる原因を教えてください。
ここに至るまでのセミコロンとかbegin endがおかしいとかそういうオチ?
指定した場所の色を取得させるにはどうしたらできますか?
>>952 Uses節にIniFiles を追加。
「へりくだれ」とは言わないけど、もう少し大人な質問の仕方が
あると思う…。
>>954 すいません&ありがとうございますです…。気をつけます。
>>953 Canvas.Pixels[x,y]
という話じゃなかったら場所って何か説明しろ
>>956 すいません、えっとデスクトップとか今画面に開いてるものの色です
>>957 GetWindowDC、TCanvas、Pixelsあたりを検索してみてください。
GetWindowDCなら、APIのGetPixelを使った方が良いでしょう。
960 :
デフォルトの名無しさん:05/02/01 07:08:22
実行時にあるフォームのサイズや位置を変更したとき、
それを他のフォームに反映させるにはどうすればいいですか?
同じようなこと勉強中なので参考までに。
Form1を移動させたりリサイズするとForm2に反映。uses Unit2;
ソース汚くてスマソ。
----------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormResize(Sender: TObject);
protected
{WMMoveメッセージの処理}
procedure WMMove(var msg: TWMMove); message WM_MOVE;
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{Form1の位置が移動された時はWMMoveメッセージで}
procedure TForm1.WMMove(var msg: TWMMove);
var
hForm2: HWND;
Rect:TRect;
Form2_Top,Form2_Left,Form2_width,Form2_Height:Integer;
begin
{Form2のハンドルをhForm2へ取得}
hForm2:=FindWindow(nil,'Form2');
{Form2の位置情報をRectへ取得}
GetWindowRect(hForm2,Rect);
{Rect情報からForm2の縦横幅を算出}
Form2_width := Rect.Right - Rect.Left;
Form2_Height:= Rect.Bottom - Rect.Top;
Form2_Top := Form1.Top;
Form2_left:= Form1.Left;
{Form2のハンドル(hForm2)へForm1のウインドウの位置座標(Form1_LeftとForm1_Top)をそっくり送る
縦横幅(Form2_widthとForm2_Height)は現状維持させる}
MoveWindow(hForm2,Form2_left,Form2_Top, Form2_width,Form2_Height,True)
end;
{Form1のサイズが変更された時はonResizeで}
procedure TForm1.FormResize(Sender: TObject);
begin
{Form1の縦横幅(width,Height)をForm2へ反映}
Form2.Width := Form1.Width;
Form2.Height:= Form1.Height
end;
end.
procedure TForm1.WMMove(var msg: TWMMove);
begin
FormResize(nil);
end;
でいいんでないの?
procedure TForm1.WMMove(var msg: TWMMove);
begin
Form2.Top := Form1.Top;
Form2.Left := Form1.Left;
end;
か。
>>951 むかし同じ事をしたことがあるけど、確かlinesをいじるとエラーが出ない?
ありがとう、って書くのも面倒なんか?
うざい、って書くのも面倒なんか?
972 :
デフォルトの名無しさん:05/02/01 21:06:39
1ヶ月くらいDelphiに粘着してたんですが…ほんとに超初心者です。
procedure TForm1.FormCreate(Sender: TObject);
begin
main_img.Picture.LoadFromFile('title.bmp');
story_lbl.Caption := ('')
name_lbl.Caption := ('')
serihu_lbl.Caption :=('')
end;
この文字列のstory_lblのところは正常に動きますが、name_lblとserihu_lblのところで
“演算しまたはセミコロンが必要です”とエラーが出ます。プロパティはnameのところ
以外変えてません。どうしたらいいでしょうか?
行末にセミコロン ; 付けろ
特定のディレクトリ内にあるファイル数を取得するにはどうしたらいいでしょうか?
また、その中で特定の文字列が先頭にあるファイル数を取得するにはどうすればいいんでしょうか?
>>973 あっ…。ありがとうございます。
激しく基本的なことが抜けてました。
>>974 ファイル数のカウント方法。
後は何とかなるでしょう。
var
sr:TSearchRec;
I:integer;
begin
I := 0;
if FindFirst('C:\*.*',faDirectory,sr) = 0 then //C\にあるファイルチェック。
begin
repeat
I := I + 1 ; //ファイルを見つけるたびに1づつ足していく。
until findnext(sr) <> 0 ;
end;
FindClose(sr);
end;
procedure ForApple;
begin
with Apple do
処理;
end;
end;
こんな感じのprocedureがあって、
そこではAppleに関することだけしか処理しません。
なので「with Apple do」が当たり前すぎるのですが、
どうにかしてさっぱりさせる事はできませんか?
さっぱりの意味がさっぱり分かりません。
こんな風に書ければいいなぁ、という希望例を示さないと。
with Apple, Orange do
begin
処理;
end;
とか?
>>979 えーと、こんな感じにしたいです。
procedure with Apple TForm1.ForApple;
begin
処理;
end;
もしくは、
procedure TForm1.ForApple;
with Apple do
begin
処理;
end;
どうですか?
>>980 いやOrangeは出てこないです。
Appleだけだからこその希望です。
procedure TForm1.ForApple;
begin with Apple do begin
処理;
end end;
このくらいで我慢しといて。
なにがしたいのかわからん
えーと、意味の分からなさは
くだすれならではという事で許してください。
自分には無駄で省略したい事も、
他人にとってはそうではなかったりするんだなって思いました。
レスありがとうございました。
やりたかったことは何となくわかるぞ
そして、それは多分無理
オレも省略好きだが、withはバグを生みやすいから気を付けろ
>>986 最近delwiki?というものを読んだが賛否あるみたいですね
おれもwithは嫌い
見づらくなるしややこしい
たまに
with xx do
begin
for ...... do
begin
....
....
with yy do
begin
....
with zz do
begin
....
超ムカツク
ピリオドやキャストだらけの式では使う。
with TWinControl(FTmpControl).Controls[i] do
Caption := Caption + IntToStr(Tag);
TWinControl(FTmpControl).Controls[i].Caption :=
TWinControl(FTmpControl).Controls[i].Caption
+ IntToStr(TWinControl(FTmpControl).Controls[i].Tag);
一時変数を使え? ごもっとも。
with文はvb風味の方が分かりやすいなぁ。
withの中のプロパティには先頭にドット付ける書き方。
withの入れ子は凄いな。
やっぱり、せいぜい二段くらいまでしか使わない。
でも、そこまでするくらいならさっさと一時変数にしてスッキリさせる方向だよね。