Как описать поле выбора из списка

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
aaf
Сообщения: 10
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Хабаровский край ТЭЦ
Контактная информация:

Как описать поле выбора из списка

Сообщение aaf »

Здравствуйте всем. Помогите разобраться вот с таким вопросом:
Как в диалоге описать поле выбора из списка предварительно заполнив список SQL запросом. В стандартном доке по Антлантису "Язык VIP -> Описание полей ввода" есть атрибут ListBox но как им воспользоваться нигде не написано. Если не составит труда можно примерчик какой нибудь на эту тему или ссылочку на док по VIPу. Заранее благодарен. Андрей.
GTHack
Местный житель
Сообщения: 517
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск Новосибирск
Контактная информация:

Re: Как описать поле выбора из списка

Сообщение GTHack »

если есть примерчик, так же хотел бы ознакомиться ...
так что буду вторым в очереди :)
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
Nuts
Постоянный обитатель
Сообщения: 193
Зарегистрирован: 29 мар 2005, 17:49

Re: Как описать поле выбора из списка

Сообщение Nuts »

unit Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ComCtrls, ExtCtrls, FileCtrl;

type
TForm1 = class(TForm)
Panel1: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
HBZMemo: TMemo;
Add: TBitBtn;
Remove: TBitBtn;
Update: TBitBtn;
AllEdit: TEdit;
Insert: TBitBtn;
Create: TBitBtn;
AllListBox: TListBox;
CB_file: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Memo: TMemo;
Label4: TLabel;
Edit1: TEdit;
Label5: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label6: TLabel;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure AddClick(Sender: TObject);
procedure RemoveClick(Sender: TObject);
procedure PageControl1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure UpdateClick(Sender: TObject);
procedure InsertClick(Sender: TObject);
procedure CreateClick(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
ListBox : TListBox;
ind : Integer;
Function CheckSelected : integer;
procedure createFile(j : integer);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
procedure TForm1.AddClick(Sender: TObject);
begin
If AllEdit.Text <> '' then
begin
If ListBox <> Nil then
If ListBox.Items.IndexOf(AllEdit.Text) = -1 then
ListBox.Items.Add(AllEdit.Text)
else
MessageDlg('Строка с таким текстом уже есть', mtInformation, [mbOk], 0);
AllEdit.Text := '';
end;
end;

Function TForm1.CheckSelected : integer;
var
i : integer;
begin
CheckSelected := -1;
i := 0;
While i <= ListBox.Items.Count - 1 do begin
if ListBox.Selected[i] = true then begin
CheckSelected := i;
i := ListBox.Items.Count + 5
end
else inc(i);
End;
end;

procedure TForm1.RemoveClick(Sender: TObject);
begin
If AllEdit.Text <> '' then
begin
if MessageDlg('Вы действительно хотите удалить строку,'+
' содержащую текст "' + AllEdit.Text + '"',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
If ListBox.Items.IndexOf(AllEdit.Text) <> -1 then
ListBox.Items.Delete(ListBox.Items.IndexOf(AllEdit.Text))
else
MessageDlg('Строки с таким текстом нет', mtInformation, [mbOk], 0);
AllEdit.Text := '';
end
end
else
begin
ind := CheckSelected;
if ind <> -1 then ListBox.Items.Delete(ind)
else
MessageDlg('Выберите строку или введите текст строки , которую нужно удалить',
mtInformation, [mbOk], 0);
end;
end;

procedure TForm1.UpdateClick(Sender: TObject);
begin
ind := CheckSelected;
if (ind <> -1) and (AllEdit.Text <> '') then
begin
ListBox.Items.Strings[ind] := AllEdit.Text;
end
else
MessageDlg('Выберите строку и введите измененный текст строки , которую нужно изменить',
mtInformation, [mbOk], 0);

end;

procedure TForm1.InsertClick(Sender: TObject);
begin
ind := CheckSelected;
If (AllEdit.Text <> '') and (ind <> -1) then
begin
If ListBox <> Nil then
If ListBox.Items.IndexOf(AllEdit.Text) = -1 then
ListBox.Items.Insert(ind, AllEdit.Text)
else
MessageDlg('Строка с таким текстом уже есть', mtInformation, [mbOk], 0);
AllEdit.Text := '';
end
else
MessageDlg('Выберите строку, перед которой нужно вставить и введите текст новой строки',
mtInformation, [mbOk], 0);
end;

procedure TForm1.PageControl1Change(Sender: TObject);
begin
If PageControl1.ActivePage = TabSheet1 then
ListBox := AllListBox
else
ListBox := Nil
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
PageControl1Change(nil);
CB_file.ItemIndex := 6;
end;

procedure TForm1.createFile(j : integer);
var
i : integer;
begin
memo.Clear;
case j of
0 : begin
// Memo.Lines.Add('WIN\ATLANTIS\ATLANTIS.HBZ');
for i := 0 to AllListBox.Items.Count - 1 do begin
Memo.Lines.Add('WIN\'+AllListBox.Items[i]+'.HBZ');
end;
// Memo.Lines.Add('WIN\CNF\CNF.HBZ');
end;
1: begin
Memo.Lines.Add('rem Создание файлов с hc-приставками у констант');
for i := 0 to AllListBox.Items.Count - 1 do begin
Memo.Lines.Add('helpcopy -3 WIN\'+AllListBox.Items[i]+'.PAS '+
copy(AllListBox.Items[i], pos('\',AllListBox.Items[i])+1,
length(AllListBox.Items[i])) + '.INC');
end;
//Memo.Lines.Add('helpcopy -3 WIN\CNF\CNF.PAS CNF.INC');
end;
2: begin
Memo.Lines.Add('rem Создание файла galnet.h');
Memo.Lines.Add('if exist %1 del %1');
Memo.Lines.Add('if exist helpcopy.log del helpcopy.log');
Memo.Lines.Add('dir /b $!$!$!$!.$!$ > %1');
//Memo.Lines.Add('rem copy /A %1 + R:\g57\HLP\WIN\ATLANTIC\ATLANTIS.PAS %1 >> helpcopy.log');
for i := 0 to AllListBox.Items.Count - 1 do begin
Memo.Lines.Add('copy /A %1 + WIN\'+AllListBox.Items[i]+'.PAS %1 >> helpcopy.log');
end;
//Memo.Lines.Add('copy /A %1 + WIN\CNF\CNF.PAS %1 >> helpcopy.log');
end;
3: begin
Memo.Lines.Add('echo копирование *.cnt в %TPU%');
Memo.Lines.Add('call ..\sets.bat');
Memo.Lines.Add('copy WIN\GALNET.CNT %TPU% >> helpcopy.log');
// Memo.Lines.Add('copy WIN\ATLANTIS\ATLANTIS.CNT %TPU% >> helpcopy.log');
for i := 0 to AllListBox.Items.Count - 1 do begin
Memo.Lines.Add('copy WIN\'+AllListBox.Items[i]+'.CNT %TPU% >> helpcopy.log');
end;
// Memo.Lines.Add('copy WIN\CNF\CNF.CNT %TPU% >> helpcopy.log');
end;
4: begin
Memo.Lines.Add('echo копирование *.hlp в %TPU%');
Memo.Lines.Add('call ..\sets.bat');
// Memo.Lines.Add('copy WIN\ATLANTIS\ATLANTIS.HLP %TPU% >> helpcopy.log');
for i := 0 to AllListBox.Items.Count - 1 do begin
Memo.Lines.Add('copy WIN\'+AllListBox.Items[i]+'.HLP %TPU% >> helpcopy.log');
end;
// Memo.Lines.Add('copy WIN\CNF\CNF.HLP %TPU% >> helpcopy.log');
end;
5: begin
Memo.Lines.Add('%ATLANTIS%source\ATLANTIS.HC');
Memo.Lines.Add('%ATLANTIS%source\FCENV.hc');
Memo.Lines.Add('%ATLANTIS%source\cnf.hc');
Memo.Lines.Add('%ATLANTIS%source\compi.hc');
for i := 0 to AllListBox.Items.Count - 1 do begin
Memo.Lines.Add('HLP\'+copy(AllListBox.Items[i], pos('\',AllListBox.Items[i])+1,
length(AllListBox.Items[i])) + '.INC');
end;
Memo.Lines.Add('[System]');
memo.Lines.Add('OpenResources:=%TPU%G_DSK.RES');
memo.Lines.Add('OpenResources=%TPU%G_MENU.RES');
memo.Lines.Add('OpenResources=%TPU%G_OPER.RES');
memo.Lines.Add('OpenResources=%TPU%G_MAIN.RES');
memo.Lines.Add('OpenResources=%TPU%G_VIP.RES');
memo.Lines.Add('OpenResources=%TPU%G_FIN.RES');
memo.Lines.Add('OpenResources=%TPU%G_ZAR.RES');
memo.Lines.Add('OpenResources=%TPU%G_ADM.RES');
memo.Lines.Add('OpenResources=%TPU%G_ASUP.RES');
memo.Lines.Add('OpenResources=%TPU%G_REMONT.RES');
memo.Lines.Add('OpenResources=%TPU%EXTFUN.RES');
memo.Lines.Add('OpenResources=%TPU%G_PRN.RES');
memo.Lines.Add('OpenResources=%TPU%GRUM.RES');
memo.Lines.Add('OpenResources=%TPU%COMPDATA.RES');
memo.Lines.Add('OpenResources=%TPU%G_CRM.RES');
memo.Lines.Add('/Check-');
memo.Lines.Add('/Avail-');
memo.Lines.Add('/Errors+');
memo.Lines.Add('/Make:COMMONG');
memo.Lines.Add('/Used:%ATLANTIS%source\ATLANTIS.HC;%ATLANTIS%source\FCENV.hc;%ATLANTIS%source\cnf.hc;%ATLANTIS%source\compi.hc;');
memo.Lines.Add('/R:%TPU%G_DSK.RES');
memo.Lines.Add('Hutil.LogFileName=HlpErr.log');
memo.Lines.Add('');
memo.Lines.Add('[LicParam]');
memo.Lines.Add('LicFileName=%TPU%license.lic');
end;
end;
end;

procedure TForm1.CreateClick(Sender: TObject);
var
i : integer;
begin
if cb_file.ItemIndex <> 6 then begin
createFile(cb_file.ItemIndex);
Memo.Lines.SaveToFile(Edit1.Text+'\'+Cb_file.text);
end
else
for i := 0 to 5 do begin
createFile(i);
Memo.Lines.SaveToFile(Edit1.Text+'\'+Cb_file.Items.Strings[i]);
end;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Savedialog1.Execute;
If Savedialog1.FileName <>'' then
AllListbox.Items.SaveToFile(savedialog1.FileName);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
OpenDialog1.Execute;
if opendialog1.FileName <> '' then
AllListbox.Items.LoadFromFile(Opendialog1.FileName)
end;

end.
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Re: Как описать поле выбора из списка

Сообщение Goblin »

В поле выбора из списка (LIST) (галактианская инкапсуляция Win32 API класса окна "COMBOBOX") нет функций, чтобы забить его строками из какого-то запроса, по крайней мере ни в одной доке эти функции не встречаются . Когда ваяли Атлантис, такое впечатление, что от данного класса взяли только функцию запроса индекса текущей выбранной строки , а функции запроса выбранной строки, модификации , удаления, добавления не стали делать в Атлантисе(или сделали , но нам их не показывают). Кстати, начиная с 5.2, ни разу не видел чтобы такое поле формировалось динамически - постоянно статика и как правило - для целочисленных полей ...

Другое дело - поле с атрибутом QuickChoice - там подобная штука прокатывает и под него оно и заточено. Но примеров не видемши с ним ...
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Как описать поле выбора из списка

Сообщение Deinis »

Может быть устроит такая самое простая реализация:
Window wParam 'Задайте параметры идентификатора &VIP[Obj:"TXOMySumNP"]' (,,) EscClose;
Show at (22,15,92,18);
Screen scParam (,,);
Show at (,,,);
Fields
P1 ('Выберите требуемый результат расчета идентификатора',,sci13EnEsc) :
[LIST 1 'СОВПАДАЕТ с направлением ДО',
2 'НЕ совпадает с направлением ДО'] , protect;
<<

направление движений МЦ/услуг .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

>>
End;

HandleEvent // window
cmInit : set P1 := 0;
cmDefault : CloseWindow(wParam);
End; // HandleEvent
End; // window
P1 - это глобальная переменная в интерфейсе
GTHack
Местный житель
Сообщения: 517
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск Новосибирск
Контактная информация:

непонятненько

Сообщение GTHack »

Деинис - спасибо, всё ясно.

а вот то что Nuts сюда бросил я не понял, да и вообще момент вот таких паскалевских программ мне непонятен. т.е. чем компилить и куда? как подключать и как использовать - если это паскаль то какое отношение к випу это имеет да и вообще к Галактике?
и вообще чё это за пример то ?
можно объяснить поподробнее если не трудно?
может где то есть инфа или какой нибудь примерчик для начинающих?

<не судите строго новичков>
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
Ответить