Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.227.190.93] |
|
Сообщ.
#1
,
|
|
|
я использую эти два компонента, суть такая, нужно чтобы при выборе строки в combobox`e подставлялось значение в edit из файла, файл у меня создаётся с помощью TiniFile, вот что в файле:
<br>[Passwords]<br>test@test.ru=123457<br>test2@test.ru=5436f<br>test3@test.ru=shjr<br> и т.д. до знака равно это строки ComboBox`a и вот никак не могу сделать чтоб при выборе строки подставлялось значение в edit которое после знака равно |
Сообщ.
#2
,
|
|
|
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; |
Сообщ.
#3
,
|
|
|
а так не пробовал :
в инспекторе объектов ComboBox1.Style := csSimple ComboBox1.Height := 100; если получилось, ответь |
Сообщ.
#4
,
|
|
|
Alex-Co
всё почти получилось... я сохраняю значения из edit и combobox в файл кнопкой с кодом: <br> Ini.WriteString('Passwords', combobox1.Text, Edit1.Text);<br> и при использовании ComboBox1Change как ты написал у меня выходит: Access violation at adress и соответственно не записывается ничего. а если без использвоания ComboBox1Change то всё записывается как надо... ych_boriss а зачем мне так? я бы тогда юзал listbox |
Сообщ.
#5
,
|
|
|
А, так вон ты о чем, понятненько... :-/
только вот не пойму почему у тебя акцесс виалейшан вываливается, я этот код проверил - все в порядке. Значит, ты что-то где-то недосмотрел... но если у тебя все получилось - удачи!!!! |
Сообщ.
#6
,
|
|
|
да не выходит пока ничего... вот весь код, может так будет проще решить проблему:
<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> |
Сообщ.
#7
,
|
|
|
попробуй этот код (незабудь подправить где надо , например имя модуля)
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. |
Сообщ.
#8
,
|
|
|
Цитата The_Undertaker, 13.03.03, 14:50:39 Alex-Co всё почти получилось... я сохраняю значения из edit и combobox в файл кнопкой с кодом: <br> Ini.WriteString('Passwords', combobox1.Text, Edit1.Text);<br> и при использовании ComboBox1Change как ты написал у меня выходит: Access violation at adress и соответственно не записывается ничего. а если без использвоания ComboBox1Change то всё записывается как надо... ych_boriss а зачем мне так? я бы тогда юзал listbox Извини, конечно, но с какова ты решил, что это действие тебе нужно сажать на ComboBox1Change его и нужно посадить на кнопку. Что касается вашего кода и кода который написан выше то я настаиваю что с ини файлами нужно работать так как показал я а не так корява как вы. Единственное что я опустил это в тех местах, где я делаю try finally нужно еще сделать try exeption |
Сообщ.
#9
,
|
|
|
Цитата Извини, конечно, но с какова ты решил, что это действие тебе нужно сажать на ComboBox1Change его и нужно посадить на кнопку. Ты конечно извини, но это уже "каждый сам себе злобный буратино", как кому вздумается, так тот и пишет, главное, чтобы работало Цитата Что касается вашего кода и кода который написан выше то я настаиваю что с ини файлами нужно работать так как показал я а не так корява как вы. Единственное что я опустил это в тех местах, где я делаю try finally нужно еще сделать try exeption Ну-ка, ну-ка, это интересно, а что корявого ты нашел в моем коде, покритикуй, мне прямо интересно, и как же ты предлагаешь избегать "корявости" кода? |
Сообщ.
#10
,
|
|
|
ych_boriss
с твоим вариантом работает |
Сообщ.
#11
,
|
|
|
Знаете, мне не кажется, более того, я даже уверен, что INI-файлы - далеко не самый лучший способ хранения паролей, да еще и в открытом виде
|
Сообщ.
#12
,
|
|
|
я знаю, но в моём случае можно lol
мне для себя надо сделать программу и всё |
Сообщ.
#13
,
|
|
|
Понимаешь в чем дело, когда ты объявляешь одну глобальную переменную в модуле, после чего в onCreate создаешь объект TiniFiles и дальше продолжаешь работать с этим объектом ты можешь случайно сделать free этому объекту, хотя реально он тебе еще нужен. Поверьте, мне в больших проектах, когда у вас будет тысячи строк кода уследить за этим очень сложно. И не надо строить из себя гения и говорить, что я такого никогда не допущу, поверти мне, допустите, не сегодня так завтра. Еще одна причина, почему не стоит помещать такие вещи в глобальные переменные это рентрабельность процедур и функций (процедуру или функцию вызывают повторно, еще до того как она завершилась, что на практике происходит довольно часто). Ну и последнее это память, которую вы безжалостно тратите при таком подходе. Это только самые основные причины, что так писать неправильно. Я не отрицаю, что в данном конкретном случае и такой код сработает и будет работать довольно долго, но в один прекрасный момент программа проста, начнет сыпаться и тогда найти и исправить ошибку будет ой как не просто, так что давайте сразу писать нормальный код, а не тяп ляп.
|