दिलचस्प पोस्ट
जावा के साथ मौजूदा खुली खिड़कियां / प्रक्रिया की सूची कैसे प्राप्त करें? गतिशील बहुरूपता से बचने के लिए CRTP अजगर में तैरने की आसान सुंदर प्रिंटिंग? Asp.net में DateTime के जावास्क्रिप्ट धारावाहिक एक जावास्क्रिप्ट तिथि ऑब्जेक्ट नहीं दे रहा है? SASS का उपयोग करते समय मैं एक अलग निर्देशिका से एक फ़ाइल कैसे आयात कर सकता हूं? टेम्पलेट स्पेशलाइजेशन और सक्षम_आईफ़ jQuery $ ("# रेडियो बटन")। डी-सिलेक्शन के दौरान बदलाव नहीं (…) नहीं एक खाली JQuery ऑब्जेक्ट प्राप्त करना मैं ASP.net/C# ऐप कॉन्फ़िग फ़ाइल मान में मान के लिए एक एपरसैंड कैसे जोड़ सकता / सकती हूं? फ्लश () का उपयोग बंद होने से पहले () मुझे 'सच' की उम्मीद है लेकिन 'कोई नहीं' JQuery: DOM के बजाय 'मेमोरी' में HTML बनाएं हैशोड गणना के लिए एक समझदार प्रधानमंत्री क्या है? AngularJS: एक HTTP इंटरसेप्टर (सर्कुलर निर्भरता) में सेवा इंजेक्शन पैरामीटर में स्लैश वाले यूआरएल?

क्या किसी को ड्रैग एंड ड्रॉप, पुन: क्रम-योग्य सूची के निम्न स्तर (कोई फ्रेमवर्क) का पता नहीं है?

मैं मूल ग्राफ़िकल सूची के कोड (किसी भी भाषा) की तलाश कर रहा हूं, जिसे खींचें और ड्रॉप द्वारा फिर से चलाया जा सकता है तो वास्तव में यह कार्यक्षमता http://jqueryui.com/sortable/ लेकिन फ़्रेम बफर / कैनवास पर सीधे किसी भी चौखटे (या कम स्तर 'पिक्सेल पिक्सेल पुस्तकालयों' पर) के बिना लिखा गया है और संभवत: HTML / JS में नहीं है (जब तक कि केवल कैनवस ही नहीं बिना सीएसएस)

जितना आसान होगा उतना ही मैं इसे कोडांतरक में उपयोग करूँगा और अगर जरूरत नहीं है तो मैं पहिया को फिर से बदलने के लिए नहीं चाहता।

Solutions Collecting From Web of "क्या किसी को ड्रैग एंड ड्रॉप, पुन: क्रम-योग्य सूची के निम्न स्तर (कोई फ्रेमवर्क) का पता नहीं है?"

हे, मैं चौखटे से नफरत करता हूं इसलिए यह मेरे लिए पाई के रूप में आसान है …

कुछ साल पहले मेरे व्याख्यानों के दौरान मैंने अपने विद्यार्थियों के लिए यह कोडित किया है:

यह मुख्य इंजन कोड है (पूर्ण प्रोजेक्ट + एक्स्टेस उस ज़िप में है):

