المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: كتبته لكن
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي C و ++C و C++.NET > أرشيف منتدى قسم السي ++
نشوان
بسم الله الرحمن الرحيم
الى الاخوة الاعزاء السلام عليكم ورحمة الله وبركاته

موضوعي هو اني قمت بانشاء برنامج يقوم بفتح نافذة وكل ماكتبه بواسطة لوحة المفاتيح يظهر

لكن المشكلة انه عند التنفيذ تظهر اخطاء هذه الاخطاء هي كالتالي
[code2]
--------------------Configuration: keystrokes - Win32 Debug--------------------
Compiling...
keystrokesView.cpp
D:vcppkeystrokeskeystrokesView.cpp(59) : error C2228: left of '.pDoc' must have class/struct/union type
D:vcppkeystrokeskeystrokesView.cpp(59) : error C2227: left of '->StringData' must point to class/struct/union
D:vcppkeystrokeskeystrokesView.cpp(59) : error C2661: 'TextOutA' : no overloaded function takes 1 parameters
D:vcppkeystrokeskeystrokesView.cpp(113) : error C2143: syntax error : missing ';' before ':'
Error executing cl.exe.

keystrokes.exe - 4 error(s), 0 warning(s)
[/code2]

اما بنسبه لشفرة فهي كالتالي
[code2]
// keystrokesView.cpp : implementation of the CKeystrokesView class
//

#include "stdafx.h"
#include "keystrokes.h"

#include "keystrokesDoc.h"
#include "keystrokesView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CKeystrokesView

IMPLEMENT_DYNCREATE(CKeystrokesView, CView)

BEGIN_MESSAGE_MAP(CKeystrokesView, CView)
//{{AFX_MSG_MAP(CKeystrokesView)
ON_WM_CHAR()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CKeystrokesView construction/destruction

CKeystrokesView::CKeystrokesView()
{
// TODO: add construction code here

}

CKeystrokesView::~CKeystrokesView()
{
}

BOOL CKeystrokesView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CKeystrokesView drawing

void CKeystrokesView::OnDraw(CDC* pDC)
{
CKeystrokesDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(0.0.pDoc->StringData);
// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CKeystrokesView printing

BOOL CKeystrokesView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}

void CKeystrokesView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}

void CKeystrokesView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CKeystrokesView diagnostics

#ifdef _DEBUG
void CKeystrokesView::AssertValid() const
{
CView::AssertValid();
}

void CKeystrokesView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

CKeystrokesDoc* CKeystrokesView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CKeystrokesDoc)));
return (CKeystrokesDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CKeystrokesView message handlers

void CKeystrokesView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default

CKeystrokesDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->StringData+=nChar;
:Invalidate()
CView::OnChar(nChar, nRepCnt, nFlags);
}
[/code2]


فقمت بحذف الجملة pDC->TextOut(0.0.pDoc->StringData); فذهبت كل الاخطاء لكن لم استطع الكتابة

فكيف اعمل
وشكرا

ارجاء من الاخوة التفصيل الممل لكوني مبتدى وشكرا
نشوان
الوجه الضاحك لم اضعه
وشكر
Smart Star
لو تكرمت ياريت تضع المشروع في ملف zip و تضع لنك له في المنتدى لكي نستطيع إنزاله و معاينته
Adel Khayata
السلام عليكم.
أخي نشوان لقد قمت بتعديل بسيط في موضوعك من أجل أن تظهر الشيفرة من اليسار إلى اليمين و عليك إحاطة الشيفرة بما يلي:
[ code2 ] و [ / code 2]
و بالنسبة لرسائل الأخطاء فقد وجدت التالي :أحدها و هو السطر و هو موجود في التابع OnDraw و في تعليمة TextOut بالضبط فأنت كتبت :
[code2]
void CKeystrokesView::OnDraw(CDC* pDC)
{
CKeystrokesDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(0.0.pDoc->StringData);
// TODO: add draw code for native data here
}
[/code2]
لاحظ كيف فصلت بين البارامترات بواسطة النقطة "." بينما يجب أن تستخدم الفاصلة "," أي يجب كتابتها كما يلي :
[code2]
void CKeystrokesView::OnDraw(CDC* pDC)
{
CKeystrokesDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(0,0,pDoc->StringData);
// TODO: add draw code for native data here
}
[/code2]
الخطا الآخر موجود في التابع OnChar الذي كتبته كما يلي:
[code2]
void CKeystrokesView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default

CKeystrokesDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->StringData+=nChar;
:Invalidate()
CView::OnChar(nChar, nRepCnt, nFlags);
}
[/code2]
لاحظ كيف كتبت : قبل Invalidate لذلك يجب إزالة ":".
مع التحيات
نشوان
بسم الله الرحمن الرحيم

اشكر كل من ساهم في مساعدتي وان دل هذا الشي انما يدل على طيب اصل الشخص

فالبرنامج اشتغل ولله الحمد

لكن اود وبكل خجل من الاخوان ان استفسر عن امور لكوني اتبع سياسة في كل شي ادخله وهي الحاجة ام الاختراع فارجوا الا يتضايق احد من كثرت الاسئلة او سذاجتها لكوني مبتدئ:

1- اريد تفسير لرسائلة (WM_CHAR)؟
2- العبارة(ASSERT_VALID) ذكرت في الكتاب الذي اتعلم منه وقال بانها احد تقنيات الفيجوال سي سؤالي ما عملها؟
3- العبارة(Invalidate) ماذا تعني وما عملها؟
4- هل يمكنني ان اجعل الكتابة مائلة بمعنا اكتب بوضع مائل بزاية مثلا 45 او موضع افقي ؟
5- هل استطيع ان اغير لون الخط وحجمه ؟
6-هل استطيع ان اجعل تحت الكتابة خط مستقيم او اجعل الكتابة مائلة كما في الوارد؟
7- هل يمكنني ان اضع خلفية لنافذةالتي تفتح لي لكي اكتب فيها ؟
8- هل يمكنن ان اجعل زر enterلكي انتقل الى سطر جديد فعال ؟
9- هل يمكنني ان اجعل زر المسح فعال؟
10- هل يمكنني ان اجعل الكتابة تبدء من اليمين ؟

اكرر اسف على كثرت الاسئلة وارجوا التفصيل الممل
Adel Khayata
السلام عليكم.
أخي نشوان أسئلتك كتيرة شوي بس مو مشكلةregular_smile.gif
أنا حجاوب على كم سؤال هلأ و بعدين بكمل الباقي أو بكملو أحد الأعضاءregular_smile.gif
بالنسبة لرسالة WM_CHAR فهي ترسل عندما يتم الضغط على زر على لوحة المفاتيح وهذا هو شكل الرسالة :
afx_msg void OnChar( UINT nChar, UINT nRepCnt, UINT nFlags );
البارامتر nChar يحدد شيفرة الزر الذي تم ضغطه
البارامتر nRepCnt يحدد عدد المرات التي تم فيها الضغط بشكل متواصل على الزر ( أي البقاء ضاغطا على الزر )
البارامتر nFlags يحتوي معلومات مثل شيفرة المسح للزر و هل الزر المضغوط هو أحد الأزرار الموسعة ( مثل ALT و CTRL )
بالنسبة ل ASSERT_VALID فهو عبارة عن ماكرو يقوم بالتأكد من صلاحية الحالة الداخلية لل Object الممرر له كبارامتر وليس لهذا الماكرو تأثير في نسخة ال Release أما في نسخة ال Debug فهو يقوم بفحص البارامتر فيما إذا كانت قيمته تساوي NULL ثم تستدعي التابع AssertValid التابع للبارامتر و إذا فشلت إحدى هذه العمليات فسيتم عرض رسالة إنذار.
أنا مشغول حاليا و سأكمل الرد غدا إن شاء اللهregular_smile.gif
مع التحيات.
neoo
السلام عليكم ،،،
أخ نشوان تسطيع حل الكثير من اللي تبيه عن طريق تحويل فئة الاساس لفئة View لديك إلى CEditView ... اما مسئلة تغيير الخط و الخلفية فهي مسئلة سهلة إن شاء الله ... . انتظر وإن شاء الله باشرح لك العملية ... تحت


