Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.11.2010, 21:14
Vovich Vovich вне форума
Прохожий
 
Регистрация: 19.11.2010
Сообщения: 7
Репутация: 10
Восклицание Combobox + условные операторы

Добрый вечер!
Прошу направить по правильному направлению)
Задача такая:
Есть Combobox1
Список для Combobox1 берется из файла ComboBoxList.txt
Есть два Image:
- Image2 - картинка минуса, т.е. как бы кнопка "удалить"
- Image1 - картинка плюса, т.е. как бы кнопка "добавить"
Есть 2 Memo
- Memo1 - для загрузки списка из файла в Мемо
- Memo2 - для загрузки списка из файла в Мемо

Суть:
При входе загружается список в ComboBox1
При выходе список сохраняется в ComboBoxList.txt

Например мы пишем слово в ComboBox1 далее
- нажимаем на Image1 (+), если такого слова нет в списке, тогда добавляем в список, сохраняем в файл ComboBoxList.txt и загружаем из этого файла новый список в ComboBox1, в противном случае ничего не происходит
- нажимаем на Image2 (-), если такое слово есть в списке, тогда удаляем его из списока, сохраняем в файл ComboBoxList.txt и загружаем из этого файла новый список в ComboBox1, в противном случае ничего не происходит

Теперь самое интересное необходимо реализовать условие появления картинок Image1 (+) и Image2 (-) в зависимости от того есть введенное слово (или выбранное слово) в списке или нет его.

Пример:
Список:
1
2
3
4
5

1) вводим значение 6 - в результате появляется Image1 (+) и мы можем добавить это значение в наш список.

2) вводим/выбираем значение 3 - в результате появляется Image2 (-) и мы можем удалить это значение из нашего список.

Надеюсь я доходчиво объяснил ситуацию

Вот кусок кода, который уже работает но без реализации последних 2-х улови появления нужных картинок Image1 (+) и Image2 (-)


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    Image1: TImage;
    Image2: TImage;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure Image2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R WindowsXP.res}

procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1.Items.SaveToFile('ComboBoxList.txt');
close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Combobox1.Items.LoadFromFile('ComboBoxList.txt');
end;

procedure TForm1.Image1Click(Sender: TObject);
var list:string;
  q:integer; //счетчик цикла
begin
list:=ComboBox1.Text;
Memo1.Lines.LoadFromFile('ComboBoxList.txt'); //загрузка файла в Memo
for q:=0 to Memo1.Lines.Count-1 do //цикл до последней строки Memo
if Memo1.Lines[q]=list then exit;
if Memo1.Lines[q]<>list then Combobox1.Items.Add(list);
Combobox1.Items.SaveToFile('ComboBoxList.txt');//сохранение содержимого Memo  в файл
Memo1.Lines.LoadFromFile('ComboBoxList.txt'); //загрузка файла в Memo
ShowMessage('Вы добавили строку'+' '+ComboBox1.Text+' '+'в список!');

end;

procedure TForm1.Image2Click(Sender: TObject);
var
i:integer; //счетчик цикла
begin
Memo1.Lines.LoadFromFile('ComboBoxList.txt'); //загрузка файла в Memo
for i:=0 to Memo1.Lines.Count-1 do //цикл до последней строки Memo
if Memo1.Lines[i]=Combobox1.Text then
begin
Memo1.Lines.Delete(i); //проверка условия и удаление строки
Memo1.Lines.SaveToFile('ComboBoxList.txt');//сохранение содержимого Memo  в файл
Combobox1.Items.LoadFromFile('ComboBoxList.txt');
ShowMessage('Вы удалили строку '+' '+ComboBox1.Text+' '+'из списка!');
end;
if Memo1.Lines[i]<>Combobox1.Text then exit;
end;

End.

Последний раз редактировалось Vovich, 19.11.2010 в 21:17.
Ответить с цитированием
  #2  
Старый 19.11.2010, 22:10
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Надо чтоб при вводе текста в MEMO на ходу менялись Image'ы?
Тогда по событию MEMO OnChange надо смотреть, есть ли имеющаяся строка в CB, и в зависимости от этого выставлять значения ImageX.Visible в True/False.
А лучше использовать для этих целей TEdit.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 19.11.2010, 22:19
Vovich Vovich вне форума
Прохожий
 
