منزل
Top.Mail.Ru Yandeks.Metrika
المنتدى: "WinAPI";
الأرشيف الحالي: 2002.01.08;
تنزيل: [xml.tar.bz2];

إلى

كيفية إنشاء نماذج مع عناصر تحكم مختلفة على واجهة برمجة التطبيقات فقط؟ البحث عن فروع مماثلة


Oxy2   (2001-10-23 23:23) [0]

مرحبا بالجميع!

يمكن لأي شخص أن يرسل لي أو على الأقل أخبرني أين يمكنك الحصول على أمثلة بسيطة لإنشاء النماذج ، وضوابط مختلفة عليها ، وإنشاء معالجات الأحداث لعناصر التحكم هذه ، إلخ. على واجهة برمجة تطبيقات (Pure) (في دلفي أو ، كحل أخير ، في C). بشكل عام ، أمثلة بسيطة للبرمجة في API.



Jochua   (2001-10-24 06:25) [1]

دعني أخبرك ما أعرفه.



Oxy2   (2001-10-25 00:55) [2]

حسنا ، مثل هذا. من الضروري إنشاء نموذج يكون فيه ListView وزرين (زر). يجب أن يكون من الممكن التعامل مع أحداث الزر والحدث من ListView.



Иван Шихалев   (2001-10-25 01:10) [3]

لماذا WM_COMMAND و WM_NOTIFY غير مناسبين لك؟



Alien   (2001-10-25 02:51) [4]

> Oxy2
ننسى الأحداث. لا توجد أحداث في Win API. هناك رسائل ، هنا ومعالجتها.



Jochua   (2001-10-25 08:01) [5]

أنظر ، بطريقة أو بأخرى مثال على نفس الطلب:

program listbox;

uses
windows, messages;

var
wc : TWndClassEx;
Wnd : HWND;
Msg : TMsg;

function WindowProc(wnd : HWND; Msg : Integer; WParam : WParam; LParam : Longint): Longint; stdcall;
const
BUFFER = MAX_PATH;
var
I : Integer;
CurDir : array[0..BUFFER-1] of Char;

Begin
Result := 0;
case msg of

wm_destroy :
Begin
postquitmessage(0);
exit;
Result:=0;
End;

wm_command :
Begin
case loword(wParam) of
200 :
case hiWord(wParam) of
lbn_selchange :
begin
I := SendMessage(lParam, LB_GETCURSEL, 0, 0);
SendMessage(lParam, LB_GETTEXT, I, Integer(@CurDir));
SetWindowText(GetDlgItem(Wnd, 222), CurDir);
end;
lbn_dblclk :
begin
I := SendMessage(lParam, LB_GETCURSEL, 0, 0);
SendMessage(lParam, LB_GETTEXT, I, Integer(@CurDir));
SetWindowText(GetDlgItem(Wnd, 221), CurDir);
end;
end;

100 :
begin
GetCurrentDirectory(SizeOf(CurDir), CurDir);
DlgDirList(Wnd, CurDir, 200, 0, DDL_DIRECTORY);
end;

end;
End;
else
Result := DefWindowProc(wnd, msg, wparam, lparam);
end;
End;

begin
wc.cbSize := sizeof(wc);
wc.style := cs_hredraw or cs_vredraw;
wc.lpfnWndProc := @WindowProc;
wc.cbClsExtra := 0;
wc.cbWndExtra := 0;
wc.hInstance := HInstance;
wc.hIcon := LoadIcon(0, IDI_APPLICATION);
wc.hCursor := LoadCursor(0, idc_arrow);
wc.hbrBackground := COLOR_BTNFACE + 1;
wc.lpszMenuName := nil;
wc.lpszClassName := "listbox example";

RegisterClassEx(wc);

Wnd := CreateWindowEx(0, "listbox example", "ListBoxes Demo",
ws_overlapped or ws_sysmenu,
100, 150, 360, 200,
0, 0,
Hinstance, nil);

CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", NIL, WS_BORDER or LBS_NOTIFY or WS_CHILD or WS_VISIBLE or LBS_MULTICOLUMN or LBS_SORT or LBS_EXTENDEDSEL, 10, 70, 200, 100, Wnd, 200, hInstance, NIL);

CreateWindowEx(0, "STATIC", "dbl_click:", WS_VISIBLE or WS_CHILD, 10, 10, 60, 20, Wnd, 0, hInstance, NIL);
CreateWindowEx(0, "STATIC", NIL, WS_VISIBLE or WS_CHILD, 75, 10, 300, 20, Wnd, 221, hInstance, NIL);