//--------------------------------------------------------------------------- //--- Constants: ------------------------------------------------------------ //--------------------------------------------------------------------------- const int _select_max_l=16; const int _select_max_ll=_select_max_l*_select_max_l; const int _half_size=10; const int _atoms_max=32; //--------------------------------------------------------------------------- enum _atom_type_enum //++++ { _atom_type_non=0, _atom_type_kruh, _atom_type_stvorec, _atom_type_enum_end }; //--------------------------------------------------------------------------- enum _editor_edit_mode_enum //**** { _editor_edit_mode_non=0, _editor_edit_mode_move, _editor_edit_mode_mov, _editor_edit_mode_add_kruh, _editor_edit_mode_add_stvorec, _editor_edit_mode_del, _editor_edit_mode_enum_end }; //--------------------------------------------------------------------------- //--- viewer: --------------------------------------------------------------- //--------------------------------------------------------------------------- class viewer { public: int x0,y0; viewer() { x0=0; y0=0; } void world2screen(int &sx,int &sy,int wx,int wy) { sx=wx-x0; sy=wy-y0; } void screen2world(int &wx,int &wy,int sx,int sy) { wx=sx+x0; wy=sy+y0; } void world2screen(int &sl,int wl) { sl=wl; } void screen2world(int &wl,int sl) { wl=sl; } }; //--------------------------------------------------------------------------- //--- atom kruh: ------------------------------------------------------------ //--------------------------------------------------------------------------- class atom_kruh { public: int x,y,r; // world coordinates TColor col0,col1,col2; AnsiString str; atom_kruh() { x=0; y=0; r=_half_size; str=""; col0=clBlue; col1=clAqua; col2=clWhite; } void draw(TCanvas *scr,const viewer &view) { int xx,yy,rr; view.world2screen(xx,yy,x,y); view.world2screen(rr,r); scr->Brush->Color=col0; scr->Pen ->Color=col1; scr->Font ->Color=col2; scr->Ellipse(xx-rr,yy-rr,xx+rr,yy+rr); scr->Brush->Style=bsClear; xx-=scr->TextWidth(str)>>1; yy-=scr->TextHeight(str)>>1; scr->TextOutA(xx,yy,str); scr->Brush->Style=bsSolid; } bool select(int &ll,int wx,int wy) { int qq,xx,yy; xx=wx-x; xx*=xx; yy=wy-y; yy*=yy; qq=xx+yy; if ((qq<=_select_max_ll)&&((qq<=ll)||(ll<0))) { ll=qq; return true; } return false; } }; //--------------------------------------------------------------------------- //--- atom kruh: ------------------------------------------------------------ //--------------------------------------------------------------------------- class atom_stvorec { public: int x,y,r; // world coordinates TColor col0,col1,col2; AnsiString str; atom_stvorec() { x=0; y=0; r=_half_size; str=""; col0=clBlue; col1=clAqua; col2=clWhite; } void draw(TCanvas *scr,const viewer &view) { int xx,yy,rr; view.world2screen(xx,yy,x,y); view.world2screen(rr,r); scr->Brush->Color=col0; scr->Pen ->Color=col1; scr->Font ->Color=col2; scr->Rectangle(xx-rr,yy-rr,xx+rr,yy+rr); scr->Brush->Style=bsClear; xx-=scr->TextWidth(str)>>1; yy-=scr->TextHeight(str)>>1; scr->TextOutA(xx,yy,str); scr->Brush->Style=bsSolid; } bool select(int &ll,int wx,int wy) { int qq,xx,yy; xx=wx-x; xx*=xx; yy=wy-y; yy*=yy; qq=xx+yy; if ((qq<=_select_max_ll)&&((qq<=ll)||(ll<0))) { ll=qq; return true; } return false; } }; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- class editor { public: Graphics::TBitmap *bmp; // back buffer int xs,ys; int sel_ix,sel_tp; // actual mouse selected item int edit_mode; // selected edit tool viewer view; // view bool redraw; // redraw needed? bool locked; // edit in progress? WORD key,key0; int mx,my,mx0,my0; TShiftState sh,sh0; atom_kruh kruh[_atoms_max]; // all object lists atom_stvorec stvorec[_atoms_max]; int kruhov; int stvorcov; editor(); ~editor(); void resize(int _xs,int _ys); // interface with window void draw(); void mouse(int x,int y,TShiftState s) { mx0=mx; my0=my; sh0=sh; mx=x; my=y; sh=s; edit(); } void keys(WORD k,TShiftState s) { key0=key; sh0=sh; key=k; sh=s; edit(); } void select(); // helper functions void edit(); void move (bool q0,bool q1,int x,int y,int dx,int dy); void mov (bool q0,bool q1,int x,int y,int dx,int dy); void add_kruh (bool q0,bool q1,int x,int y,int dx,int dy); void add_stvorec(bool q0,bool q1,int x,int y,int dx,int dy); void del (bool q0,bool q1,int x,int y,int dx,int dy); }; //--------------------------------------------------------------------------- editor::editor() { bmp=new Graphics::TBitmap; resize(1,1); sel_ix=-1; sel_tp=_atom_type_non; edit_mode=_editor_edit_mode_non; key=0; key0=0; mx=0; mx0=0; my=0; my0=0; locked=false; kruhov=0; stvorcov=0; } //--------------------------------------------------------------------------- editor::~editor() { delete bmp; } //--------------------------------------------------------------------------- void editor::resize(int _xs,int _ys) { bmp->Width=_xs; bmp->Height=_ys; xs=bmp->Width; ys=bmp->Height; redraw=true; } //--------------------------------------------------------------------------- void editor::draw() { int i; if (!redraw) return; redraw=false; bmp->Canvas->Brush->Color=clBlack; bmp->Canvas->FillRect(Rect(0,0,xs,ys)); //++++ for (i=0;i<kruhov ;i++) kruh[i] .draw(bmp->Canvas,view); for (i=0;i<stvorcov;i++) stvorec[i].draw(bmp->Canvas,view); } //--------------------------------------------------------------------------- void editor::select() { int i,wx,wy,ll; int sel_tp0=sel_tp; sel_tp=_atom_type_non; int sel_ix0=sel_ix; sel_ix=-1; view.screen2world(wx,wy,mx,my); //++++ ll=-1; for (i=0;i<kruhov ;i++) if (kruh[i] .select(ll,wx,wy)) { sel_tp=_atom_type_kruh; sel_ix=i; }; for (i=0;i<stvorcov;i++) if (stvorec[i].select(ll,wx,wy)) { sel_tp=_atom_type_stvorec; sel_ix=i; }; if (sel_tp!=sel_tp0) redraw=true; if (sel_ix!=sel_ix0) redraw=true; } //--------------------------------------------------------------------------- void editor::edit() { bool q0,q1; int x,y,dx,dy; x=mx; dx=mx-mx0; y=my; dy=my-my0; view.screen2world( x, y, x, y); view.screen2world(dx,dx); view.screen2world(dy,dy); q0=sh0.Contains(ssLeft); q1=sh .Contains(ssLeft); if (!locked) select(); //**** if(edit_mode==_editor_edit_mode_mov) mov (q0,q1,x,y,dx,dy); if(edit_mode==_editor_edit_mode_add_kruh) add_kruh (q0,q1,x,y,dx,dy); if(edit_mode==_editor_edit_mode_add_stvorec)add_stvorec (q0,q1,x,y,dx,dy); if(edit_mode==_editor_edit_mode_del) del (q0,q1,x,y,dx,dy); q0=sh0.Contains(ssRight); q1=sh .Contains(ssRight); if (!locked) move(q0,q1,x,y,dx,dy); } //--------------------------------------------------------------------------- void editor::move (bool q0,bool q1,int x,int y,int dx,int dy) { if ((sel_ix>=0)&&(sel_tp!=_atom_type_non)) return; if (q1) { view.x0-=dx; view.y0-=dy; redraw=true; } } //--------------------------------------------------------------------------- void editor::mov (bool q0,bool q1,int x,int y,int dx,int dy) { if ((!locked)&&((sel_ix<0)||(sel_tp==_atom_type_non))) return; locked=false; if ((q1)||((q0)&&(!q1))) { //++++ if (sel_tp==_atom_type_kruh) { kruh[sel_ix].x=x; kruh[sel_ix].y=y; } if (sel_tp==_atom_type_stvorec) { stvorec[sel_ix].x=x; stvorec[sel_ix].y=y; } locked=true; } if (!q1) locked=false; redraw=true; } //--------------------------------------------------------------------------- void editor::add_kruh (bool q0,bool q1,int x,int y,int dx,int dy) { if ((!locked)&&(sel_ix>=0)&&(sel_tp!=_atom_type_non)) return; locked=false; if (kruhov>=_atoms_max) return; if ((!q0)&&( q1)) { sel_tp=_atom_type_kruh; sel_ix=kruhov; kruhov++; kruh[sel_ix].x=x; kruh[sel_ix].y=y; kruh[sel_ix].str=kruhov; locked=true; } if (( q0)&&( q1)) { kruh[sel_ix].x=x; kruh[sel_ix].y=y; locked=true; } if (( q0)&&(!q1)) { kruh[sel_ix].x=x; kruh[sel_ix].y=y; } if ((!q0)&&(!q1)) { } redraw=true; } //--------------------------------------------------------------------------- void editor::add_stvorec(bool q0,bool q1,int x,int y,int dx,int dy) { if ((!locked)&&(sel_ix>=0)&&(sel_tp!=_atom_type_non)) return; locked=false; if (stvorcov>=_atoms_max) return; if ((!q0)&&( q1)) { sel_tp=_atom_type_stvorec; sel_ix=stvorcov; stvorcov++; stvorec[sel_ix].x=x; stvorec[sel_ix].y=y; stvorec[sel_ix].str=stvorcov; locked=true; } if (( q0)&&( q1)) { stvorec[sel_ix].x=x; stvorec[sel_ix].y=y; locked=true; } if (( q0)&&(!q1)) { stvorec[sel_ix].x=x; stvorec[sel_ix].y=y; } if ((!q0)&&(!q1)) { } redraw=true; } //--------------------------------------------------------------------------- void editor::del (bool q0,bool q1,int x,int y,int dx,int dy) { locked=false; if ((sel_ix<0)||(sel_tp==_atom_type_non)) return; if ((!q0)&&( q1)) { //++++ if (sel_tp==_atom_type_kruh) if (kruhov>0) { kruhov--; kruh[sel_ix]=kruh[kruhov]; } if (sel_tp==_atom_type_stvorec) if (stvorcov>0) { stvorcov--; stvorec[sel_ix]=stvorec[stvorcov]; } sel_ix=-1; sel_tp=_atom_type_non; } redraw=true; } //--------------------------------------------------------------------------- 

