На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Edit & ComboBox
    я использую эти два компонента, суть такая, нужно чтобы при выборе строки в combobox`e подставлялось значение в edit из файла, файл у меня создаётся с помощью TiniFile, вот что в файле:

    ExpandedWrap disabled
      <br>[Passwords]<br>test@test.ru=123457<br>test2@test.ru=5436f<br>test3@test.ru=shjr<br>

    и т.д. до знака равно это строки ComboBox`a

    и вот никак не могу сделать чтоб при выборе строки подставлялось значение в edit которое после знака равно :(
      procedure TForm1.FormCreate(Sender: TObject);
      var
       ini: TIniFile;
      begin
       ini:= TIniFile.Create(ExtractFilePath(ParamStr(0))+'1.ini');
       try
         ini.ReadSection('Passwords', ComboBox1.Items);
       finally
         ini.Free;
       end;
      end;

      procedure TForm1.ComboBox1Change(Sender: TObject);
      var
       ini: TIniFile;
      begin
       ini:= TIniFile.Create(ExtractFilePath(ParamStr(0))+'1.ini');
       try
         Edit1.Text:= ini.ReadString('Passwords', ComboBox1.Text, 'none');
       finally
         ini.Free;
       end;
      end;
        а так не пробовал :
        в инспекторе объектов

        ComboBox1.Style  := csSimple
        ComboBox1.Height := 100;

        если получилось, ответь ;)
          Alex-Co
          всё почти получилось...

          я сохраняю значения из edit и combobox в файл кнопкой с кодом:
          ExpandedWrap disabled
            <br>  Ini.WriteString('Passwords', combobox1.Text, Edit1.Text);<br>


          и при использовании ComboBox1Change как ты написал у меня выходит:
          Access violation at adress
          :( и соответственно не записывается ничего.

          а если без использвоания ComboBox1Change то всё записывается как надо...

          ych_boriss
          а зачем мне так? :) я бы тогда юзал listbox
          Сообщение отредактировано: The_Undertaker -
            А, так вон ты о чем, понятненько... :-/
            только вот не пойму почему у тебя акцесс виалейшан вываливается, я этот код проверил - все в порядке. Значит, ты что-то где-то недосмотрел...
            но если у тебя все получилось - удачи!!!! ;)
              да не выходит пока ничего... вот весь код, может так будет проще решить проблему:

              ExpandedWrap disabled
                <br>unit main;<br><br>interface<br><br>uses<br>  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>  Dialogs, inifiles, StdCtrls, ExtCtrls, Buttons;<br><br>type<br>  TForm1 = class(TForm)<br>    Button1: TButton;<br>    Edit1: TEdit;<br>    ComboBox1: TComboBox;<br>    procedure FormCreate(Sender: TObject);<br>    procedure FormDestroy(Sender: TObject);<br>    procedure Button1Click(Sender: TObject);<br>    procedure ComboBox1Change(Sender: TObject);<br>  private<br>    { Private declarations }<br>  public<br>    { Public declarations }<br>  end;<br><br>var<br>  Form1: TForm1;<br>  Ini: TIniFile;<br>  sFile: string;<br>  f: textfile;<br>  st: string;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>  sFile:='.\pass.ini';<br>  ini:= TIniFile.Create(ExtractFilePath(ParamStr(0))+sFile);<br>try<br>  ini.ReadSection('Passwords', ComboBox1.Items);<br>finally<br>  ini.Free;<br>end;<br>  Ini:=TIniFile.Create(sFile);<br>end;<br><br>procedure TForm1.FormDestroy(Sender: TObject);<br>begin<br>if (Ini <> nil) then exit;<br>Ini.UpdateFile;<br>Ini.Free;<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>  Ini.WriteString('Passwords', ComboBox1.Text, Edit1.Text);<br>end;<br><br>procedure TForm1.ComboBox1Change(Sender: TObject);<br>begin<br>  ini:= TIniFile.Create(ExtractFilePath(ParamStr(0))+sFile);<br>  try<br>    Edit1.Text:= ini.ReadString('Passwords', ComboBox1.Text, 'none');<br>  finally<br>    ini.Free;<br>  end;<br>end;<br><br>end.<br>
              Сообщение отредактировано: The_Undertaker -
                попробуй этот код (незабудь подправить где надо ;), например имя модуля)
                unit dbgMain3;

                interface

                uses
                   Windows
                 , Messages
                 , SysUtils
                //  , Variants
                 , Classes
                 , Graphics
                 , Controls
                 , Forms
                 , Dialogs
                 , StdCtrls
                 , ExtCtrls
                 , Buttons
                 , INIFiles
                 ;

                type
                 TForm1 = class(TForm)
                   Button1   : TButton;
                   Edit1     : TEdit;
                   ComboBox1 : TComboBox;
                   procedure FormCreate(Sender: TObject);
                   procedure FormDestroy(Sender: TObject);
                   procedure Button1Click(Sender: TObject);
                   procedure ComboBox1Change(Sender: TObject);
                 private
                   FPWDListFileName : TFileName;
                   FPWDListFile     : TIniFile;
                 public
                 end;

                var
                 Form1: TForm1;
                //  Ini: TIniFile;
                //  sFile: string;
                //  f: textfile;
                //  st: string;

                implementation

                {$R *.dfm}

                const
                 E_MESSAGE = 'EXCEPTION CLASS   : \%s'#13#10 +
                             'EXCEPTION MESSAGE : \%s'#13#10 +
                             'НУ, НЕ ПОЛУЧИЛОСЬ У МЕНЯ, ИЗВИНИ...';

                procedure TForm1.FormCreate(Sender: TObject);
                begin
                 FPWDListFileName := ExtractFilePath(Application.ExeName) + 'passwords.lst';
                 // креатишь только в начале, дестроишь только в конце
                 FPWDListFile     := TIniFile.Create(FPWDListFileName);
                //  sFile:='.\pass.ini';
                //  ini:= TIniFile.Create(ExtractFilePath(ParamStr(0))+sFile);
                 try
                   FPWDListFile.ReadSection('Passwords', ComboBox1.Items);
                //    ini.ReadSection('Passwords', ComboBox1.Items);
                 except
                   on E:Exception do
                     ShowMessageFmt(E_MESSAGE, [E.ClassName, E.Message]);
                //    ini.Free;
                 end;
                //    Ini:=TIniFile.Create(sFile);
                end;

                procedure TForm1.FormDestroy(Sender: TObject);
                begin
                 FPWDListFile.Free;
                //  if (Ini <> nil) then exit;
                //  Ini.UpdateFile;
                //  Ini.Free;
                end;

                procedure TForm1.Button1Click(Sender: TObject);
                begin
                //  ini.WriteString('Passwords', ComboBox1.Text, Edit1.Text);
                 FPWDListFile.WriteString('Passwords', ComboBox1.Text, Edit1.Text);
                end;

                procedure TForm1.ComboBox1Change(Sender: TObject);
                begin
                //  ini:= TIniFile.Create(ExtractFilePath(ParamStr(0))+sFile);
                 try
                //    Edit1.Text:= ini.ReadString('Passwords', ComboBox1.Text, 'none');
                   Edit1.Text:= FPWDListFile.ReadString('Passwords', ComboBox1.Text, 'none');
                //  finally
                 except
                   on E:Exception do
                     ShowMessageFmt(E_MESSAGE, [E.ClassName, E.Message]);
                //    ini.Free;
                 end;
                 /// по большому счету try-except{finally}-end здесь нахрен не нужен
                end;

                end.
                Сообщение отредактировано: ych_boriss -
                  Цитата The_Undertaker, 13.03.03, 14:50:39
                  Alex-Co
                  всё почти получилось...

                  я сохраняю значения из edit и combobox в файл кнопкой с кодом:
                  ExpandedWrap disabled
                    <br>  Ini.WriteString('Passwords', combobox1.Text, Edit1.Text);<br>


                  и при использовании ComboBox1Change как ты написал у меня выходит:
                  Access violation at adress
                  :( и соответственно не записывается ничего.

                  а если без использвоания ComboBox1Change то всё записывается как надо...

                  ych_boriss

                  а зачем мне так? :) я бы тогда юзал listbox


                  Извини, конечно, но с какова ты решил, что это действие тебе нужно сажать на ComboBox1Change его и нужно посадить на кнопку.

                  Что касается вашего кода и кода который написан выше то я настаиваю что с ини файлами нужно работать так как показал я а не так корява как вы. Единственное что я опустил это в тех местах, где я делаю try finally нужно еще сделать try exeption
                    Цитата

                    Извини, конечно, но с какова ты решил, что это действие тебе нужно сажать на ComboBox1Change его и нужно посадить на кнопку.

                    Ты конечно извини, но это уже "каждый сам себе злобный буратино", как кому вздумается, так тот и пишет, главное, чтобы работало ;)
                    Цитата

                    Что касается вашего кода и кода который написан выше то я настаиваю что с ини файлами нужно работать так как показал я а не так корява как вы. Единственное что я опустил это в тех местах, где я делаю try finally нужно еще сделать try exeption

                    Ну-ка, ну-ка, это интересно, а что корявого ты нашел в моем коде, покритикуй, мне прямо интересно, и как же ты предлагаешь избегать "корявости" кода?
                      ych_boriss
                      с твоим вариантом работает ;)
                        Знаете, мне не кажется, более того, я даже уверен, что INI-файлы - далеко не самый лучший способ хранения паролей, да еще и в открытом виде ;)
                          я знаю, но в моём случае можно lol
                          мне для себя надо сделать программу и всё ;)
                            Понимаешь в чем дело, когда ты объявляешь одну глобальную переменную в модуле, после чего в onCreate создаешь объект TiniFiles и дальше продолжаешь работать с этим объектом ты можешь случайно сделать free этому объекту, хотя реально он тебе еще нужен. Поверьте, мне в больших проектах, когда у вас будет тысячи строк  кода уследить за этим очень сложно. И не надо строить из себя гения и говорить, что я такого никогда не допущу, поверти мне, допустите, не сегодня так завтра. Еще одна причина, почему не стоит помещать такие вещи в глобальные переменные это рентрабельность процедур и функций (процедуру или функцию вызывают повторно, еще до того как она завершилась, что на практике происходит довольно часто). Ну и последнее это память, которую вы безжалостно тратите при таком подходе. Это только самые основные причины, что так писать неправильно. Я не отрицаю, что в данном конкретном случае и такой код сработает и будет работать довольно долго, но в один прекрасный момент программа проста, начнет сыпаться и тогда найти и исправить ошибку будет ой как не просто, так что давайте сразу писать нормальный код, а не тяп ляп.
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0355 ]   [ 16 queries used ]   [ Generated: 2.05.24, 02:01 GMT ]