CreateWindowEx(0, "STATIC", "Select:", WS_VISIBLE or WS_CHILD, 10, 40, 60, 20, Wnd, 0, hInstance, NIL);
CreateWindowEx(0, "STATIC", NIL, WS_VISIBLE or WS_CHILD, 75, 40, 300, 20, Wnd, 222, hInstance, NIL);

CreateWindowEx(0, "BUTTON", "Scan Directory", BS_PUSHBUTTON or WS_CHILD or WS_VISIBLE, 220, 130, 120, 25, Wnd, 100, hInstance, NIL);

ShowWindow(Wnd, CmdShow);

While GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.




Jochua   (2001-10-25 08:03) [6]

أنظر ، بطريقة أو بأخرى مثال على نفس الطلب:

program listbox;

uses
windows, messages;

var
wc : TWndClassEx;
Wnd : HWND;
Msg : TMsg;

function WindowProc(wnd : HWND; Msg : Integer; WParam : WParam; LParam : Longint): Longint; stdcall;
const
BUFFER = MAX_PATH;
var
I : Integer;
CurDir : array[0..BUFFER-1] of Char;

Begin
Result := 0;
case msg of

wm_destroy :
Begin
postquitmessage(0);
exit;
Result:=0;
End;

wm_command :
Begin
case loword(wParam) of
200 :
case hiWord(wParam) of
lbn_selchange :
begin
I := SendMessage(lParam, LB_GETCURSEL, 0, 0);
SendMessage(lParam, LB_GETTEXT, I, Integer(@CurDir));
SetWindowText(GetDlgItem(Wnd, 222), CurDir);
end;
lbn_dblclk :
begin
I := SendMessage(lParam, LB_GETCURSEL, 0, 0);
SendMessage(lParam, LB_GETTEXT, I, Integer(@CurDir));
SetWindowText(GetDlgItem(Wnd, 221), CurDir);
end;
end;

100 :
begin
GetCurrentDirectory(SizeOf(CurDir), CurDir);
DlgDirList(Wnd, CurDir, 200, 0, DDL_DIRECTORY);
end;

end;
End;
else
Result := DefWindowProc(wnd, msg, wparam, lparam);
end;
End;

begin
wc.cbSize := sizeof(wc);
wc.style := cs_hredraw or cs_vredraw;
wc.lpfnWndProc := @WindowProc;
wc.cbClsExtra := 0;
wc.cbWndExtra := 0;
wc.hInstance := HInstance;
wc.hIcon := LoadIcon(0, IDI_APPLICATION);
wc.hCursor := LoadCursor(0, idc_arrow);
wc.hbrBackground := COLOR_BTNFACE + 1;
wc.lpszMenuName := nil;
wc.lpszClassName := "listbox example";

RegisterClassEx(wc);

Wnd := CreateWindowEx(0, "listbox example", "ListBoxes Demo",
ws_overlapped or ws_sysmenu,
100, 150, 360, 200,
0, 0,
Hinstance, nil);

CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", NIL, WS_BORDER or LBS_NOTIFY or WS_CHILD or WS_VISIBLE or LBS_MULTICOLUMN or LBS_SORT or LBS_EXTENDEDSEL, 10, 70, 200, 100, Wnd, 200, hInstance, NIL);

CreateWindowEx(0, "STATIC", "dbl_click:", WS_VISIBLE or WS_CHILD, 10, 10, 60, 20, Wnd, 0, hInstance, NIL);
CreateWindowEx(0, "STATIC", NIL, WS_VISIBLE or WS_CHILD, 75, 10, 300, 20, Wnd, 221, hInstance, NIL);

CreateWindowEx(0, "STATIC", "Select:", WS_VISIBLE or WS_CHILD, 10, 40, 60, 20, Wnd, 0, hInstance, NIL);
CreateWindowEx(0, "STATIC", NIL, WS_VISIBLE or WS_CHILD, 75, 40, 300, 20, Wnd, 222, hInstance, NIL);

CreateWindowEx(0, "BUTTON", "Scan Directory", BS_PUSHBUTTON or WS_CHILD or WS_VISIBLE, 220, 130, 120, 25, Wnd, 100, hInstance, NIL);

ShowWindow(Wnd, CmdShow);

While GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.




Oxy2   (2001-10-25 23:50) [7]

مرحبا بالجميع!

2Ivan Shikhalev
> لماذا WM_COMMAND و WM_NOTIFY غير مناسبين لك؟
قد يناسبوني ، لكنني لا أعرف ذلك بعد. :-)))
حسنًا ، كتبت أنني أتعلم البرمجة فقط على واجهة برمجة التطبيقات (API) الخالصة. في السابق ، استخدمت واجهة برمجة التطبيقات (API) أيضًا ، لكن فقط بعض الوظائف الفردية التي كنت بحاجة إليها ، وما زلت أتعلم واجهة برمجة تطبيقات (API) خالصة. في الوقت الحالي ، أعرف فقط كيفية إنشاء النوافذ ومعالجة رسائلهم. من حيث المبدأ ، حاولت إنشاء عناصر تحكم أخرى على النافذة ، لكن لكل منها قمت بإنشاء وظيفة نافذة منفصلة. لم يعجبني حقًا (وإذا كان لدي أزرار 100) واعتقدت أنه ربما توجد طرق أكثر بساطة. لذلك ، سأل هذا السؤال.

2Alien
للأحداث ، ننسى ذلك. لا توجد أحداث في Win API. هناك رسائل ، ها هم و> عملية.
وأنا أعلم أنه في ويندوز ليست أحداث ، ولكن messagi. انها فقط لذلك ، للخروج من العادة ، وكسر. :-))

2Jochua
شكرا كبيرا على سبيل المثال. ولكن لدي سؤال مرة أخرى. أرغب في استخدام ListView ، وليس ListBox. لا تقل لي ما اسم الفئة لديه.



Jochua   (2001-10-26 06:28) [8]

نفتح ملف rw32core.dll (إنه موجود في BIN في Delphi) ونجد - SysListView32. إذا قمت بإنشاء كائنات من خلال WinAPI ، فلا تمر بهذه المكتبة. وهناك أعلن أن كل شيء يمكن أن يفهم دلفي. ثم نفتح تطبيق Message.pas - هذا هو المصدر / RTL / Win - وننظر في جميع الرسائل على الكائن الذي نحتاجه.



Oxy2   (2001-10-26 23:34) [9]

2Jochua
لم افهم اي شيء على الاطلاق. وكيف ذلك VC ++ دون هذا rw32core.dll يعمل. لذلك أنا أكتب بدلا من إنشاء ListBox في المثال الخاص بك مثل هذا الخط

CreateWindowEx (WS_EX_CLIENTEDGE أو "SysListView32" أو NIL أو WS_CHILD أو
WS_VISIBLE أو WS_VSCROLL أو WS_BORDER أو WS_CLIPSIBLINGS ، 10 ، 70 ، 200 ، 100 ، Wnd ، 200 ، hInstance ، NIL) ؛

لكن ListView لا يريد إنشاء أي شيء في القوس. تظهر نافذة ، لكن لا يوجد ListView عليها.



Jochua   (2001-10-29 10:04) [10]

هذا الملف مطلوب فقط لـ Delphi ، في VC ++ ، كل الأوصاف موجودة في ملفات ذات ملحق ".H". فحص فقط (D5 ، Win98) كل شيء يعمل. إذا كنت تريد أن تكتب عن طريق الصابون ، واحدة من الإجابات لها عنوان.



nikkie   (2001-10-29 13:35) [11]

> جوشوا
بعض الهراء. أين rw32core.dll؟
اسم المنتج الخاص بها هو Borland Resource Compiler DLL
لا تحويلة. المكتبات من بورلاند عند الكتابة في المعهد ليست مطلوبة.

> Oxy2
استدعاء InitCommonControlsEx مطلوب قبل استخدام عناصر التحكم العامة



Jochua   (2001-10-29 13:53) [12]

> نيكي
ليس أي هراء. انظر بعناية ، BRCC32 تدعو هذه المكتبة أثناء عملها و !!! إذا لم يعثر على المكون المعلن من WinAPI ، فسيتم رفض التجميع. استدعاء InitCommonControlsEx بشكل طبيعي مطلوب.



nikkie   (2001-10-29 14:05) [13]

تشغيل brcc32 وقراءة "مترجم الموارد بورلاند". ومن أين أتى؟



Иван Шихалев   (2001-10-29 20:22) [14]

> يوتشوا

أي نوع من الوحش هذا - "العنصر المعلن من WinAPI"



kowdle   (2001-10-30 00:07) [15]

اذهب إلى ... KOL http://bonanzas.rinet.ru/rindex.htm



Jochua   (2001-10-30 06:18) [16]

