PDA

View Full Version : سوال: اشکال عجیب هنگام کار با StringGrid



mbshareat
دوشنبه 23 اردیبهشت 1398, 05:03 صبح
سلام
یه 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

چرا اینطور میشه؟(چرا هیچکس به سوالاتم جواب نمیده!)

mbshareat
دوشنبه 23 اردیبهشت 1398, 07:33 صبح
وحشتناکه.اولش گفتم شاید اشکال از استرینگ گرید نباشه.دیدم آره اشکال عمومیه.
بعد گفتم شاید به خاطر نصب کامپوننت برای 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 هم خالیه!)

mbshareat
دوشنبه 23 اردیبهشت 1398, 13:05 عصر
فهمیدم اشکال از ویندوز و ویروس یاب هم نیست(از یه ویندوز دیگه با ویروس یاب دیگه استفاده کردم،مشکل باقی بود)
فکر کردم شاید 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;

mbshareat
دوشنبه 23 اردیبهشت 1398, 13:38 عصر
وقتی در یک انتساب دو بار از متغیر استفاده کنیم مشکل پیش میاد.من به جای 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;



نمی دونم تاپیک رو حذف کنم یا نه؟مسئولین خواستند میتونند حذف کنند

یوسف زالی
دوشنبه 23 اردیبهشت 1398, 14:55 عصر
سلام. مشکلتون خیلی عجیبه، شاید در نمایش مشکل پیش میاد، خروجی رو در دیباگر ببینید باز هم مشکل داره یا نه، اگر مشکل رفع نشد، یه سمپل فایل بگذار من هم تست کنم.

mbshareat
دوشنبه 23 اردیبهشت 1398, 23:45 عصر
مشکل که حل شد.کاش من هم بلد بودم از دیباگر استفاده کنم.
یعنی فقط من با این کد مشکل دارم؟
var
S:String;
begin
S:='Bk'+'123';
S:=S+'G'+'123';
S:=S+'\'+S;
ShowMessage(S);
end;