Страница 1 из 1
					
				Как описать поле выбора из списка
				Добавлено: 07 апр 2003, 09:54
				 aaf
				Здравствуйте всем. Помогите разобраться вот  с таким вопросом:
Как в диалоге описать поле выбора из списка предварительно заполнив список SQL запросом. В стандартном  доке по Антлантису "Язык VIP -> Описание полей ввода" есть атрибут ListBox но как им воспользоваться нигде не написано. Если не составит труда можно примерчик какой нибудь на эту тему или ссылочку на док по VIPу. Заранее благодарен. Андрей.
			 
			
					
				Re: Как описать поле выбора из списка
				Добавлено: 07 апр 2003, 10:08
				 GTHack
				если есть примерчик, так же хотел бы ознакомиться ...
так что буду вторым в очереди 

 
			 
			
					
				Re: Как описать поле выбора из списка
				Добавлено: 07 апр 2003, 12:16
				 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.
			 
			
					
				Re: Как описать поле выбора из списка
				Добавлено: 07 апр 2003, 13:50
				 Goblin
				В поле выбора из списка (LIST) (галактианская инкапсуляция Win32 API класса окна "COMBOBOX") нет функций, чтобы забить его строками из какого-то запроса, по крайней мере ни в одной доке эти функции не встречаются . Когда ваяли Атлантис, такое впечатление, что от данного класса  взяли только функцию запроса индекса текущей выбранной строки , а функции запроса выбранной строки, модификации , удаления, добавления не стали делать в Атлантисе(или сделали , но нам их не показывают). Кстати, начиная с 5.2, ни разу не видел чтобы такое поле формировалось динамически - постоянно статика и как правило - для целочисленных полей ...  
Другое дело - поле с атрибутом QuickChoice - там подобная штука прокатывает и под него оно и заточено. Но примеров не видемши с ним ...
			 
			
					
				Re: Как описать поле выбора из списка
				Добавлено: 07 апр 2003, 18:03
				 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 - это глобальная переменная в интерфейсе
			 
			
					
				непонятненько
				Добавлено: 10 апр 2003, 15:40
				 GTHack
				Деинис - спасибо, всё ясно.
а вот то что Nuts сюда бросил я не понял, да и вообще момент вот таких паскалевских программ мне непонятен.  т.е. чем компилить и куда? как подключать и как использовать - если это паскаль то какое отношение к випу это имеет да и вообще к Галактике?
и вообще чё это за пример то ?
можно объяснить поподробнее если не трудно?
может где то есть инфа или какой нибудь примерчик для начинающих?
<не судите строго новичков>