View Full Version : ایجاد پنجره با لسیت و اسکرول بار
moos111
چهارشنبه 21 اردیبهشت 1390, 22:11 عصر
با عرض سلام و خسته نباشید خدمت دوستان
یه درخواست دارم، می توانید برنامه ای برام طراحی کنید که به صورت برنامه ی زیر باشد.
یعنی یک سری آیتم با عنوان مشخص داشته باشیم. وقتی تعداد آیتم ها بیستر از طول صفحه شد بشه با اسکرول بار آیتم های بعدی را مشاهده کرد.
با تشکر
mohsen12345
شنبه 24 اردیبهشت 1390, 16:13 عصر
با عرض سلام و خسته نباشید خدمت دوستان
یه درخواست دارم، می توانید برنامه ای برام طراحی کنید که به صورت برنامه ی زیر باشد.
یعنی یک سری آیتم با عنوان مشخص داشته باشیم. وقتی تعداد آیتم ها بیستر از طول صفحه شد بشه با اسکرول بار آیتم های بعدی را مشاهده کرد.
با تشکر
شما اگه با canvas می خواهید باید یه آرایه از String داشته باشید و اون ها رو زیر هم چاپ کنید تا به آخر صفحه برسید و با فشردن کلید های جهتی عکس منوی انتخاب کننده رو پایین بیارید تا به آخرین آیتم درون صفحه برسه ، از اون ببعد با هر کلید جهتی کل آیتم هایی که چاپ می کنید یک آیتم بره بالا تا به آخر منو برسه و بعد اون با فشردن کلید جهت پایین به ابتدای منو برگرده
برای اسکرول هم باید یه عکس برای اون انتخاب کنید و اندازش رو به (اندازه مکانی که برای اسکرول در نظر گرفتید تقسیم بر تعداد آیتم های منو) تنظیم کنید و با هر حرکت اون هم جاش تغییر کنه
sd.CSharpProgrammer
سه شنبه 03 خرداد 1390, 01:21 صبح
شما اگه با canvas می خواهید باید یه آرایه از String داشته باشید و اون ها رو زیر هم چاپ کنید تا به آخر صفحه برسید و با فشردن کلید های جهتی عکس منوی انتخاب کننده رو پایین بیارید تا به آخرین آیتم درون صفحه برسه ، از اون ببعد با هر کلید جهتی کل آیتم هایی که چاپ می کنید یک آیتم بره بالا تا به آخر منو برسه و بعد اون با فشردن کلید جهت پایین به ابتدای منو برگرده
برای اسکرول هم باید یه عکس برای اون انتخاب کنید و اندازش رو به (اندازه مکانی که برای اسکرول در نظر گرفتید تقسیم بر تعداد آیتم های منو) تنظیم کنید و با هر حرکت اون هم جاش تغییر کنه
خدا خیرتون بده دوست عزیز میشه با یه مثال ساده توضیحتون رو تکمیل کنین؟!
واقعاً ممنون میشم
مرسی
mohsen12345
سه شنبه 03 خرداد 1390, 23:20 عصر
خدا خیرتون بده دوست عزیز میشه با یه مثال ساده توضیحتون رو تکمیل کنین؟!
واقعاً ممنون میشم
مرسی
دوستان انگار نیاز مبرمی به این قضیه به این ساده ایدارن
باشه واستون توضیح می دم
mohsen12345
سه شنبه 03 خرداد 1390, 23:23 عصر
اول از همه میریم سراغ تعریف متغییر هامون (لازم به ذکره که فرض می کنم که شما یه کلاس فونت قبلا ساختید و اون رو دیگه براتون توضیح نمی دم)
private String [] Menustr;
private int[] menupic;
private int Pointerpic;
Image Menushow;
private int PointerMain,Startpaint;
private int StartPoint;
private int Endpoint;
private int getHeight;
private int getWidth;
private int pointerPic;
private Image sel_Left,Sel_Right;
private int keypress,pointerShowImage;
ما این متغییر ها رو در قسمت global صفحه تعریف می کنیم که تو تمام برنامه بتونیم از اون استفاده کنیم
mohsen12345
سه شنبه 03 خرداد 1390, 23:29 عصر
حالا میریم سراغ تعریف تابعی که کلمات منو و همچنین شماره عکس ها رو داخلش ذخیره کنیم رو پر کنیم
private void FillMenu(){
Menustr=new String[5];
menupic=new int[5];
Menustr[0]="menu one";
Menustr[1]="menu two";
Menustr[2]="Menu tree";
Menustr[3]="menu four";
Menustr[4]="menu Exit";
menupic[0]=-1;
menupic[1]=-2;
menupic[2]=-3;
menupic[3]=-15;
menupic[4]=-4;
PointerMain=4;
}
mohsen12345
سه شنبه 03 خرداد 1390, 23:31 عصر
حالا میریم سراغ تعریف constractor کلاس
(فرض رو بر این میگیریم که این یک کلاس فراخوانی شده از داخل یک کلاس مشتق شده از Canvas هست و از داخل اونجا اندازه صفحه رو به این کلاس می فرستیم
public Menu(int getw,int geth){
getHeight=geth;
getWidth=getw;
Startpaint=50;
FillMenu();
}
mohsen12345
سه شنبه 03 خرداد 1390, 23:39 عصر
حالا میریم سراغ اینکه بفهمیم چند تا منو تو صفحمون جا می شوند و اجازه چاپ چند تا منو رو داریم
private int SetEndPoint(int StartingPoint){
int ret = 0,Len=Startpaint;
for (int i=StartingPoint;i<=PointerMain;i++){
Len=Len+40;
if (Len>getHeight-30)
break;
ret=i;
}
return ret;
}
احتیاج به توضیح نیست که بگم متغییر Startpaint برای مشخص کردن اینه که الان ما مرز منوهامون رو بدونیم که از کجای صفحه اجازه قرار دادن منوهامون رو داریم
فرض رو هم بر این می گیریم که تا 30 پیکسل مونده به پایان صفحه لیست منوهامون رو قطع کنیم
mohsen12345
سه شنبه 03 خرداد 1390, 23:43 عصر
حالا میریم سراغ تابع paint
public void paint(Graphics g){
Endpoint=SetEndPoint(StartPoint);
repaint(g);
g.setClip(0, 0, getWidth, getHeight);
pointerShowImage=SetShowPointer(StartPoint, pointerPic-1);
MainCan.Mnushow=true;
MainCan.Backshow=false;
MainCan.Clickshow=true;
MainCan.PosShow=pointerShowImage;
}
خب من تو نوشته های قبلی در مورد تابع SetEndpoint توضیح دادم پس میریم سراغ تابع repaint
mohsen12345
سه شنبه 03 خرداد 1390, 23:47 عصر
توی این تابع قراره که منوهامون رو چاپ کنیم
private void repaint(Graphics g){
int yprintm = Startpaint;
String AllPrint;
for (int i=StartPoint;i<=Endpoint;i++){
if (yprintm >= getHeight-50)
break;
try{
g.setClip(0, 0, getWidth, getHeight);
int mnu=menupic[i];
Menushow=Image.createImage("/Been_D/L1_Menu/"+menupic[i]);
g.drawImage(Menushow, getWidth-Menushow.getWidth()-8,yprintm, 0);
} catch (Exception ex) {
ex.printStackTrace();
}
String str=Menustr[i];
MyFontClass.PrintLine(Menustr[i], getWidth-Menushow.getWidth()-11, yprintm, 10000, 0, getHeight-40, 20, 0, MyFontClass.fullim, g, Graphics.RIGHT);
yprintm=yprintm+40;
}
}
من توی این کلاس فرض رو بر این گرفتم که شما از قبل یک کلاس فونت برای خودتون ساختید یا لااقل اگه تازه کار هستید از کلاس هایی که دوستان می نویسند استفاده کرده باشید
MyfontClass کلاس فونت من تو این برنامه هست
mohsen12345
سه شنبه 03 خرداد 1390, 23:52 عصر
خب برگریدم به تابع paint
من تو خط چهارم تابعی به شکل زیر رو فراخوانی کردم
pointerShowImage=SetShowPointer(StartPoint, pointerPic-1);
حالا توضیح در مورد این تابع
من با این تابع موقعیت منوی انتخاب رو مشخص می کنم (همون عکسی که وقت انتخاب منو باید روش چاپ شه )
private int SetShowPointer(int Point,int endp){
if (endp<0){
return Startpaint;
}
if (endp==PointerMain){
return (ShowPointer(Point, endp));
}
if ( keypress==2){
return (ShowPointer(Point, endp));
}else {
return (ShowPointer(Point, endp));
}
}
mohsen12345
سه شنبه 03 خرداد 1390, 23:54 عصر
تو تابع SetShowpointer یک تابع دیگه فراخوانی کردم که اینجا توضیح میدم
private int ShowPointer(int Point,int endp){
int FirNum = Startpaint;
for (int i=Point;i<=endp;i++){
FirNum+=40;
}
return FirNum;
}
mohsen12345
سه شنبه 03 خرداد 1390, 23:57 عصر
خب حالا میریم سراغ تعریف تابع فشردن کلید
(باز هم میگم فرض ما برا اینه که این رو تو یه کلاسی غیر کلاس اصلی Canvas ساختیم و از اونجا داریم فراخوانی می کنیم)
public void Keypressed(int keycode , int key){
if (keycode==50 || key==-1||key==1||keycode==-1){
UpPress();
}
if (keycode==56 || key==-2|| keycode==-2 || key==6){
DownPress();
}
if (keycode==53 || key==8 ){
FirePress();
}
mohsen12345
سه شنبه 03 خرداد 1390, 23:59 عصر
خب اول میریم سراغ تابع Uppress()
private void UpPress(){
keypress=2;
if (pointerPic==0){
pointerPic=PointerMain;
StartPoint=StartInEnd(pointerPic);
Endpoint=SetEndPoint(StartPoint);
}else{
if (pointerPic<=StartPoint)
pointerPic=StartPoint;
else
pointerPic--;
}
if (pointerPic<=StartPoint){
StartPoint--;
}
if (StartPoint<0)
StartPoint=0;
}
mohsen12345
چهارشنبه 04 خرداد 1390, 00:01 صبح
حالا میریم سراغ تابع DownPress
private void DownPress(){
keypress=8;
if (pointerPic>=Endpoint){
StartPoint++;
}
if (pointerPic==PointerMain){
pointerPic=0;
StartPoint=0;
}else{
if (pointerPic>Endpoint)
pointerPic=Endpoint;
else
pointerPic++;
}
if (StartPoint>=PointerMain)
StartPoint=0;
}
mohsen12345
چهارشنبه 04 خرداد 1390, 00:06 صبح
حالا میریم سراغ تایع Firepress
لازم به توضیح کار این توابع که نیست؟ همه اسمشون روشه
private String FirePress(){
switch (pointerPic){
case 0:{
//Menu One Pressed
break;
}
case 1:{
//Menu Two Pressed
break;
}
case 2:{
break;
}case 3:{
//Menu Tree Pressed
break;
}case 4:{
//Menu Exit Pressed
break;
}
}
return "Menu Pressed";
}
mohsen12345
چهارشنبه 04 خرداد 1390, 00:08 صبح
حالا میریم سراغ تابع StartInEnd که در تابع Uppress فراخوانی کردیمش
private int StartInEnd(int PointerEnd){
int istart = 0;
for(int i=PointerEnd;i>=0;i--){
if (PointerEnd>SetEndPoint(i))
break;
istart=i;
}
return istart;
}
mohsen12345
چهارشنبه 04 خرداد 1390, 00:12 صبح
خب با این توضیحات دیگه فکر کنم بتونید یه منوی ساده بسازید
اگه یه کم دیر به دیر به انجمن سر می زنم پیشاپیش عذر خواهی می کنم (پس به حساب تنبلی و از زیر کار در رفتن نزارید)
امیدوارم اگه روزی کسی از شما هم چیزی خواست و بلد بودید ازش دریغ نکنید
با تشکر
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.