Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.18;
Скачать: CL | DM;

Вниз

Помогите программеры!!!!!!!   Найти похожие ветки 

 
draculenok ©   (2002-02-18 13:29) [0]

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


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


 
Digitman ©   (2002-02-18 14:27) [1]

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


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

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


 
draculenok ©   (2002-02-19 06:58) [3]

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


 
skiph ©   (2002-02-19 07:35) [4]

Для инициализации значений 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 07:47) [5]

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


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

Ну тогда будем считать, что комбо ты уже заполнил.
Далее - добавление новых / выбор значений из айтемов.
Основная идея - то что у комбо можно менять стиль - например 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;


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

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

Справишься?


 
draculenok ©   (2002-02-19 14:32) [8]

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


 
MetallAdm ©   (2002-02-19 14:37) [9]

Я тебе в другом вопросе ответил но
повторяю !
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;

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


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

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


 
draculenok ©   (2002-02-19 14:52) [11]

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


 
draculenok ©   (2002-02-19 15:08) [12]

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

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


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

Не за что ;)



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

Текущий архив: 2002.03.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
3-57320
xtremer
2002-02-19 14:51
2002.03.18
О BDE и больших базах данных


1-57387
Nikola
2002-02-28 08:50
2002.03.18
Определить номер входящего звонка


3-57332
sniknik
2002-02-19 11:34
2002.03.18
От чего зависит кодировка в базах Paradox?


4-57567
Voituk
2002-01-17 16:37
2002.03.18
Такой заюзанный вопрос


3-57322
Malder
2002-02-17 18:50
2002.03.18
Управление доступом к базе данных InterBase