PDA

View Full Version : گرافيك ماشين اتوماتا



marmar
سه شنبه 17 اردیبهشت 1387, 10:37 صبح
سلام
من يه ماتريس رو مي خوام پياده سازي كنم كه تقريبا شبيه ماشين اتوماتا است براي گرافيك سعي كردم با shape نود ها رو پياده سازي كنم.
مي شه بهم بگيد حالا اون نود هايي رو كه تو ماتريس با هم ارتباط دارن من چطور يعني با چه ابزاري shape هاي مربوط به اون نود ها رو به هم ارتباط بدم.يعني چطور با فلش به هم وصل كنم.
با تشكر

marmar
سه شنبه 17 اردیبهشت 1387, 10:56 صبح
راستي در مورد شي اين گره ها هم مشكل دارم آخه shape رو فقط مي شه با آرايه پياده سازي كرد اما من ميخوام كه تعداد و متن روي نودها رو از آرايه بخونه مي شه راهنمايي كنيد من از چه شي اي بهتر هست استفاده كنم؟

marmar
چهارشنبه 18 اردیبهشت 1387, 09:04 صبح
شايد سوالم رو درست مطرح نكرده باشم.
من يه ماتريس دارم كه ارتباط چند تا گره رو با هم مشخص مي كنه
ميخوام كاربرم وقتي ارتباط ها رو مشخص كرد(داده هاي ماتريس رو پر كرد ) حالا گرافيك ارتباطات رو ببينه يعني نودها كشيده بشن و به ازاي هر ارتباط يه فلش كشيه شود از نود مبدا به نود مقصد.
من براي نود هام از dbedit استفاده كردمكه بتونم اسم نود ها رو هم تو گرافيكشون داشته باشم.
حالا 2 تا مشكل دارم
اول اينكه فلش ارتباط نودها رو چگونه پياده سازي كنم؟(با چه شي اي با توجه به اينكه قرار است از database بخونه)
دوم اينكه و قتي با قطعه كد زير مي خوام نودهاي database رو بكشم به تعداد ركورد ها نود درست مي شه اما اسم كليه نودها برابر اسم نود آخر مي شود



procedure TForm1.Button6Click(Sender: TObject);
var
r:integer;
Cli: array[0..5] of TDBEdit;
begin
for r:=0 to ADOQuery2.RecordCount-1 do
begin
Cli[r] := TDBEdit.Create(Self);
Cli[r].Parent := Form1;
Cli[r].DataSource:=DataSource1;
Cli[r].DataField:='name';
Cli[r].Height := 33;
Cli[r].Width := 33;
Cli[r].Top := 300;
Cli[r].Left := 8 + (50 * r);
ADOQuery2.Next;
end;

ممنون مي شم اگه چيزي به ذهنتون مي رسه كمكم كنيد.

nouri2015
چهارشنبه 18 اردیبهشت 1387, 16:21 عصر
شما برای ترسیم می تونید از ساده ترین روش رسم خط و منحنی دلفی یعنی canvas استفاده کنید ...

marmar
شنبه 21 اردیبهشت 1387, 12:07 عصر
سلام
مرسي از راهنماييتون
اين شي canvas ميشه بگيد تو كدوم سربرگ هست من تا حالا ازش استفاده نكردم الان هم هر چي دنبالش مي گردم پيداش نمي كنم
ممنون مي شم اگه راهنماييم كنيد.

khazaie01
شنبه 21 اردیبهشت 1387, 12:22 عصر
دوست عزیز canvas تو سربرگا نیست آخه کامپوننت نیست کلاسه

vcldeveloper
شنبه 21 اردیبهشت 1387, 15:57 عصر
دوم اينكه و قتي با قطعه كد زير مي خوام نودهاي database رو بكشم به تعداد ركورد ها نود درست مي شه اما اسم كليه نودها برابر اسم نود آخر مي شودعلتش اینه که از DBEdit استفاده می کنید. DBEdit همیشه مقدار فیلد مربوطه دررکورد فعلی را نمایش میده. در مثال شما، برنامه با استفاده از متد Next روی رکوردها حرکت میکنه. تمام DBEdit هایی هم که به DataSet مربوطه متصل هستند، با حرکت روی رکوردها مقدارشون تغییر میکنه و برابر با مقدار رکورد فعلی میشه. آخرین رکوردی که روش حرکت می کنید، آخرین رکورد DataSet هست، بعد از اون از حلقه خارج میشید، پی مقادیر DBEdit ها هم برابر مقدار رکورد آخر DataSet هست.
برای همچین کاری نباید از DBEdit استفاده می کردید، باید از یک کنترل عادی، مثلا Edit، استفاده می کردید و با حرکت روی رکوردها، برای هر رکورد یک Edit جدید می ساختید و مقدار فیلد مربوطه را از بانک می خوندید و در Edit می نوشتید، مثلا:


