Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

На тему ini файлов   Найти похожие ветки 

 
markers ©   (2004-12-27 15:16) [0]

Привет! С наступающим! Вообщем у меня возник такой маленький вопрос!;) Имеем процедуру в которой мы читаем много значений из инишки при помощи MemIni, всё хорошо без проблем, но после присвоения оного значения мне нужно вывать событие OnChange, в обработке которого у меня тоже читается инифайл (Уже другой), дя заполнения другого элемента, так вот при этом вываливается Access Vivolation, так вот вопрос можно ли это как-то исправить не отказываясь от данного построения? (Точнее закрыть газа на мелкую гадость из-за этого)


 
Fay ©   (2004-12-27 15:29) [1]

Код где?


 
markers ©   (2004-12-27 15:31) [2]

это стоит в обработчике OnChange
 DriveNum:=TComboBox(Sender).Tag;
 MemIni2:=TMemIniFile.Create(ExtractFileDir(Application.ExeName)+"\Data\index.idx");
 TempString:=TStringList.Create;
 TempStrings:=TStringList.Create;
 MemIni2.ReadSection("DrivesList",TempString);
 for iR:=0 to TempString.Count-1 do
  begin
   Temp:=MemIni2.ReadString("DrivesList",CStr("DriveInterface"+IntToStr(DriveNum))+IntToStr(iR),"");
   if Trim(Temp) <> "" Then
    begin
     TempStrings.Add(Temp);
    end;
  end;
 TComboBox(CNum("DriveType"+IntToStr(DriveNum))).Items.Clear;
 TComboBox(CNum("DriveType"+IntToStr(DriveNum))).Items.AddStrings(TempStrings);
 TLabeledEdit(CNum("DriveSpeedFormula"+IntToStr(DriveNum))).Left:=TLabeledEdit(CNum("DriveSize"+IntToStr(DriveNum))).Left ;
 TempStrings.Free;
 TempString.Free;
 MemIni2.Free;
 if (TComboBox(CNum("DriveInterface"+IntToStr(DriveNum))).ItemIndex = -1) or (TComboBox(Sender).ItemIndex = TComboBox(Sender).Items.Count-1) Then
  begin
   TLabeledEdit(CNum("DriveSize"+IntToStr(DriveNum))).Visible:=False;
   TLabeledEdit(CNum("DriveSpeedFormula"+IntToStr(DriveNum))).Visible:=False;
  end;


 
markers ©   (2004-12-27 15:32) [3]

Это внутринние процедуры для обработчика OnChange

function CNum(Names:String):TObject;
var i:integer;
begin
 for i:=0 to DrivesPage.ControlCount-1 do
  begin
   if DrivesPage.Controls[i].Name = Names Then
    begin
     Result:=DrivesPage.Controls[i];
    end;
  end;
end;

function CStr(Name:String):String;
var i:integer;
begin
 for i:=0 to DrivesPage.ControlCount-1 do
  begin
   if DrivesPage.Controls[i].Name = Name Then
    begin
     Result:=TComboBox(DrivesPage.Controls[i]).Text;
    end;
  end;
end;


 
Fay ©   (2004-12-27 15:35) [4]

Ну, и в каком же месте AV?


 
markers ©   (2004-12-27 15:38) [5]

