{"id":238,"date":"2008-05-06T16:06:14","date_gmt":"2008-05-06T16:06:14","guid":{"rendered":"http:\/\/6teen.ru\/?p=21"},"modified":"2008-05-06T16:06:14","modified_gmt":"2008-05-06T16:06:14","slug":"2908","status":"publish","type":"post","link":"http:\/\/pblog.ru\/lab\/?p=238","title":{"rendered":"DBGrid \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438"},"content":{"rendered":"<p>DBGrid \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438<br \/>\n<!--more--><\/p>\n<pre class=\"alt2\" style=\"margin:0px; padding:6px; border:1px inset; width:580px; height:320px; overflow:auto\"><div>DbGrid \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435, \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438\n\nunit atcdbgrid;\n(c) aveen tech 2001 - 2002\n\nfilename: atcdbgrid.pas\n\nversion date author comment\n1.0 13\/06\/2000 majid vafai jahan create.\n\noverview\n- this grid is inherited from dbgrid and add some required functionality to it.\n\nfunctionality:\n- record type are all records that may be modified, unmodified, inserted, deleted.\n- coloring according to record type.\n- show selected record type.\n\n*)\n\ninterface\n\nuses\nwindows, messages, sysutils, classes, graphics, controls, forms, dialogs,\ngrids, dbgrids, dbtables, db;\nconst\nalignflags : array [talignment] of integer =\n( dt_left or dt_wordbreak or dt_expandtabs or dt_noprefix,\ndt_right or dt_wordbreak or dt_expandtabs or dt_noprefix,\ndt_center or dt_wordbreak or dt_expandtabs or dt_noprefix );\nrtl: array [boolean] of integer = (0, dt_rtlreading);\ntype\ntcachedshow = (csmodify, csunmodify, csremoved, csinserted, csall, csnormal);\ntatcdbgrid = class(tdbgrid)\nprivate\nfcachedshow: tcachedshow;\nfmodifiedcolor: tcolor;\nfinsertedcolor: tcolor;\nfdeletedcolor: tcolor;\nprocedure setcachedshow(const value: tcachedshow);\nprotected\nprocedure drawdatacell(const rect: trect; field: tfield;\nstate: tgriddrawstate); override;\nprocedure drawcolumncell(const rect: trect; datacol: integer;\ncolumn: tcolumn; state: tgriddrawstate); override;\npublic\nconstructor create(aowner: tcomponent); override;\npublished\nproperty atccachedshow: tcachedshow read fcachedshow write setcachedshow;\nproperty atcdeletedcolor: tcolor read fdeletedcolor write fdeletedcolor;\nproperty atcinsertedcolor: tcolor read finsertedcolor write finsertedcolor;\nproperty atcmodifiedcolor: tcolor read fmodifiedcolor write fmodifiedcolor;\nend;\n\nprocedure register;\n\nimplementation\n\n(******************************************************************************)\nprocedure register;\nbegin\nregistercomponents('atc db compo', [tatcdbgrid]);\nend;\n\n(******************************************************************************)\nconstructor tatcdbgrid.create(aowner: tcomponent);\n(*\ndescription: record type showing is all except deletes.\n*)\n\nbegin\ninherited;\nfcachedshow := csnormal;\nfdeletedcolor := clgray;\nfinsertedcolor := claqua;\nfmodifiedcolor := clred;\nend;\n\n(******************************************************************************)\nprocedure tatcdbgrid.drawcolumncell(const rect: trect; datacol: integer;\ncolumn: tcolumn; state: tgriddrawstate);\n(*\ndescription: on drawing column color updated records.\n*)\nvar\narect: trect;\nbegin\ninherited;\nif not assigned(column.field) then\nexit;\n\/\/ copy rect into variable.\ncopyrect(arect, rect);\nif assigned(datalink) and (datalink.active) and (datalink.dataset <> nil) then\nbegin\n\/\/ \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430\nif datalink.dataset.updatestatus = usmodified then\nbegin\ncanvas.brush.color := atcmodifiedcolor;\ncanvas.font.color := clblack;\ncanvas.fillrect(rect);\ndrawtext(canvas.handle, pchar(column.field.text), length(column.field.text), arect,\nalignflags[column.alignment] or rtl[userighttoleftalignmentforfield(column.field, column.alignment)]);\nend\n\/\/ \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430.\nelse if datalink.dataset.updatestatus = usinserted then\nbegin\ncanvas.brush.color := atcinsertedcolor;\ncanvas.font.color := clblack;\ncanvas.fillrect(rect);\ndrawtext(canvas.handle, pchar(column.field.text), length(column.field.text), arect,\nalignflags[column.alignment] or rtl[userighttoleftalignmentforfield(column.field, column.alignment)]);\nend\n\/\/ \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u0430.\nelse if datalink.dataset.updatestatus = usdeleted then\nbegin\ncanvas.brush.color := atcdeletedcolor;\ncanvas.font.color := clwhite;\ncanvas.fillrect(rect);\ndrawtext(canvas.handle, pchar(column.field.text), length(column.field.text), arect,\nalignflags[column.alignment] or rtl[userighttoleftalignmentforfield(column.field, column.alignment)]);\nend;\nend;\nend;\n\n(******************************************************************************)\nprocedure tatcdbgrid.drawdatacell(const rect: trect; field: tfield;\nstate: tgriddrawstate);\n(*\n\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435: \u0420\u0438\u0441\u0443\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0438\n*)\nvar\narect: trect;\nbegin\ninherited;\ncopyrect(arect, rect);\n\nif assigned(datalink) and (datalink.active) and (datalink.dataset <> nil) then\nbegin\n\/\/ \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430\nif datalink.dataset.updatestatus = usmodified then\nbegin\ncanvas.brush.color := clred;\ncanvas.font.color := clblack;\ncanvas.fillrect(rect);\ndrawtext(canvas.handle, pchar(field.text), length(field.text), arect,\nalignflags[field.alignment] or rtl[userighttoleftalignmentforfield(field, field.alignment)]);\nend\n\/\/ \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430.\nelse if datalink.dataset.updatestatus = usinserted then\nbegin\ncanvas.brush.color := claqua;\ncanvas.font.color := clblack;\ncanvas.fillrect(rect);\ndrawtext(canvas.handle, pchar(field.text), length(field.text), arect,\nalignflags[field.alignment] or rtl[userighttoleftalignmentforfield(field, field.alignment)]);\nend\n\/\/ \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u0430.\nelse if datalink.dataset.updatestatus = usdeleted then\nbegin\ncanvas.brush.color := clgray;\ncanvas.font.color := clwhite;\ncanvas.fillrect(rect);\ndrawtext(canvas.handle, pchar(field.text), length(field.text), arect,\nalignflags[field.alignment] or rtl[userighttoleftalignmentforfield(field, field.alignment)]);\nend;\nend;\nend;\n\n(******************************************************************************)\nprocedure tatcdbgrid.setcachedshow(const value: tcachedshow);\n(*\ndescription: record type for showing in grid.\nparameters: value cached record show.\n*)\n\nbegin\nfcachedshow := value;\nif componentstate = [csdesigning] then\nexit;\nif not assigned(datasource) or not assigned(datasource.dataset) then\nexit;\n\/\/ \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.\nif assigned(datalink) and assigned(datalink.dataset) and (datalink.active) then\nbegin\ncase fcachedshow of\ncsall:\ntbdedataset(datasource.dataset).updaterecordtypes := [rtmodified, rtinserted, rtdeleted, rtunmodified];\ncsmodify:\ntbdedataset(datasource.dataset).updaterecordtypes := [rtmodified];\ncsunmodify:\ntbdedataset(datasource.dataset).updaterecordtypes := [rtunmodified];\ncsinserted:\ntbdedataset(datasource.dataset).updaterecordtypes := [rtinserted];\ncsremoved:\ntbdedataset(datasource.dataset).updaterecordtypes := [rtdeleted];\ncsnormal:\ntbdedataset(datasource.dataset).updaterecordtypes := [rtmodified, rtinserted, rtunmodified];\nend;\nend;\nend;\n\n(******************************************************************************)\nend.\n<\/div><\/pre>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>DBGrid \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[401,386],"tags":[1906,808,822,881,954,1041],"_links":{"self":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/238"}],"collection":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=238"}],"version-history":[{"count":0,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/238\/revisions"}],"wp:attachment":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=238"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}