حسنًا ، إذا نظرت بعناية إلى ما كتب في وقت سابق ، كان هناك سؤال:
أرغب في استخدام ListView ، وليس ListBox. لا تقل لي ما اسم الفئة لديه.
الذي أجاب عليه:
افتح ملف rw32core.dll (هذا موجود في Delphi BIN) وابحث عن SysListView32.
أود أن أعرف كيف يمكن لأولئك الذين يعرفون الكثير أن يجمعوا مشروعًا يستخدم مكونًا غير موصوف في هذه المكتبة. لاحظ أيضًا أن مؤلف السؤال لم يشارك في هذا اللغز لفترة طويلة ، كما أنني أقطع الاتصال. سأجيب فقط المؤلف.



nikkie   (2001-10-30 09:40) [17]

> يوتشوا
حسنا ، افصل مجرد بضع كلمات للحاق بها.

على سؤال المؤلف "ما اسم الفصل" يوجد 2 من الإجابات المنطقية
1. ننظر إلى المساعدة (MSDN أو Win32 SDK) - نرى WC_LISTVIEW. هناك نجد مثالا.

2. إلقاء نظرة على أنواع VCL ، وهما commctrl.pas و comctrls.pas. نرى إعلان WC_LISTVIEW هناك ومجموعة من التعليمات البرمجية المثيرة للاهتمام ، على سبيل المثال ، طريقة آمنة لاستخدام InitCommonControlsEx.

عن إجابتك. "نحن نفتح ملف rw32core.dll" - إنه في المفكرة "e ، أم ماذا؟ وإذا رأيت BorBtn ، BorRadio ، ... - هل هذا له علاقة بـ WinAPI؟ وإذا رأيت" VasjaPupkin "هناك ، هل يمكنني المحاولة إنشاء نافذة من هذه الفئة؟

بعض الاقتباسات الخاصة بك بسبب الذي تشبثت به.

"إذا قمت بإنشاء كائنات من خلال WinAPI ، فلن تتمكن من تجاوز هذه المكتبة [rw32core.dll]. وهناك شيء تم التصريح بأنه يمكن لـ Delphi فهمه." [المشي بهدوء من خلال. و Oxy2 مرت ...

"هذا الملف مطلوب فقط لدلفي ، مع VC ++ ، كل الأوصاف موجودة في ملفات ذات ملحق" .H "." [القياس بين rw32core.dll ورؤوس sysnaya ، بعبارة ملطفة ، ليس واضحًا]

هذه الاقتباسات تعطي بعض الفوضى التي لديك في رأسك فيما يتعلق بهذا الموضوع. إذا كنت لا تريد تفكيكها - من أجل الله ، لا تقم بتحميل الآخرين.



_   (2001-10-30 14:49) [18]

> نيكي
ما يؤسف له أن يتم زيارة هذه المنتديات من قبل هذه لوطس. سيء للغاية والطموح - لا تحمل بعيدا.



Oxy2   (2001-11-01 00:04) [19]

مرحبا!

شكرا للجميع على النصيحة. آسف لعدم المشاركة. لديّ جلسة الآن - ركضت ولم أقرأ الرسالة لبضعة أيام.
ولا حاجة لأقسم بسببي ، وإلا في النهاية سأكون مذنباً لطرح سؤال. وأنا لا أريد هذا حقًا. :-))

الآن إلى هذه النقطة. من إجاباتك ، فهمت أخيرًا سبب عدم إنشاء ListView. كان من الضروري استدعاء دالة InitCommonControlsEx قبل الإنشاء ، لكنني لم أفعل ذلك (لأنني لم أكن أعرف أي شيء عنها). ولكن الآن كل شيء على ما يرام ويتم إنشاء ListView بشكل طبيعي. صحيح ، لدي القليل من النجاح مع InitCommonControlsEx اليسار. من الضروري نقل بعض الهيكل لهذه الوظيفة. لم يكن لدي أي فكرة عما يجب فعله واستخدمت الدالة InitCommonControls. كل شيء يعمل بشكل جيد مع ذلك ، لكنه ما زال مثيرًا للاهتمام فيما تفعله وظيفة InitCommonControlsEx.
يمكن للشخص أن يفسر بوضوح؟
وما هذه الطريقة الآمنة لاستخدام InitCommonControlsEx؟



nikkie   (2001-11-01 09:46) [20]

في الواقع ، كل شيء مكتوب في MSDN.

باطلة InitCommonControls (VOID) ؛
تسجيلات وتهيئة فئات نافذة التحكم الشائعة. هذه الوظيفة قديمة. يجب أن تستخدم التطبيقات الجديدة الدالة InitCommonControlsEx.

