نمایش نتایج 1 تا 14 از 14

نام تاپیک: شروع کلاس کامپوننت نویسی و OOP

  1. #1
    کاربر دائمی
    تاریخ عضویت
    دی 1382
    محل زندگی
    پشت كامپيوتر
    پست
    381

    شروع کلاس کامپوننت نویسی و OOP

    رخصت از بزرگان
    راستش پس از برنامه نویسی معمولی به این نتیجه رسیدم که در کد نویسی باید واقعا با تکنولوژی جلو رفت به سراغ OOPو کامپوننت نویسی رفتم تا تجربیات بالا رود ولی...
    خوب با همه هیبت کامپوننت نویسی دنبال هم پا هستم اگر کسی هست یا علی بگه و تا آخر با این گروه باشه :flower:


    همکارا با یا علی، قوانین این بخش را شروع کنن تا شاخ این را هم با هم بشکنیم

  2. #2
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    46
    پست
    6,379
    آقا جان کی گفته OOP شاخ داره؟

    OOP یکی از جالبترین متدهای برنامه نویسیه.

    سه تا مفهوم کلی داره: توارث (Inheritance) ، کپسوله‌سازی (Encapsulation) ، و چندشکلی بودن (Polymorphysm).

    حالا این موارد رو در بحث دنبال کنید.

  3. #3
    کاربر دائمی
    تاریخ عضویت
    دی 1382
    محل زندگی
    پشت كامپيوتر
    پست
    381
    سلام DelphiAssistant
    راستش چیزی نیست ولی کامپوننت نویسی ترکیبی با انواع عناصر با Messageهای زیاد ویندوز و دلفی برای من مشکله
    خوب اگه یاد بگیرم برای من هم آسان من هم آسان می شود(معما چو حل شود آسان گردد)

  4. #4
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    46
    پست
    6,379
    اتفاقا خیلی ساده است.

    Component Developers Guide را در راهنمای دلفی ببینید.

    برای شروع یک مثال خوب است. پیشنهاد کنید: چه کامپوننتی بنویسیم؟

  5. #5
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    124
    ببخشید همینطوری اومدم تو
    آقا مهدی اگه جسارت نباشه پیشنهاد میکنم لطفا کامپوننتی طراحی بشه که در اجزاء فرم به جای کلید tab از Enter استفاده کنیم

  6. #6
    من دو پیشنهاد دارم (یکی سخت یکی اسان):
    1- کامپوننتی شبیه edit که در مو قع ورود اطلاعات در یک بانک اطلاعاتی با فشار یک کلید مثل insert یا ... به حالت جستجو رفته و یک dbgrid نمایش داده شده و با وارد کردن هر کلمه عمل جستجو در بانک مربوطه انجام شده و با فشار enter یا DblClick گرید بسته شده و مقدار یک فیلد دیگر مثل کد در EDit.text قرار گیرد .(مثلا برای نمایش اطلاعات پرسنل معمولا باید بر اساس کد پرسنلی عمل جستجو انجام شود و لی وقتی کاربر کد را نمیداند با فشار یک کلید dbgrid باز شده و با تایپ اول نام خانوادگی جستجو انجام شود -با هر حرفی که تایپ میشود اشاره گر رکورد جابجا شود - و هر وقت کلید Down فشار داده شد فوکوس به گرید منتقل شده و وقتی به نام فرد مورد نظر رسید با فشار Enter یا dblclick گرید کد پرسنلی در EDit قرار گیرد . در ورود اطلاعات مر بوط به پرسنل نیز کاربرد دارد ) برای این چند property لازم است .
    Datasource,serched field,returned field,display fields
    2- کامپوننت ساده مثل یک MaskEdit که تاریخ را بصورت رشته ای گرفته و در موقع خروج از آن فرمت تاریخ را چک کند .از نظر روز و ماه و سال و....

  7. #7
    کاربر دائمی
    تاریخ عضویت
    دی 1382
    محل زندگی
    پشت كامپيوتر
    پست
    381
    رخصت
    آقایان من در تاپیک فقط می خواهم در مورد تاپیم مامپوننتها ی تر کیبی بحث کنیم و از شنبه نیز شروع می کنم اگر مبا حث دیگر را علاقمندید ‍تاپیک حدیدی ایجاد کنید تا در مورد آن بحث شود.

  8. #8
    کاربر دائمی
    تاریخ عضویت
    دی 1382
    محل زندگی
    پشت كامپيوتر
    پست
    381
    از ساده شروع می کنیم و در مورد اجزا و خصوصیات و پیامهای ویندوز بحث میکنیم تا به طراحی کامپوننت برسیم.
    صورت مساله اول:
    کامپوننتی طراحی کنیم که درون Edit یک BitBtn قرار داده تا بتوانیم از آن استفاده کنیم
    ابتدا از خصوصیات BitBtn بحث میکنیم و بعد edit در آخر شروع به طراحی می کنیم
      TBitBtn = class(TButton)
    private
    FCanvas: TCanvas;
    FGlyph: Pointer;
    FStyle: TButtonStyle;
    FKind: TBitBtnKind;
    FLayout: TButtonLayout;
    FSpacing: Integer;
    FMargin: Integer;
    IsFocused: Boolean;
    FModifiedGlyph: Boolean;
    FMouseInControl: Boolean;
    procedure DrawItem(const DrawItemStruct: TDrawItemStruct);
    procedure SetGlyph(Value: TBitmap);
    function GetGlyph: TBitmap;
    function GetNumGlyphs: TNumGlyphs;
    procedure SetNumGlyphs(Value: TNumGlyphs);
    procedure GlyphChanged(Sender: TObject);
    function IsCustom: Boolean;
    function IsCustomCaption: Boolean;
    procedure SetStyle(Value: TButtonStyle);
    procedure SetKind(Value: TBitBtnKind);
    function GetKind: TBitBtnKind;
    procedure SetLayout(Value: TButtonLayout);
    procedure SetSpacing(Value: Integer);
    procedure SetMargin(Value: Integer);
    procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM;
    procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
    procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
    procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    procedure WMLButtonDblClk(var Message: TWMLButtonDblClk);
    message WM_LBUTTONDBLCLK;

  9. #9
    کاربر دائمی
    تاریخ عضویت
    دی 1382
    محل زندگی
    پشت كامپيوتر
    پست
    381
    TCanvas Class

    این کلاس برای کشیدن اینترفیس و ظاهر بعضی از عناصر مانند image
    استاندارد ویندوز یعنی System روی عناصری مانند Edit , Button,ListBox کنترل دارد
    اجزای اصلی Canvas
    Brush:تعیین رنگ و Patern داخلی(Filling) اشکال و BackGround
    معذرت می خوام بقیه را بعدا ادامه میدم کاری پیش آمد از دوستان می خواهم هر کسی تجربیات خودش را بنویسد

  10. #10
    کاربر دائمی
    تاریخ عضویت
    دی 1382
    محل زندگی
    پشت كامپيوتر
    پست
    381
    سلام(بحث خصوصیات BitBtn)
    آنقدر ادامه می دم تا بالاخره یک هم پا در زمینه کامپوننت نویسی پیدا کنم.

    TCanvas= برای رسم تصویر در BitBtn استفاده می شود

    FStyle= نوعی است که در Style
    TButtonStyle = (bsAutoDetect, bsWin31, bsNew);

    FKind:نوعی از Kind
    TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose,
    bkAbort, bkRetry, bkIgnore, bkAll);

    FLayout : نوع
    TButtonLayout = (blGlyphLeft, blGlyphRight, blGlyphTop, blGlyphBottom);

    FSpacing:فاصله از تصویر
    FMargin:فاصله حاشیه
    IsFocused:آیا Focus شود
    FModifiedGlyph:آیا Glyph تغییر کرده
    FMouseInControl:اشاره گر موس درون کنترل می باشد

  11. #11
    کاربر دائمی
    تاریخ عضویت
    دی 1382
    محل زندگی
    پشت كامپيوتر
    پست
    381
    بازم سلام (بحث BitMap)

    constructor TBitBtn.Create(AOwner: TComponent);
    begin
    FGlyph := TButtonGlyph.Create; لیستی از تصاویر با اندکسهای مختلف .من که سر در نیاوردیم به چه صورت مقدار میده
    TButtonGlyph(FGlyph).OnChange := GlyphChanged;انتساب رویداد
    inherited Create(AOwner);
    FCanvas := TCanvas.Create;
    FStyle := bsAutoDetect;
    FKind := bkCustom;
    FLayout := blGlyphLeft;
    FSpacing := 4;
    FMargin := -1;
    ControlStyle := ControlStyle + [csReflector];برای تعیین و اضافه کردن مشخصات خاصی به کامپوننت مثلا همین که باعث می شود یک تصویر در محل خاصی از آن خاصی از کنترل
    DoubleBuffered := True;اگر در حالت False باشد خو Window Control باعث کشیده شدن تصویر در کنترل می شود که گاهی باعث چشمک زدن تصویر می شود اگر ،True باشد باعث می شود در قسمت از Bitmap حافظه نگاشت شود و یا کشیده شود و بعد Window Control آنرا بر روی کنترل می کشد بطور کلی باعث کاهش چشمک زدن در عمل Repaint Window می شود
    end;


  12. #12
    ببخشید بدون مقدمه وارد بحثتان شدم
    اما در مورد سوال دوستم که خواسته بود به جای کلید Tab برای پرش اجزاء فرم از Enter استفاده شود کد زیر را نوشتم
    برای این کار این 5 خط کد را در Event جزء OnkeyPressed قرار دهید و با اجرای برنامه اگر در آن جزء کلید Enter بزنید به جزء بعدی که شماره Tab آن بزرگتر است خواهد رفت
    با احترام
    ع.و

     If Key = Char(VK_RETURN) Then
    begin
    Key := #0;
    PostMessage(Handle,Wm_NextDlgctl,0,0);
    end;

  13. #13

    نقل قول: شروع کلاس کامپوننت نویسی و OOP

    نقل قول نوشته شده توسط NOROOZY مشاهده تاپیک
    ببخشید همینطوری اومدم تو
    آقا مهدی اگه جسارت نباشه پیشنهاد میکنم لطفا کامپوننتی طراحی بشه که در اجزاء فرم به جای کلید tab از Enter استفاده کنیم
    همانطور که در پست قبلی دوست عزیزم توضیح دادند با اضافه کردن خطوط زیر به برنامه در قسمت onkeypress می توانید پرش تب را با ابنتر کنترل کنید
    if key=#13 then
    begin
    key:=#0
    PostMessage(Screen.ActiveForm.Handle,WM_NEXTDLGCTL ,0,0)
    end
    این طرز نوشته بنده با ایشان فرقی دارد و حسنش این است که اگر شما خاصیت keypreviow فرم خود را true کنید و به جای if key=#13 then این if key=#27 then را بنویسید فرم شما با کلید اسکپ بسته می شود شما میتوانید کلیه کلیدهای کیبرد را با کد Asci کنترل کنید برنامه زیر شما را برای بدست آوردن کد اسکی کمک می کند ( البتته این برنامه توسط یکی از اعضای همین سایت نوشته شده است از ایشان تشکر می کنم) و در صورتی که صفر اولی از سمت چپ را یک کنید تب به عقب بر می گردد.
    فایل های ضمیمه فایل های ضمیمه

  14. #14
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1388
    محل زندگی
    جزيره كيش
    سن
    53
    پست
    61

    Smile نقل قول: شروع کلاس کامپوننت نویسی و OOP

    نقل قول نوشته شده توسط alish مشاهده تاپیک
    سلام(بحث خصوصیات BitBtn)
    آنقدر ادامه می دم تا بالاخره یک هم پا در زمینه کامپوننت نویسی پیدا کنم.

    TCanvas= برای رسم تصویر در BitBtn استفاده می شود

    FStyle= نوعی است که در Style
    TButtonStyle = (bsAutoDetect, bsWin31, bsNew);

    FKind:نوعی از Kind
    TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose,
    bkAbort, bkRetry, bkIgnore, bkAll);

    FLayout : نوع
    TButtonLayout = (blGlyphLeft, blGlyphRight, blGlyphTop, blGlyphBottom);

    FSpacing:فاصله از تصویر
    FMargin:فاصله حاشیه
    IsFocused:آیا Focus شود
    FModifiedGlyph:آیا Glyph تغییر کرده
    FMouseInControl:اشاره گر موس درون کنترل می باشد
    سلام دوست عزيز
    من شما رو تازه پيدا كردم من خيلي وقت پيش براي شروع به كار كامپوننت نويسي در قسمت كامپوننت هاي دلفي يك تاپيك ايجاد كردم و يكي از كامپوننت هايي رو كه خودم نوشته بودم به صورت جزء جزء طرح مسئله كردم تا از يك كامپوننت ساده كم كم به يك كامپوننت پيچيده برسيم ولي متاسفانه هيچ كس همكاري نكرد به هرحال اگرچه موافق دستكاري كامپوننت هاي دلفي و ايجاد كامپوننت جديد با پايه اونها نيستم و بيشتر دوست دارم يك كامپوننت رو از ابتدا با ايده خودم طراحي كنم ولي مطالب شما رو هم پيگيري ميكنم و اگه تونستم با شما همكاري خواهم كرد. البته من هم تو اين كار تازه واردم.
    با تشكر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •