الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Virtualtreeviw

بدأه fored في 15 فبراير 2012 · 5 رد · 490 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

استخدم المكون مكون Virtual TreeViw لعرض بيانات جدول الحسابات . ولكن تظهر رسالة خطا عند سطر Pdata.^caption لااعرف سبب المشكلة

post-257535-057363600 1329290995_thumb.j

وهذه رسالة الخطأ

post-257535-029359300 1329291053_thumb.j

وإذا الغينا السطر البرمجي لايوجد مشاكل

post-257535-047484900 1329291098_thumb.j

unit F_acc;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, AdvEdit, advlued, ComCtrls, VirtualTrees;

type
  Tacc = class(TForm)
    pnl1: TPanel;
    grp1: TGroupBox;
    lbl2: TLabel;
    edt2: TEdit;
    lbl3: TLabel;
    edt3: TEdit;
    grp2: TGroupBox;
    edt4: TEdit;
    lbl5: TLabel;
    edt5: TEdit;
    lbl6: TLabel;
    lbl7: TLabel;
    edt6: TEdit;
    edt7: TEdit;
    lbl8: TLabel;
    lbl9: TLabel;
    lbl10: TLabel;
    lbl11: TLabel;
    cbb2: TComboBox;
    lbl12: TLabel;
    Edt8: TAdvLUEdit;
    Edt9: TAdvLUEdit;
    Edt10: TAdvLUEdit;
    pnl2: TPanel;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    btn5: TButton;
    edt1: TEdit;
    lbl1: TLabel;
    lbl4: TLabel;
    cbb1: TComboBox;
    cbb3: TComboBox;
    lbl13: TLabel;
    btn6: TButton;
    vst: TVirtualStringTree;
    procedure edt1KeyPress(Sender: TObject; var Key: Char);
    procedure btn6Click(Sender: TObject);
  private
    procedure uptree;
    { Private declarations }
  public
    { Public declarations }
  end;
     type
PNodeData = ^TNodeData;
TNodeData = record
caption : String;
image,id,level:Integer;
end;
var
  acc: Tacc;

implementation
    uses F_DM, F_showacc;
{$R *.dfm}
procedure Tacc.uptree;
var i,e,b,t,x,y : integer;
str : Tstrings;
NodeT: array[0..1000] of PVirtualNode;
pData: PNodedata  ;
begin
vst.Cursor := crhourglass;
vst.BeginUpdate;
str := Tstringlist.Create;
str.Clear;
vst.Clear;
//------------------------------------------
i := 0; x := 0; y := 0;
str.Append('0');


with DM.QrAcc   do
  begin
	Close;
	SQL.Clear;
	sql.CommaText := 'select * from account ';
	Open;
	e := RecordCount;
	Close;
	SQL.Add('where cood_accfather = :p1 ');
	Parameters.ParamByName('p1').Value := str;
	Open;
	First;
  end;
for t := 0 to DM.QrAcc .RecordCount-1 do
		begin
		str.Append(DM.QrAcc .fields.FieldByName('cood_acc').AsString);
		NodeT[x] := VST.AddChild(nil);
		pData := VST.GetNodeData(NodeT[x]);
	 	pdata^.Caption := DM.QrAcc.Fields.FieldByName('name_acc').AsString;
		x := x + 1;
		DM.QrAcc .Next;
		end;
for b := 0  to e-1 do
		begin
		i := i + 1;
		DM.QrAcc .Close;
		DM.QrAcc .Parameters.ParamByName('p1').Value := str;
		DM.QrAcc .Open;
		DM.QrAcc .First;
		for t := 0 to DM.QrAcc .RecordCount-1 do
		begin
		str.Append(DM.QrAcc.FieldByName('cood_acc').AsString);
		NodeT[x] := VST.AddChild(nodeT[y]);
	 	pData := VST.GetNodeData(NodeT[x]);
	 	pdata^.Caption := DM.QrAcc.fields.FieldByName('name_acc').AsString;
		x := x + 1;
		DM.QrAcc .Next;
		end;
		y := y + 1;
		end;
vst.FullExpand(NIL);
vst.EndUpdate;
vst.Cursor := crdefault;
end;

هل من حل لهذة المشكلة . ولكم الشكر

المرفقات
2.jpgUntitled.jpg3.jpg

تم تعديل هذه المشاركة بواسطة fored في 15 فبراير 2012 في 10:36

#2

وعليكم السلام ورحمة الله وبركاته

قبل التعامل مع المؤشرات يستحسن فحصها بمجرد توقع أنها يمكن لا تؤشر على شيء

جرب:

  if Assigned(pdata) then
    pdata^.Caption := DM.QrAcc.Fields.FieldByName('name_acc').AsString;

وكذلك مع كل متغير يثير استثناء مشابه

بالتوفيق.

1
#3

شكرا لك اخي الكريم وبارك الله بك . سأجربها حالا إن شاء الله

#4

السلام عليكم

بقيت مشكلة في الحدث on Get Text

اذا كان الكود

var

PData : PnoodData

begin

Pdata:= Psender .Getnoddata(node

celltext:=Pdata.^caption

end

تكون نفس رسالة الخطأز

وإذا اضفنا

if assigned

لايستخرج بيانات تبقى الكابشن نود

مع الشكر

#5

هذا الكود كامل

 

procedure TF_dalel.uptree;
var i,e,b,t,x,y : integer;
str : Tstrings;
NodeT: array[0..1000] of PVirtualNode;
pData: PNodedata  ;
begin
vst.Cursor := crhourglass;
vst.BeginUpdate;
str := Tstringlist.Create;
str.Clear;
vst.Clear;

i := 0; x := 0; y := 0;
str.Append('0');


with Module1.Qr1  do
  begin
	Close;
	SQL.Clear;
	sql.CommaText := 'select * from asset_ss ';
	Open;
	e := RecordCount;
	Close;
	SQL.Add('where accfather = :p1 ');
	Parameters.ParamByName('p1').Value := str;
	Open;
	First;
  end;
for t := 0 to Module1.Qr1.RecordCount-1 do
		begin
		str.Append(Module1.Qr1.fields.FieldByName('code').AsString);
		NodeT[x] := VST.AddChild(nil);

     		pData := VST.GetNodeData(NodeT[x]);
         if assigned(pdata) then
	 	pdata^.Caption := Module1.Qr1.Fields.FieldByName('accname').AsString;


		x := x + 1;
		Module1.Qr1.Next;
		end;
for b := 0  to e-1 do
		begin
		i := i + 1;
		Module1.Qr1.Close;
		Module1.Qr1.Parameters.ParamByName('p1').Value := str;
		Module1.Qr1.Open;
		Module1.Qr1.First;
		for t := 0 to Module1.Qr1.RecordCount-1 do
		begin
		str.Append(Module1.Qr1.FieldByName('code').AsString);
		NodeT[x] := VST.AddChild(nodeT[y]);

	 pData := VST.GetNodeData(NodeT[x]);
   if assigned(pdata) then

	 	pdata^.Caption :=  Module1.Qr1.fields.FieldByName('accname').AsString;

		x := x + 1;
		Module1.Qr1.Next;
		end;
		y := y + 1;
		end;
vst.FullExpand(NIL);
vst.EndUpdate;
vst.Cursor := crdefault;
end;

وفي الحدث on get text

 procedure TF_dalel.vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
var

  pData:	PNodeData;
begin
  pData	:=sender.GetNodeData(Node);
 if assigned(pdata) then
     CellText := pData^.Caption;
end;

يعمل ولكن تبقى الكابشن نود . اي لايقوم بالقراءة من قاعدة البيانات

ارجو المساعدة . وشكرا

تم تعديل هذه المشاركة بواسطة fored في 20 فبراير 2012 في 10:36

#6

احتمالات كثير ترد على هذه الاعتراض، قد يكون سببها نوع بيانات الحقل [ftMemo, ftGraphic, ftBlob]

تـأكد من الحقل إن كان ممكن الوصول إلى بياناته accessible، وأنه يحتوي بيانات يمكن قراءتها باستخدام الطريقة المتبعة...