Регистрация: 19.11.2010
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Надо чтоб при вводе текста в MEMO на ходу менялись Image'ы?
ДА!
Я так и делал) но видимо что-то напутал с условиями и у меня отображались либо 2 сразу либо один. перепробовал практически все события((( понимаю что это принципе просто реализовать, но к сожаления не могу...
Ответить с цитированием
  #4  
Старый 19.11.2010, 22:23
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Ну два не могут никак - надо всегда делать сразу
Код:
 Image1.Visible:=true;
 Image2.Visible:=false;
или наоборот, зависит от условия
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 19.11.2010, 22:28
Vovich Vovich вне форума
Прохожий
 
Регистрация: 19.11.2010
Сообщения: 7
Репутация: 10
По умолчанию

Шота я туплю

Код:
procedure TForm1.ComboBox1Change(Sender: TObject);
  var t:integer;
begin
Memo2.Lines.LoadFromFile('ComboBoxList.txt'); 
for t:=0 to Memo2.Lines.Count-1 do 
if Memo2.Lines[t]=Combobox1.Text then
begin
Image1.Visible:=true;
Image2.Visible:=false;
end;
if Memo2.Lines[t]<>Combobox1.Text then
begin
Image1.Visible:=false;
Image2.Visible:=true;
end;
end;

при вводе нового значения которого нет в списке минус так и остается висеть...
Ответить с цитированием
  #6  
Старый 19.11.2010, 22:31
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Стоп. Сча перечитаю все сначала.

так...
Код:
procedure TForm1.ComboBox1Change(Sender: TObject);
  var t:integer;
       fl:boolean;
begin
Memo2.Lines.LoadFromFile('ComboBoxList.txt'); 
fl:=false;
for t:=0 to Memo2.Lines.Count-1 do 
if Memo2.Lines[t]=Combobox1.Text then
begin
  fl:=true;
  break;
end;
if fl then
Image1.Visible:=true;
Image2.Visible:=false;
end
else
begin
Image1.Visible:=false;
Image2.Visible:=true;
end;
end;
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 19.11.2010 в 22:36.
Ответить с цитированием
  #7  
Старый 19.11.2010, 22:34
Vovich Vovich вне форума
Прохожий
 
Регистрация: 19.11.2010
Сообщения: 7
Репутация: 10
По умолчанию

могу скинуть сам проджект...
Ответить с цитированием
  #8  
Старый 19.11.2010, 22:39
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Сообщение от Bargest
так...
Код:
procedure TForm1.ComboBox1Change(Sender: TObject);
  var t:integer;
       fl:boolean;
begin
Memo2.Lines.LoadFromFile('ComboBoxList.txt'); 
fl:=false;
for t:=0 to Memo2.Lines.Count-1 do 
if Memo2.Lines[t]=Combobox1.Text then
begin
  fl:=true;
  break;
end;
if fl then
Image1.Visible:=true;
Image2.Visible:=false;
end
else
begin
Image1.Visible:=false;
Image2.Visible:=true;
end;
end;
Это пробовал?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #9  
Старый 19.11.2010, 22:44
Vovich Vovich вне форума
Прохожий
 
Регистрация: 19.11.2010
Сообщения: 7
Репутация: 10
По умолчанию

не получается
Вот ошибки появляются (первые две не значительные)


а понял там еще begin нужен, спасибо !
Ответить с цитированием
  #10  
Старый 19.11.2010, 22:48
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

а ты направил обрабочик события на эту процедуру?
а то не втупляю, что значит "Undeclared Identifier: Image1"
можно впринципе попробовать
Код:
for t:=0 to Memo2.Lines.Count-1 do 
BEGIN
if Memo2.Lines[t]=Combobox1.Text then
begin
  fl:=true;
  break;
end;
END;

А еще нашел у себя
Код:
if fl then
BEGIN
Image1.Visible:=true;
Image2.Visible:=false;
end
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 19.11.2010 в 22:51.
Ответить с цитированием
  #11  
Старый 19.11.2010, 22:52
Vovich Vovich вне форума
Прохожий
 
Регистрация: 19.11.2010
Сообщения: 7
Репутация: 10
По умолчанию

Да вот этот го begin'a и не хватало! Спасибо!

Последний раз редактировалось Vovich, 19.11.2010 в 22:54.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:24.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025