Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите программеры!!!!!!! [D5, D6, Paradox]


draculenok ©   (2002-02-18 13:29:00) 

Здравствуйте программеры!!!!
итак объясняю ситуацию мне необходимо сделать COMBOBOX который должен брать список из базы но без повторений.... но при этом чтобы я мог сам вручную вводить данные....
наподобие в експлорере куда инетовский адрес пишешь ... что то такое
очень надо помогите пожалуйста
заранее благодарен!!!!


--------------------------------------------------------------------------------


Сергей Иванов   (2002-02-19 15:24:00) [1]

Не за что ;)


draculenok   (2002-02-19 15:08:00) [2]

спасибо всем за помощь!!!!!!!!!!!!!!!

извините если что не так спрашивал...


draculenok   (2002-02-19 14:52:00) [3]

Сергей Иванов >>> все понял .... спасибо


Сергей Иванов   (2002-02-19 14:51:00) [4]

Это у меня в программе TComboBox имеет имя ItemsCombo;
а у тебя в программе оно будет называться так, как ты его назовешь.
Сам то не догадался?


MetallAdm   (2002-02-19 14:37:00) [5]

Я тебе в другом вопросе ответил но
повторяю !
q0.Open;
q0.First;
While (not Q0.Eof) do
begin
s1:=Q0.FieldByName("dnach").AsString;
s2:=Q0.FieldByName("dkon").AsString;
Q0.Next;
stt:=s1+" - "+s2;
Cb1.Items.Add(stt);
end;

думаю понятно !
воот ! просто ихорошо


draculenok   (2002-02-19 14:32:00) [6]

Постараюсь...
почему при вводе код на событие onkeydown он пишет что
Itemscombo не правильно


Сергей Иванов   (2002-02-19 14:24:00) [7]

В этом месте
...
{это добавление
в базу} Items.WriteToTable(ItemsCombo.Text, "КГ");
...
дописываешь чего-нибудь вроде
Table1.Append;
Table1.FieldByName("Name") := ItemsCombo.Text;
...
Table1.Post;

Справишься?


Сергей Иванов   (2002-02-19 14:21:00) [8]

Ну тогда будем считать, что комбо ты уже заполнил.
Далее - добавление новых / выбор значений из айтемов.
Основная идея - то что у комбо можно менять стиль - например csSimple или csDropDown. Приведу пример, как это делал я.
Навешиваешь на комбо события:OnKeyDown

procedure TGroup.ItemsComboKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case key of
VK_RETURN : begin
if ItemsCombo.Style = csSimple then begin
ItemsCombo.Items.Add(ItemsCombo.Text);
Items.ItemsCombo.Items.Add(ItemsCombo.Text);
{это добавление
в базу} Items.WriteToTable(ItemsCombo.Text, "КГ");
end; {csSimple}
ItemsCombo.Style := csDropDown;
ItemsCombo.Visible := false; {скрываем его}
end;
VK_ESCAPE : begin
if ItemsCombo.Style<>csDropDown then begin
ItemsCombo.Style := csDropDown;
ItemsCombo.Text := "";
end;
ItemsCombo.Visible := false; {скрываем его}
end;
end;
end;

Навешиваешь на комбо события:OnKeyPress
Это немногомодифицированная процедура из хелпа

procedure ComboKeyPress(Sender: TObject; var Key: Char);
var
Found: boolean;
i, SelSt: Integer;
TmpStr, NewItem: string;
Rect :TRect;
Edit :TEdit;
begin
if key in ["а".."я"] then Dec(Key,32);
with (Sender as TComboBox) do begin
SelSt := SelStart;
if (Key = Chr(vk_Back)) and (SelLength <> 0) then
TmpStr := Copy(Text,1,SelStart)+Copy(Text,SelLength+SelStart+1,255)

else if Key = Chr(vk_Back) then {SelLength = 0}
TmpStr := Copy(Text,1,SelStart-1)+Copy(Text,SelStart+1,255)
else {Key in ["A".."Z", etc]}
TmpStr := Copy(Text,1,SelStart)+Key+Copy(Text,SelLength+SelStart+1,255);
if TmpStr = "" then Exit;

if (Key = Chr(vk_Back)) and (SelSt > 0) then Dec(SelSt)

else if Key <> Chr(vk_Back) then Inc(SelSt);
Key := #0; { indicate that key was handled }
if SelSt = 0 then
begin
Text:= "";
Exit;
end;

Found := False;
for i := 1 to Items.Count do
if Copy(Items[i-1],1,Length(TmpStr)) = TmpStr then
begin
Text := Items[i-1]; { update to the match that was found }
ItemIndex := i-1;
Found := True;
Break;
end;
if Found then { select the untyped end of the string }
begin
SelStart := SelSt;
SelLength := Length(Text)-SelSt;
end
else begin
Style := csSimple;
Text := TmpStr;
SelStart := SelSt;
end;
end;
end;


draculenok   (2002-02-19 07:47:00) [9]

>skiph © это на заполнение а на счет самого comboboxa нет идей?


skiph   (2002-02-19 07:35:00) [10]

Для инициализации значений ComboBox используй процедуру вроде:
procedure ComboRefresh;
Var i:byte;
begin
With Form1.Query1 do
begin
Form1.ComboBox1.Items.Clear;
First;
while not Eof do
begin
Form1.ComboBox1.Items.Add(FieldByName("Field1").AsString));
Next;
end;
end;
end;

Только не забывай вызывать процедуру когда надо.


draculenok   (2002-02-19 06:58:00) [11]

я работаю просто локальной базе.... проблем нет мне главно сделать так чтобы можно было самому вводить в окно необходимый текст или выбирать его из списка....
а запрос без повторений я уже нашел


Сергей Иванов   (2002-02-18 16:21:00) [12]

Кроме того, в самом ComboBox можно запретить дублирование.
И как же ты хочешь сохранять в базу - хранимой процедурой, простым Post, UpdateQuery. Т.е. хотелось бы знать, каким образом ты работаешь с базой - локально, клиентом, трехзвенкой.


Digitman   (2002-02-18 14:27:00) [13]

подразумевается, что с DISTINCT-запросом к базе у тебя проблем нет ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо