TÉMA:
Memo tartalma megváltozik, pedig nem kellene... 2022 nov. 03 10:13 #2624
|
Nos, válaszolok magamnak...
A TEdit adatok frissítésénél rosszul adtam meg a for ciklusban a kezdőértéket. A edtHWTableRAM ugyanis egy tömb, aminek az indexei 1 - 15 értékhatárok között van, én meg 0-tól indítottam a for ciklust, így nyilván rossz helyre mutatott a 0. tömbelemre hivatkozás... (Elnézést a szószaporításért, ha a moderátor úgy gondolja, törölje a témát!) |
|
Memo tartalma megváltozik, pedig nem kellene... 2022 nov. 03 09:15 #2623
|
Sziasztok!
Van egy elég fura problémám, megpróbálom leírni a jelenséget... Van egy projekt, amiben van jelenleg 3 form. Az egyik formon (nem a főformon) vannak egyéb vezérlőelemek: TEdit mezők és három TMemo. A TEdit-ek dinamikusan vannak létrehozva, a TMemo-k fixen fel vannak rakva tervezési időben. Amikor ez a form létrejön a rajta lévő TEdit mezők és memo-k tartalmát módosítom (megjelenítem az aktuális értékeket). Olyan problémám van, hogy ha az egyik TMemo tartalmát módosító eljárást meghívom és UTÁNA egy másik eljárásban frissítem a TEdit mezők tartalmát, akkor a TMemo tartalma is módosul. Ha megcserélem az eljárások sorrendjét, akkor nincs ilyen gondom. Tehát a utoljára fut le a TMemo tartalmának frissítése. (Vagy ha elhagyom a TEdit mezők tartalmának frissítését.) Tehát olyan a jelenség, mintha a TMemo text frissítése után a TEdit mezők frissítésének hatására a TMemo text átíródna... Mellékelem a kód ide vonatkozó részét. Én nem tudtam rájönni, mi okozza a gondot... Ha valakinek van kedve átnézni, elküldhetem a teljes projektet is. ...
procedure TfrmDetails.FormCreate(Sender: TObject);
var
iTmp:integer;
begin
lblHWTableTitle:=TLabel.Create(self); //'HW table' label
with lblHWTableTitle do
begin
Parent:=self;
Height:=cHeightDet;
Width:=cWidthLbl;
Left:=cDistXLbl_0+cWidthLbl+cXGap;
Top:=cDistYLbl_0;
Name:='lblHWTableTitle';
Text:='HW table';
// Visible:=false;
// NumbersOnly:=true;
// Maxlength:=5;
// OnEditingDone:=@CheckIODatLimits;
Font.Name:=cLabelFontType;
Font.Size:=cLabelFontSize;
end;
lblMsgStatTitle:=TLabel.Create(self); //'Message status' label
with lblMsgStatTitle do
begin
Parent:=self;
Height:=cHeightDet;
Width:=cWidthLbl;
Left:=cDistXLbl_0+cWidthLbl+cXGap+cWidthCbo+cXGap;
Top:=cDistYLbl_0;
Name:='lblMsgStat';
Text:='Msg. stat.';
// Visible:=false;
// NumbersOnly:=true;
// Maxlength:=5;
// OnEditingDone:=@CheckIODatLimits;
Font.Name:=cLabelFontType;
Font.Size:=cLabelFontSize;
end;
lblIODatOffsTitle:=TLabel.Create(self); //'IO data offset' label
with lblIODatOffsTitle do
begin
Parent:=self;
Height:=cHeightDet;
Width:=cWidthLbl;
Left:=cDistXLbl_0+cWidthLbl+cXGap+cWidthCbo+cXGap+cWidthCbo+cXGap;
Top:=cDistYLbl_0;
Name:='lblIODatOffsTitle';
Text:='IO Data offs.';
// Visible:=false;
// NumbersOnly:=true;
// Maxlength:=5;
// OnEditingDone:=@CheckIODatLimits;
Font.Name:=cLabelFontType;
Font.Size:=cLabelFontSize;
end;
for iTmp:=1 to 15 do
begin
lblHWTableRAM[iTmp]:=TLabel.Create(self); //'HW table' number labels
with lblHWTableRAM[iTmp] do
begin
Parent:=self;
Height:=cHeightDet;
Width:=cWidthLbl;
Left:=cDistXLbl_0;
Top:=cDistYLbl_0+cHeightDet+cYGap+(cYGap+CHeightDet)*(iTmp-1);
Name:='lblHWTableRAM_'+IntToStr(iTmp);
Text:=IntToStr(iTmp);
// Visible:=false;
// NumbersOnly:=true;
// Maxlength:=5;
// OnEditingDone:=@CheckIODatLimits;
Font.Name:=cLabelFontType;
Font.Size:=cLabelFontSize;
end;
edtHWTableRAM[iTmp]:=TEdit.Create(self); //'HW table' combo boxes
with edtHWTableRAM[iTmp] do
begin
Parent:=self;
Height:=cHeightDet;
Width:=cWidthCbo;
Left:=cDistXLbl_0+cWidthLbl+cXGap;
Top:=cDistYLbl_0+cHeightDet+cYGap+(cYGap+CHeightDet)*(iTmp-1);
Name:='edtHWTableRAM_'+IntToStr(iTmp);
Text:='0';
Enabled:=false;
// Visible:=false;
// NumbersOnly:=true;
// Maxlength:=5;
// OnEditingDone:=@CheckIODatLimits;
Font.Name:=cLabelFontType;
Font.Size:=cLabelFontSize;
end;
edtMsgStatRAM[iTmp]:=TEdit.Create(self); //'Message satus' combo boxes
with edtMsgStatRAM[iTmp] do
begin
Parent:=self;
Height:=cHeightDet;
Width:=cWidthCbo;
Left:=cDistXLbl_0+cWidthLbl+cXGap+cWidthCbo+cXGap;
Top:=cDistYLbl_0+cHeightDet+cYGap+(cYGap+CHeightDet)*(iTmp-1);
Name:='edtMsgStatRAM_'+IntToStr(iTmp);
Text:='0';
Enabled:=false;
// Visible:=false;
// NumbersOnly:=true;
// Maxlength:=5;
// OnEditingDone:=@CheckIODatLimits;
Font.Name:=cLabelFontType;
Font.Size:=cLabelFontSize;
end;
edtIODatOffsRAM[iTmp]:=TEdit.Create(self); //'IO Data offset' combo boxes
with edtIODatOffsRAM[iTmp] do
begin
Parent:=self;
Height:=cHeightDet;
Width:=cWidthCbo;
Left:=cDistXLbl_0+cWidthLbl+cXGap+cWidthCbo+cXGap+cWidthCbo+cXGap;
Top:=cDistYLbl_0+cHeightDet+cYGap+(cYGap+CHeightDet)*(iTmp-1);
Name:='edtIODatOffsRAM_'+IntToStr(iTmp);
Text:='0';
Enabled:=false;
// Visible:=false;
// NumbersOnly:=true;
// Maxlength:=5;
// OnEditingDone:=@CheckIODatLimits;
Font.Name:=cLabelFontType;
Font.Size:=cLabelFontSize;
end;
end;
RefreshMsg(); //refresh message table content
RefreshMsgRes(); //refresh message result table content
RefreshIODat(); //refresh IO Data content - ez a két sor a problémás!
RefreshHWTable(); //refresh HWTable values - ez a két sor a problémás!
end;
procedure RefreshIODat(); //refresh IO Data content
var
iTmp, iTmp2: integer;
strTmp:string;
begin
{
bI2C1IODat[6]:=6;
bI2C1IODat[7]:=7;
bI2C1IODat[8]:=8;
bI2C1IODat[9]:=209;
bI2C1IODat[10]:=10;
bI2C1IODat[11]:=101;
bI2C1IODat[12]:=212;
}
iTmp2:=0;
strTmp:=' 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15'+#13+#10;
repeat
strTmp:=strTmp+#13+#10+PadRight(IntToStr(iTmp2*16),4);
for iTmp:=0 to 15 do strTmp:=strTmp+PadRight(IntToStr(bI2C1IODat[iTmp2*16+iTmp]),4);
iTmp2:=iTmp2+1;
until iTmp2>=15;
frmDetails.memIODat.Text:=strTmp;
end;
procedure RefreshHWTable();
var
iTmp: integer;
begin
try
for iTmp:=0 to 15 do
begin
frmDetails.edtHWTableRAM[iTmp].Text:=IntToStr(bHWType[iTmp]);
end;
except
for iTmp:=0 to 15 do
begin
frmDetails.edtHWTableRAM[iTmp].Text:='0';
ShowMessage('Error during set HWTable values! (At Details form.)');
end;
end;
end; |
|