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

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

Выборка из ListBox a [D6, Win95/98, WinME, NT4, Win2k, WinXP]


ezh ©   (2002-02-18 14:15:00) 

Здравствуйте!
У меня есть такой вопрос.
На форме есть TPageControl с двумя страничками, на первой есть TStringGrid. Нужно во второй столбик по PopUpMenu вызвать скрытый ListBox и выбрать из него какойнибудь элемент и поместить его во второй столбик и в строчку, по которой щёлкнули.


MBo   (2002-02-21 15:52:00) [1]

изучи свойства, методы и события stringgrid
procedure TForm1.sg1TopLeftChanged(Sender: TObject);
var
R: TRect;
begin
R := SG1.CellRect(cb1.Tag mod 65536,cb1.tag div 65536);
cb1.left := R.Left+ SG1.Left+1;
end;


Ezh   (2002-02-21 14:52:00) [2]

У меня снова есть вопросец:
один столбик полностью не влазит в стирггрид(точнее 5), а на нем стоит выбор из комбобокса, когда выделяешь ячейку из этого столбика, он (столбик) передвигается (скроллируется стрингрид), а комбобокс остается на прежнем месте, тем самым получается очень приочень некрасиво.
Посоветуйте кто-нибудь что-нибудь, чтобы это исправить.
Если надо, то могу выслать исходники проги.


Ezh   (2002-02-19 11:58:00) [3]

Very BIG Thanks! Большое спасибо, всё классно получилось, так и вправду симпатичнее!


MBo   (2002-02-19 06:37:00) [4]

вот как можно с комбобоксом (IMHO в Grid он симпатичнее Listbox-а)
procedure TForm1.sg1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var
R: TRect;
begin
if ARow =1 then //второй ряд
begin
R := SG1.CellRect(ACol, ARow);
cb1.left := R.Left+ SG1.Left+1;
cb1.top := R.Top + sg1.top+1;
cb1.Width := sg1.ColWidths[acol];
cb1.Tag:=ACol+65536*ARow;//запоминаем ячейку, здесь можно только ACol
cb1.Visible := True;
cb1.SetFocus;
end;
CanSelect := True;
end;

procedure TForm1.cb1Change(Sender: TObject);
begin
SG1.Cells[cb1.Tag mod 65536,cb1.tag div 65536]:=
cb1.Items[cb1.itemindex];
cb1.visible:=false;
end;

procedure TForm1.cb1Exit(Sender: TObject);
begin
cb1.visible:=false;
end;


ezh   (2002-02-18 17:56:00) [5]

Мне врочем надо, чтобы ЛистБокс высвечивался под нужной строкой, по нужному элементу тыкаешь два раза, и он добавляется в СтрингГрид.


MBo   (2002-02-18 15:12:00) [6]

а надо именно по меню или просто SelectCell подойдет?


ezh   (2002-02-18 14:30:00) [7]

Вот я привожу текст программы
unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, Menus, ComCtrls, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Menu: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
EditMenu: TPopupMenu;
IzSpiska: TMenuItem;
PageControl1: TPageControl;
SpisRab: TTabSheet;
usgrd: TStringGrid;
PoGodam: TTabSheet;
SvodSpis: TStringGrid;
Spisok: TListBox;
procedure FormCreate(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure IzSpiskaClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i,a:integer;
TempSpisok:TListBox;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
USgrd.Cells[0,0]:="";
USgrd.Cells[1,0]:="";
USgrd.Cells[2,0]:="";
USgrd.Cells[3,0]:="";
USgrd.Cells[4,0]:="";
USgrd.Cells[5,0]:="";
USgrd.Cells[6,0]:="";
USgrd.Cells[7,0]:="";
USgrd.Cells[8,0]:="";
end;

procedure TForm1.N2Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
Form2.Show;
Form1.Enabled:=False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
{i:=Spisok.SelCount;
a:=usgrd.Row;
usgrd.Cells[2,2]:=Spisok.Items.Strings[i];}
end;

procedure TForm1.IzSpiskaClick(Sender: TObject);
begin

Spisok.Parent:=PageControl1.Pages[1];
Spisok.Top:=24+usgrd.DefaultRowHeight*usgrd.RowCount;
Spisok.Visible:=True;
Spisok.Enabled:=True;
Spisok.SetFocus;
end;

end.


MBo   (2002-02-18 14:26:00) [8]

пояснее бы


Наверх

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