Lazarus 3.2 (2024.02.28.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Memo tartalma megváltozik, pedig nem kellene... 2022 nov. 03 10:13 #2624

  • Hozso
  • Hozso profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 33
  • Köszönetek: 0
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

  • Hozso
  • Hozso profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 33
  • Köszönetek: 0
 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; 

 

  • Oldal:
  • 1