Процедура (Начальная) из которой вызывается обработчик OnChange
 if CompCombo.Text <> "" Then
  begin
   ClearAllRowers;
   MeMIni:=TMemIniFile.Create(ExtractFileDir(Application.ExeName)+"\Data\index.idx");
   for i:=0 to FileList.Count-1 do
    begin
     if OtdelCombo.Text = MeMIni.ReadString("Departments",FileList.Strings[i],Musor) Then
      begin
       Temp:=ExtractFileDir(Application.ExeName)+"\Data\"+FileList.Strings[i];
      end;
    end;
   MeMIni.Free;
   if (Temp <> "") and (Temp <> musor) Then
    begin
      with TMemIniFile.Create(Temp) do
       begin
        IniUpdate:=True;
       ...
       {<Drives>}
        DrivesPageShow(DrivesPage);
        Temp:=ReadString(CompCombo.Text,"DriveInterface1","");
        for i2:=0 to DriveInterface1.Items.Count-1 do
         if DriveInterface1.Items.Strings[i2]=Temp Then
          begin
           DriveInterface1.ItemIndex:=i2;
           Break;
          end;
        DriveInterface1Change(DriveInterface1);
        Temp:=ReadString(CompCombo.Text,"DriveType1","");
        for i2:=0 to DriveType1.Items.Count-1 do
         if DriveType1.Items.Strings[i2]=Temp Then
          begin
           DriveType1.ItemIndex:=i2;
           Break;
          end;
        DriveType1Change(DriveType1);
        DriveName1.Text:=ReadString(CompCombo.Text,"DriveVendorAndModel1","");
        DriveSize1.Text:=ReadString(CompCombo.Text,"DriveSize1","");
        DriveSpeedFormula1.Text:=ReadString(CompCombo.Text,"DriveSpeedFormula1","");
        DriveSNAndInventar1.Text:=ReadString(CompCombo.Text,"DriveSNAndInventar1","");
        DriveDate1.Text:=ReadString(CompCombo.Text,"DriveDate1","");
        if DriveDate1.Text = "  .  .    " Then DriveDate1.Text:="01.01.2004";
        DriveInterface1Change(DriveType1);
        {xxx}
        Temp:=ReadString(CompCombo.Text,"DriveInterface2","");
        for i2:=0 to DriveInterface2.Items.Count-1 do
         if DriveInterface2.Items.Strings[i2]=Temp Then
          begin
           DriveInterface2.ItemIndex:=i2;
           Break;
          end;
        DriveInterface1Change(DriveInterface2);
        Temp:=ReadString(CompCombo.Text,"DriveType2","");
        for i2:=0 to DriveType2.Items.Count-1 do
         if DriveType2.Items.Strings[i2]=Temp Then
          begin
           DriveType2.ItemIndex:=i2;
           Break;
          end;
        DriveType1Change(DriveType2);
        DriveName2.Text:=ReadString(CompCombo.Text,"DriveVendorAndModel2","");
        DriveSize2.Text:=ReadString(CompCombo.Text,"DriveSize2","");
        DriveSpeedFormula2.Text:=ReadString(CompCombo.Text,"DriveSpeedFormula2","");
        DriveSNAndInventar2.Text:=ReadString(CompCombo.Text,"DriveSNAndInventar2","");
        DriveDate2.Text:=ReadString(CompCombo.Text,"DriveDate2","");
        if DriveDate2.Text = "  .  .    " Then DriveDate2.Text:="01.01.2004";
        {xxx}
        Temp:=ReadString(CompCombo.Text,"DriveInterface3","");
        for i2:=0 to DriveInterface3.Items.Count-1 do
         if DriveInterface3.Items.Strings[i2]=Temp Then
          begin
           DriveInterface3.ItemIndex:=i2;
           Break;
          end;
        DriveInterface1Change(DriveInterface3);
        Temp:=ReadString(CompCombo.Text,"DriveType3","");
        for i2:=0 to DriveType3.Items.Count-1 do
         if DriveType3.Items.Strings[i2]=Temp Then
          begin
           DriveType3.ItemIndex:=i2;
           Break;
          end;
        DriveType1Change(DriveType3);
        DriveName3.Text:=ReadString(CompCombo.Text,"DriveVendorAndModel3","");
        DriveSize3.Text:=ReadString(CompCombo.Text,"DriveSize3","");
        DriveSpeedFormula3.Text:=ReadString(CompCombo.Text,"DriveSpeedFormula3","");
        DriveSNAndInventar3.Text:=ReadString(CompCombo.Text,"DriveSNAndInventar3","");
        DriveDate3.Text:=ReadString(CompCombo.Text,"DriveDate3","");
        if DriveDate3.Text = "  .  .    " Then DriveDate3.Text:="01.01.2004";
        ...
        Free;
        IniUpdate:=False;
       end;
    end;
 end;


Везде всё нормально, это точно! Потому-что если я делаю в обрабочике OnChange проверку переменной IniUpdate на её включённость и при "правдивом" состоянии её я выхожу из обработчика, то всё оки!


 
Fay ©   (2004-12-27 15:42) [6]

см. [4]


 
markers ©   (2004-12-27 15:46) [7]

Погодь, я кажется нашёл баг...


 
Fay ©   (2004-12-27 15:54) [8]

8)


 
markers ©   (2004-12-27 15:59) [9]

Всё! Всем большое спасибо;) аг нашёлся;)


 
markers ©   (2004-12-27 16:03) [10]

Баг был в неверном оъекте заданным в качестве параметра Sender
        DriveInterface1Change(DriveType1);
И из-за этого происходиа эта эррора на втором круге!


 
MetalFan ©   (2004-12-27 18:22) [11]

жутький код имхо...


 
KilkennyCat ©   (2004-12-28 01:28) [12]

ага. можно уменьшить ровно в два раза, объединив три одинаковых блока (которых вполне возможно и больше) в одну процедуру.

> DriveName1.Text:=ReadString(CompCombo.Text,"DriveVendorAndModel1","");


> DriveName2.Text:=ReadString(CompCombo.Text,"DriveVendorAndModel2","");


> DriveName3.Text:=ReadString(CompCombo.Text,"DriveVendorAndModel3","");



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.036 c
14-1103837749
Vasya.ru
2004-12-24 00:35
2005.01.16
ЗАО "Совасатом"


3-1102727909
Black
2004-12-11 04:18
2005.01.16
Как обновить ADOQuery


3-1102706621
sloug
2004-12-10 22:23
2005.01.16
Выделение записи в таблице


3-1102679847
Lost3000
2004-12-10 14:57
2005.01.16
Нет русского при закачке файла DBF (FoxPro 2.6)


6-1098249604
ИМХО
2004-10-20 09:20
2005.01.16
TNEF, MS Outlook и Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский