اشکال عجیب هنگام کار با StringGrid
سلام
یه StringGrid دارم کهه مثلا فقط یه سلول براش تعریف کردم(فقط برای مثال زیر)
وقتی میخوام مقدار سلول رو بخونم و در رشته به کار ببرم،مقدار رشته عجیب میشه.
کد زیر رو در نظر بگیرید:
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[1,1]:='123';
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
var
S:String;
begin
S:='Bk'+RightStr('0000'+StringGrid1.Cells[1,1],5);
S:=S+'\'+S;
ShowMessage(S);
S:=RightStr('0000'+StringGrid1.Cells[1,1],5);
S:=S+'\'+S;
ShowMessage(S);
S:=RightStr('0000'+StringGrid1.Cells[1,1],5);
ShowMessage(IntToStr(Length(S)));
S:=S+'\'+S;
ShowMessage(S);
end;
نتیجه پیامها این هستند:
\Bk00123\Bk00123
مربع0012\00123
5
پنجره Access Violation
چرا اینطور میشه؟(چرا هیچکس به سوالاتم جواب نمیده!)
نقل قول: اشکال عجیب هنگام کار با StringGrid
وحشتناکه.اولش گفتم شاید اشکال از استرینگ گرید نباشه.دیدم آره اشکال عمومیه.
بعد گفتم شاید به خاطر نصب کامپوننت برای xls مشکل پیش اومده.دلفی رو دو باره از اول نصب کردم.
باز مشکل وجود داشت.
این کد درست کار نمی کنه(میخواستم تصویر صفحه کتاب که شماره اتوماسیون کتاب و جلد اصلی و بخش و شماره صفحه داره رو نمایش بدم):
procedure ShowGifName(Col4,Col6,Col7:String);
var
S:String;
P,I:word;
begin
S:='Bk'+RightStr('0000'+Col4,5);
P:=pos('-',Col6);
if P>0 then
Begin
S:=S+'G'+RightStr('00'+copy(Col6,1,P-1),3);
S:=S+'\'+S+'S'+copy(Col6,P+1,2);
End
else
Begin
S:=S+'G'+RightStr('00'+Col6,3);
S:=S+'\'+S+'S1';
End;
S:=S+'\'+S+'P'+Col7+'.gif';
ShowMessage(S);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowGifName('13078','01-2','26');
end;
باید Bok13078G001\Bok13078G001S2\Bok13078G001S2P26.gif نمایش بده اما رشته رو قطع می کنه.
مربعBok13078G001\Bok13078G نمایش میده!(در حالی که نصف پنجره ShowMessage هم خالیه!)
نقل قول: اشکال عجیب هنگام کار با StringGrid
فهمیدم اشکال از ویندوز و ویروس یاب هم نیست(از یه ویندوز دیگه با ویروس یاب دیگه استفاده کردم،مشکل باقی بود)
فکر کردم شاید RightStr مشکل داره.ازش استفاده نکردم باز رشته رو خراب می کرد:
procedure ShowGifName(Col4,Col6,Col7:String);
var
S:String;
P,I:word;
begin
S:='Bk'+Col4;//RightStr('0000'+Col4,5);
P:=pos('-',Col6);
if P>0 then
Begin
S:=S+'G'+Col6;//RightStr('00'+copy(Col6,1,P-1),3);
S:=S+'\'+S+'S'+copy(Col6,P+1,2);
End
else
Begin
S:=S+'G'+col6;//RightStr('00'+Col6,3);
S:=S+'\'+S+'S1';
End;
S:=S+'\'+S+'P'+Col7+'.gif';
ShowMessage(S);
end;
نمی فهمم چطور ممکنه؟من بارها تصویر رو با برنامه نمایش دادم.
برای اونها که حوصله ندارند کد رو بخونند.این هم یه بک اسلش اضافه آخرش میذاره
procedure TForm1.FormCreate(Sender: TObject);
var
S:String;
begin
S:='Bk'+'123';
S:=S+'G'+'123';
S:=S+'\'+S;
ShowMessage(S);
end;
نقل قول: اشکال عجیب هنگام کار با StringGrid
وقتی در یک انتساب دو بار از متغیر استفاده کنیم مشکل پیش میاد.من به جای S اول از tmp استفاده کردم مشکل حل شد.
مثلا
procedure TForm1.FormCreate(Sender: TObject);
var
S,tmp:String;
begin
S:='Bk'+'123';
tmp:=S+'G'+'123';
S:=tmp+'\'+S;
ShowMessage(S);
end;
نمی دونم تاپیک رو حذف کنم یا نه؟مسئولین خواستند میتونند حذف کنند
نقل قول: اشکال عجیب هنگام کار با StringGrid
سلام. مشکلتون خیلی عجیبه، شاید در نمایش مشکل پیش میاد، خروجی رو در دیباگر ببینید باز هم مشکل داره یا نه، اگر مشکل رفع نشد، یه سمپل فایل بگذار من هم تست کنم.
نقل قول: اشکال عجیب هنگام کار با StringGrid
مشکل که حل شد.کاش من هم بلد بودم از دیباگر استفاده کنم.
یعنی فقط من با این کد مشکل دارم؟
var
S:String;
begin
S:='Bk'+'123';
S:=S+'G'+'123';
S:=S+'\'+S;
ShowMessage(S);
end;