इसके लिए खेद है कि यह पूरी तरह से अंग्रेजी में नहीं है

  • kruh मतलब चक्र है
  • stvorec वर्ग का मतलब है

यह विंडो के लिए कोड है ( बीडीएस 2006 वीसीएल शैली)

 //$$---- Form CPP ---- //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "editor.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; editor edit; int x0,y0; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void draw() // redraw app screen { edit.draw(); Form1->Canvas->Draw(x0,y0,edit.bmp); // here just some info print outs int dy=16,x=x0,y=y0-dy; Form1->Canvas->Font->Color=clAqua; Form1->Canvas->Brush->Style=bsClear; Form1->Canvas->TextOutA(x,y+=dy,AnsiString().sprintf("locked: %i",edit.locked)); Form1->Canvas->TextOutA(x,y+=dy,AnsiString().sprintf("Key: %d",edit.key)); Form1->Canvas->TextOutA(x,y+=dy,AnsiString().sprintf("sel_tp: %i",edit.sel_tp)); Form1->Canvas->TextOutA(x,y+=dy,AnsiString().sprintf("sel_ix: %i",edit.sel_ix)); Form1->Canvas->TextOutA(x,y+=dy,AnsiString().sprintf("kruhov: %i",edit.kruhov)); Form1->Canvas->TextOutA(x,y+=dy,AnsiString().sprintf("stvorcov: %i",edit.stvorcov)); Form1->Canvas->Brush->Style=bsSolid; } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner) // init app { // select tool on app start bt_tool_kruhClick(this); } //--- window events: --------------------------------------------------------- void __fastcall TForm1::FormPaint(TObject *Sender) { draw(); } void __fastcall TForm1::FormResize(TObject *Sender) { x0=pan_top->Left; y0=pan_top->Height; edit.resize(ClientWidth-x0,ClientHeight-y0); draw(); } void __fastcall TForm1::FormActivate(TObject *Sender) { draw(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { edit.keys(Key,Shift); draw(); } void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { edit.mouse(X-x0,Y-y0,Shift); draw(); } void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y){ edit.mouse(X-x0,Y-y0,Shift); draw(); } void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { edit.mouse(X-x0,Y-y0,Shift); draw(); } //--------------------------------------------------------------------------- void __fastcall TForm1::bt_tool_kruhClick(TObject *Sender) // event on any tool button click { // select editor tool mode ... edit.edit_mode=_editor_edit_mode_non; if (bt_tool_kruh ->Down) edit.edit_mode=_editor_edit_mode_add_kruh; if (bt_tool_stvorec->Down) edit.edit_mode=_editor_edit_mode_add_stvorec; if (bt_tool_move ->Down) edit.edit_mode=_editor_edit_mode_mov; if (bt_tool_delete ->Down) edit.edit_mode=_editor_edit_mode_del; } //--------------------------------------------------------------------------- 