تقبل تحياتي ،،،،،،
هاني الأتاسي
التابع Invalidate هو تابع عضو لل CWnd .. ووظيفته أمر النافذة باعادة رسم نفسها وهو يقوم بوضع WM_PAINT في رتل الرسائل . أي أن عملية اعادة رسم النافذة لن تتنفذ إلا عند الانتهاء من الروتين الذي استدعى Invalidate .. أما إذا أردت أن يوكن اعادة الرسم فوري وحالا فيجب استدعاء UpdateWindow بعد استدعاء Invalidate ..

التابع Invalidate يأخذ بارامتر واحد وهو BOOL وحينما يكون TRUE أي أنك تريد مسح محتويات النافذة أو اعادة رسم الخلفية أما FALSE فلن تمسح الخلفية ..

بالنسبة إلى موضوع الخلفية للنافذة فيوجد مثال وضعته في المنتدى من زمن وهو في الوصلة :
http://arabteam.nicmatic.com/vb/showthread...3?threadid=1865

وذاك المثال يشرح كيفية وضع خلفية ل CEditView .. ونفس الطريقة يمكن عملها على أي نافذة ..

بالنسبة إلى ASSERT و ASSERT_VALID فكلام الأخ عادل صحيح : ولكن حبين أن أضيف ما يلي :
ASSERT تستخدم للتأكد من صحة شرط معين حيث ASSERT هي عبارة عن ماكرو يتأكد من أن اشرط الذي بداخله هو TRUE وإلا يصدر رسالة خطأ فقط في نسخة ال Debug .. وهو جدا مفيد للتأكد من صحة قيم البارامترات الممرة .. فملا أنت كاتب روتين بحيث يستقبل بارامتر . ولكن من شروط التصميم يجب أن يكون هذا البارامتر بين 10 و 100 وبالتالي حتى تحمي نفسك من الخطأ أو حتى تحمي غيرك من ارتكاب خطأ وتمرير قيمة خاطئة فتكتب الروتين كالتالي :
[code2]
void MyFunc(int nValue)
{
ASSERT(nValue >= 10 && nValue <= 100);

.
.
.
}
[/code2]
الآن أثناء تصميم البرنامج أو في نسخة ال Debug فسوف تتأكد ال Assert السابق من التركيب المنطقي وتعلم المبرمج بخطأ إذا كان الشرط يؤول إلى FALSE ..
ويجب الانتباه إلى أن هذا الشرط أو هذا الفحص هو من أجل تنبيه المبرمج وليس المستخدم .. حيث إن تنبيه المستخدم كما تعلم يتم عن طريق رسائل في MessageBox كما تعلم ...

أما ASSERT_VALID فهي تمام مثل ASSERT ولكنها تستخدم للتأكد من صحة أي كلاس أنت كتبته بحيث يكون مورووث من CObject .. حيث تقوم بوراثة التابع AssertValid في كودك وتبرمجه من أجل التأكد من صحة قيم معينة في الكلاس تبعك :
(هذا المثال ماخوذ من MSDN) .. فرضا لديك CAge كلاس يجب أن يكون في أي لحظة العمر بين 0 و 105 .. ويصدر خطأ إذا تم استدعاء ASSERT_VALID على الobject الخاطئ :
[code2]
// example for CObject::AssertValid
void CAge::AssertValid() const
{
CObject::AssertValid();
ASSERT( m_years > 0 );
ASSERT( m_years < 105 );
}
[/code2]

وبما أن جميع ال Classes تبعة ال MFC أو معظمها مورووث من CObject فالأفضل طبعا استخدام ASSERT_VALID معها ..
نشوان
بسم الله الرحمن الرحيم
اشكر كل اخ ساهم في مساعدتي
لكن تحملو عندي بعض الاسئلة وهي ان شاء الله قليله
1- كيف اجعل الكتابة رابط بمعنا هل ممكن ان اجعل الكتابة وسيلة الى الوصول الى برنامج او ملف او تطبيق اين كان
2- هل ممكن ان اجعل الكتابة محركة مثل الاعلانات

وشكرا
نشوان
بسم الله الرحمن الرحيم

ودي اسال الاخ neoo عن مسالة كيف يتم تحويل الى CEditView

وشكرا
نشوان
بسم الله الرحمن الرحيم

ودي اسال الاخ neoo عن مسالة كيف يتم تحويل الى CEditView

وشكرا
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.