PDA

View Full Version : Message????



said ali
چهارشنبه 12 آذر 1382, 13:11 عصر
با سلام
در مورد این کد میشه بگید هر کدوم از توابعش چی کار میکنه:

procedure TForm1.WndProc(var Msg: TMessage);
var
p: TENLink;
sURL: string;
CE : TRichEdit;
begin
if (Msg.Msg = WM_NOTIFY) then
begin
if (PNMHDR(Msg.lParam).code = EN_LINK) then
begin
p := TENLink(Pointer(TWMNotify(Msg).NMHdr)^);
if (p.Msg = WM_LBUTTONDOWN) then
begin
try
CE := TRichEdit(Form1.ActiveControl);
SendMessage(CE.Handle, EM_EXSETSEL, 0, Longint(@(p.chrg)));
sURL := CE.SelText;
ShellExecute(Handle, 'open', PChar(sURL), 0, 0, SW_SHOWNORMAL);
except
end;
end;
end;
end;

با تشکر فراوان.

said ali
چهارشنبه 12 آذر 1382, 13:22 عصر
با سلام
ادامه سوال قبل در مورد تابع sendmessage میشه توضیح بدین چه جوری کار میکنه و مثلا اگه بخواهیم یه پیام با مثلا 5 تا پارامتر رو بفرستیم چه جوری میتونم این کار رو بکنم.
با تشکر

Inprise
چهارشنبه 12 آذر 1382, 14:08 عصر
دوست عزیز

به نظر میرسه این کد خواسته تا رویداد تبدیل خودکار آدرسهای اینترنتی به یه لینک رو توی کنترل استاندارد RichEdit پیاده سازی کنه اما این کد کمی اشکال داره و به چند نکته هم باید توجه کنی

الف) برای استفاده از توابع شل ویندوز حتما باید یونیت ShellApi رو به یونیت فراخوان تابع اضافه کنی . برای استفاده از پیامهای خاص RichEdit هم باید نام یونیت RichEdit رو به یونیت فوق الذکر اضافه کنید .

ب) این کد رو تو رویداد ساخته شدن فرم یا رویداد مشابهی مثل اون ( قبل از اینکه از RichEdit استفاده بشه ) بنویس :


var
Url: Word;
begin
Url := SendMessage(RichEdit1.Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, Utl or ENM_LINK);
SendMessage(RichEdit1.Handle, EM_AUTOURLDETECT, Integer(True), 0);ج) باید WndProc فرم مورد استفاده Override بشه .

procedure WndProc(var Message: TMessage); override;

د) ضمنا" درج کلمه کلیدی Inherited رو در انتهای تعریف Override شده تابع فوق نباید فراموش کنید .



ه)در مورد SendMessage قبلا بحث شده ، به جای پرسیدن سوالات تکراری تلاش کنید قدری جستجو کنید .

موفق باشید

said ali
شنبه 15 آذر 1382, 16:43 عصر
با سلام
با تشکر فراوان ولی منظور من چگونگی این کار و کار اون توابعی که توش استفاده کردند.
در مورد Send Message گشتم ولی چیزی پیدا نکردم :( :| :| :|
کمال تشکر رو دارم اگه در این مورد که چه جوری چند تا پارامتر رو بفرستیم توضیح دهید.

Behzad_Asharkhan
شنبه 15 آذر 1382, 18:03 عصر
سلام

Help اینجور توابع اینجاست.
Delphi7 ---> منوی Help ---> آیتم سوم Windows SDK

در مورد SendMessage :


The SendMessage function sends the specified message to a window or windows. The function calls the window procedure for the specified window and does not return until the window procedure has processed the message. The PostMessage function, in contrast, posts a message to a thread's message queue and returns immediately.

LRESULT SendMessage(

HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);


Parameters

hWnd

Identifies the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.

Msg

Specifies the message to be sent.

wParam

Specifies additional message-specific information.

lParam

Specifies additional message-specific information.



Return Values

The return value specifies the result of the message processing and depends on the message sent. >

said ali
یک شنبه 16 آذر 1382, 19:27 عصر
با سلام
عزیز من قربون شکلت اونو منم خوندم :evil: :evil: دنبال یه مثال هستم که چه جوری میشه چند تا پارامتر رو با این تابع بفرستی همونجور که میبینی این تابع فقط قابلیت ارسال دو پارامتر رو داره. امیدوارم منظورم رو درست بیان کرده باشم.
با تشکر فراروان :wink: :wink: .

Kambiz
یک شنبه 16 آذر 1382, 19:36 عصر
پارامترها رو داخل یک رکورد می‌گذاری و آدرس رکورد رو می‌فرستی.

said ali
دوشنبه 17 آذر 1382, 18:24 عصر
با سلام
با کمال تشکر میشه یه مثال بزنید من حالیم بشه :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: .