विंडो में केवल 4 टूल बटन हैं (एक ही GUID द्वारा लॉक किया गया है, इसलिए केवल एक ही समय में कम हो सकता है)

  • सर्कल टूल जोड़ें
  • वर्ग उपकरण जोड़ें
  • टूल ले जाएं
  • उपकरण हटाएं

सादगी के लिए सब कुछ स्थिर रूप से आवंटित किया गया है

[संपादित करें] अधिक जानकारी

  1. atom_xxxx ऑब्जेक्ट डेटा टाइप / क्लास ( atom_xxxx ) atom_xxxx

    इसे ऑब्जेक्ट की दृश्य size,position,shape विज़ुअल जीएफएक्स प्रस्तुतीकरण का size,position,shape रखना चाहिए। कनेक्शन चर जोड़ें (ऑब्जेक्ट type और ऑब्जेक्ट index से जुड़ा होना चाहिए)। वास्तविक ऑब्जेक्ट / डेटा को अंदर जोड़ें

  2. ऑब्जेक्ट आईडी

    मैं int tp,ix;

    • tp मतलब वस्तु का प्रकार है
    • ix मतलब सूचक प्रकार tp के ऑब्जेक्ट की सूची
  3. संपादक इंजन

    यह भी कक्षा या चर और कार्यों का सेट होना चाहिए। इसे संपूर्ण संपादित दुनिया (ऑब्जेक्ट की सूची) रखना चाहिए:

    • विज़ुअलाइज़ेशन वेरिएबल जैसे कि स्क्रीन / बैकब्यूफ़ाटर बिटमैप या रेंडरिंग प्रसंग, माउस की स्थिति, चयन सूची
    • फ़ंक्शन / इवेंट जैसे onmouse, onkey, draw, … जोड़ें
    • संपादन कार्य को जोड़ने के लिए इसे select,add,del,move (खींचें और ड्रॉप) ऑब्जेक्ट में सक्षम होना चाहिए। पूर्ववत / फिर से कार्यवाही को कम करने के लिए कमांड के सेट द्वारा आदर्श रूप से नियंत्रित किया गया
    • undo/redo जोड़ें जोड़ें
    • save,load जोड़ें
    • अपने वांछित अनुकार कार्यक्षमता जोड़ें

    और यह सब कुछ अगर मैं कुछ नहीं भूल गया था

  4. अनुप्रयोग जीयूआई इंटरफ़ेस बनाएं

    इसलिए खिड़की बनाएं, प्रत्येक उपकरण के लिए बटन के साथ पैनल को जोड़ें, मेनू और जो भी आपको चाहिए। माउस, कुंजीपटल, पेंट करना, आकार बदलने, ड्रैग और ड्रॉप के लिए इवेंट जोड़ें … मेरा उदाहरण इस तरह दिखता है:

    संपादक एप

    editor edit; जोड़ें editor edit; विश्व स्तर पर या इसके सदस्य के रूप में सदस्य विकल्प बेहतर होगा यदि आप बाद में एमडीआई करना चाहते हैं संपादन और विंडो (द्वितीय स्रोत कोड) के बीच ईवेंट इंटरफेस जोड़ें।

[टिप्पणियाँ]

  • ++++ कोड के भाग का चिह्न जहां आपको सिस्टम में कोई परमाणु प्रकार जोड़ा जाता है तो परिवर्तनों को जोड़ने की आवश्यकता है
  • **** कोड का हिस्सा है जिसमें आपको बदलाव करने की आवश्यकता होती है अगर कोई भी संपादन मोड सिस्टम में जोड़ा जाता है

अगर आपको कुछ टिप्पणी करने की आवश्यकता है तो मुझे और अधिक टिप्पणी नहीं करने के लिए क्षमा करें।

आशा है कि यह थोड़ा मदद करता है …