باختصار ، تقول Microsoft إنك تحتاج إلى استخدام InitCommonControlsEx. علاوة على ذلك ، فهي أكثر مرونة. يتكون الهيكل من حقول 2 فقط ، لذلك فهو سهل الاستخدام

فار
ICC: TInitCommonControlsEx؛
بدأ
ICC.dwSize: = SizeOf (TInitCommonControlsEx) ؛
ICC.dwICC: =
ICC_LISTVIEW_CLASSES | ICC_TREEVIEW_CLASSES | ICC_TAB_CLASSES.
// اذكر الفصول التي سنستخدمها
InitCommonControlsEx (ICC) ؛
الغاية؛

هناك واحد فقط ولكن. في مساعدة على InitCommonControlsEx مساعدة تقول النسخة 4.70. هنا هو النص
منصة توزيع الإصدار
4.00 Microsoft® Windows® 95 / Windows NT® 4.0.
4.70 Microsoft® Internet Explorer 3.x.
4.71 Microsoft® Internet Explorer 4.0.
4.72 Microsoft® Internet Explorer 4.01 و Windows® 98.
5.00 Microsoft® Internet Explorer 5.
5.00 Microsoft® Windows® 2000 و Windows Me.
5.80 Microsoft® Internet Explorer 5.
5.81 Microsoft® Windows 2000 و Windows Me.
6.00 Microsoft® Windows XP.

أي ، بشرط أن يكون لدى المستخدم Win95 بدون أي IE ، لن تظهر هذه الوظيفة في comctl32.dll. الوضع صعب التصور ، لكن ممكن :).

لكن دلفي (أو بالأحرى ، commctrl.pas) يساعدنا. يتم تحميل InitCommonControlsEx بشكل حيوي ، وليس بشكل ثابت. علاوة على ذلك ، مثل _InitCommonControlsEx ، و InitCommonControlsEx هي مجرد وظيفة باسكال
النتيجة: = معين (_InitCommonControlsEx) و _InitCommonControlsEx (ICC) ؛

خيار 1. مجرد استخدام InitCommonControlsEx
خيار 2. نحن قلقون جدًا من مشكلة تشغيل برنامجنا على Win95 بدون IE وكتابة شيء من هذا القبيل
إذا (وليس InitCommonControlsEx (ICC)) ثم InitCommonControls ؛
خيار 3. نحن لا نخدع أنفسنا ونستخدم InitCommonControls. على الرغم من أنها عفا عليها الزمن ، لكن 100٪ أن MS لن يرميها في الإصدارات المستقبلية.



صفحات: 1 فرع كامل

المنتدى: "WinAPI";
الأرشيف الحالي: 2002.01.08;
تنزيل: [xml.tar.bz2];

الطابق العلوي









الذاكرة: 0.66 ميغابايت
الوقت: 0.035 ج
1-22070
انتزاع
2001-12-18 21:53
2002.01.08
إدارة الخط مع قائمة POPUP


7-22432
Voldemar
2001-09-25 04:12
2002.01.08
مهمة الأولوية عند بدء التشغيل ...


4-22504
بيسا
2001-09-11 11:11
2002.01.08
WinExec neponyatka


1-22021
Socol
2001-12-18 08:54
2002.01.08
تحميل الملف!


4-22486
Pantero
2001-11-03 23:59
2002.01.08
مقبض





الأفريكانية الألبانية عربي الأرميني أذربيجان الباسكي البيلاروسية Bulgarian التشيكية الصينية المبسطة) تقاليد صينية) الكرواتية التشيكية دانماركي Dutch أنجليزي الإستونية الفلبينية Finnish جيب
الجاليكية الجورجية الألمانيّة اليونانيّة الكريولية الهايتية اللغة العبرية الهندية الهنغارية أيسلندي Indonesian الأيرلندية Italian اليابانيّة الكوريّة اللاتفية اللتوانية المقدونية الملايو المالطية Norwegian
اللغة الفارسية بولنديّة البرتغاليّة رومانية Russian صربي السلوفاكيّة سلوفيني إسباني السواحيلي Swedish Thai التركية الأوكراني الأردية الفيتنامية ويلزي اليديشية البنغالي البوسنية
السيبيونو الاسبرانتو الغوجاراتية الهوسا همونغ الإيبو جاوي الكانادا الخمير لاو لاتينية الماوري المهاراتية المنغولية النيبالية البنجابية الصومالية التاميل التيلجو اليوروبا
زولو
Английский Французский ألماني Итальянский البرتغالية Русский Испанский