Clr[i] := TEdit.Create(Self);
Clr[i].Parent := Self;
Clr[i].Text := AdoQuery2.FieldByName('Name').AsString;
...
AdoQuery2.Next;

اين شي canvas ميشه بگيد تو كدوم سربرگ هست من تا حالا ازش استفاده نكردم الان هم هر چي دنبالش مي گردم پيداش نمي كنم
Canvas یک کلاس در دلفی هست که توابع مربوط به GDI ویندوز را به شکل ساده تری ارائه میکنه. کنترل های مختلفی از آن برای رسم استفاده می کنند. یکی از این کنترل ها فرم های دلفی هستند: Form1.Canvas
خصوصیت Canvas در فرم به شما اجازه میده که روی فرم چیزی رسم کنید.
یکی از کنترل هایی که به شما اجازه رسم بر روی Canvas خود را می دهد، کنترل PaintBox در تب System هست. این کنترل خودش رویداد OnPaint را برای شما فراهم کرده تا کد خود را در آن بنویسید. کدهای مربوط به رسم باید در رویداد OnPaint نوشته شوند، وگرنه هر زمان که پنجره Minimize شود، یا پنجره دیگری روی پنجره برنامه شما قرار گیرند، ترسیمات شما حذف خواهند شد!


canvas تو سربرگا نیست آخه شیء نیست کلاسهیک شی نمونه (Instance) ایی از یک کلاس هست. مثلا اگر "انسان" یک کلاس باشد، "علی" نمونه (شی) ایی از کلاس "انسان" هست. Canvas در تب ها Component List نیست، چون Component نیست؛ یعنی از کلاس TComponent مشتق نشده و در دلفی برای این کار Register نشده.

nouri2015
شنبه 21 اردیبهشت 1387, 16:46 عصر
مشکل Canvas این است که برای کارهای حرفه ای نمی شود از آن استفاده کرد چون بسیار کند است.
روشهای حرفه ای تری هم برای این کار وجود دارد.

vcldeveloper
شنبه 21 اردیبهشت 1387, 16:57 عصر
مشکل Canvas این است که برای کارهای حرفه ای نمی شود
کار حرفه ایی چی؟! کندیش برای چه کاری مطرح هست؟! همین الان کنترل هایی که در ویندوز بصورت استاندارد می بینید با همین GDI رسم میشند!

nouri2015
شنبه 21 اردیبهشت 1387, 17:26 عصر
شما یک بازی سه بعدی می خواهید بنویسید به نظر شما از canvas می شه استفاده کرد؟
یه کار ساده تر یک تایمر با interval 100 میلی ثانیه یک خط را توی یک کنترلی بکشید کاملا referesh کند اونو می بینید.

همین الان کنترل هایی که در ویندوز بصورت استاندارد می بینید با همین GDI رسم میشند! کنترل هایی ویندوز فراتر از این حرفها کار می کنند اگر وقت بشه در یک تاپیک جدا راجع به اون کاملا توضیح می دم تا مطلب روشن شود .

B-Vedadian
شنبه 21 اردیبهشت 1387, 17:43 عصر
نوری عزیز!

Windows برای رسم رابط کاربریش هیچ لایه دیگه ای بجز GDI و GDI+ نداره. فیلم که قرار نیست نمایش داده بشه.

برای نمونه میتونی دموهای Diagram Studio رو ببینی که توش میشه یک فلوچارت رو در حین اجرا ببینی و نتایج کار رو و دنبال کنی.

marmar
دوشنبه 23 اردیبهشت 1387, 14:16 عصر
سلام
مرسي از راهنمايي همه دوستان
من اينقدر حرفه اي كار نكردم
تو جواب دوستان يه چيزايي دستگيرم شد اما حالا باز هم مشكل دارم
مي خوام اگه يه شرطي برقرار بود اونوقت يه فلش از يه edit به edit ديگه رسم بشهالبته جهتش به سمت edit2 باشه مي شه يه مثال ازش اينجا بذاريد. اولين بار هست دارم ازش استفاده مي كنم . مرسي

vcldeveloper
دوشنبه 23 اردیبهشت 1387, 16:14 عصر
شما یک بازی سه بعدی می خواهید بنویسید به نظر شما از canvas می شه استفاده کرد؟
بازی سه بعدی رو با GDI درست نمی کنند! بحث بازی سه بعدی با بحث رابط کاربر فرق میکنه!


یه کار ساده تر یک تایمر با interval 100 میلی ثانیه یک خط را توی یک کنترلی بکشید کاملا referesh کند اونو می بینید.
کسی که دو کلمه درباره گرافیک در کامپیوتر اطلاع داشته باشه، این کار را در یک بافر انجام میده!


کنترل هایی ویندوز فراتر از این حرفها کار می کنند اگر وقت بشه در یک تاپیک جدا راجع به اون کاملا توضیح می دم تا مطلب روشن شود .
عجب، پس به نظر شما کنترل های ویندوز از چیزی غیر از GDI (و در ورژن های جدیدتر +GDI) برای رسم خودشون استفاده می کنند؟!!

nouri2015
دوشنبه 23 اردیبهشت 1387, 17:16 عصر
می شه بگید بازی سه بعدی رو با چی می نویسند؟
چگونه می شه در یک بافر ترسیم خط رو انجام داد؟

vcldeveloper
دوشنبه 23 اردیبهشت 1387, 19:48 عصر
می شه بگید بازی سه بعدی رو با چی می نویسند؟
OpenGL و DirectX را جستجو کنید.


چگونه می شه در یک بافر ترسیم خط رو انجام داد؟
تصویر در یک Canvas که قابل مشاهده نیست، رسم میشه و وقتی ترسیم تموم شد، بر روی صفحه نمایش داده میشه. مشابه این رفتار را می تونید با استفاده از خصوصیت DoubleBuffered یک فرم تجربه کنید.

Developer Programmer
دوشنبه 23 اردیبهشت 1387, 19:59 عصر
کسی که دو کلمه درباره گرافیک در کامپیوتر اطلاع داشته باشه، این کار را در یک بافر انجام میده!

تعجب من از اینه که نشد یه تاپیکی در مورد موضوعی باز بشه و "علی" از اون موضوع بی اطلاع باشه !
علی جان منبع معرفی کن بریم مطالعه کنیم ...

vcldeveloper
دوشنبه 23 اردیبهشت 1387, 20:33 عصر
تعجب من از اینه که نشد یه تاپیکی در مورد موضوعی باز بشه و "علی" از اون موضوع بی اطلاع باشه !افشین جان، سواد من در این زمینه در حد همین دو کلمه بود. منظور من هم این بود که منی که از برنامه نویسی گرافیک اطلاع خاصی ندارم هم می دونم که این ترسیم ها باید در یک بافر انجام بشه.


منبع معرفی کن بریم مطالعه کنیم ...من الان منبع خاصی خاطرم نیست، ولی از اونجایی که خود دلفی امکان گرافیکی خاصی ارائه نمیده و هر چی میده از خود ویندوز هست، مطالعه مستندات مربوط به GDI و +GDI در MSDN (http://msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/GDIPlus.asp) و کتاب هایی که در این زمینه منتشر شدند، میتونه خیلی مفید باشه.
در این سایت هم در بخش طراحی بازی ها و بخش های مرتبط با C کاربرانی هستند که اطلاعات بسیار مفیدی در این زمینه ها داشته باشند و بتونند مشکلاتی که ممکن است در حین کار با آنها مواجه بشید را حل کنند.
درباره +GDI هم بگم که، توابع API ترجمه شده آن بصورت پیش فرض با دلفی وجود ندارند، اما می تونید در سایت زیر ترجمه API های آن را برای دلفی پیدا کنید:
http://www.progdigy.com/modules.php?name=gdiplus (http://www.progdigy.com)
تعداد زیادی دمو هم همراهش هست. البته دقت کنید که امکانات +GDI خیلی بیشتر از GDI هست!
توی دلفی می دونم که کامپوننت های TMS از +GDI برای پیاده سازی بعضی از قابلیت هاشون استفاده می کنند.