Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
ВнизСохранение ширины столбцов в DBGrid-е Найти похожие ветки
← →
ДмитрийК (2003-09-19 09:12) [0]Здравствуйте!
Можно ли без использования дополнительных файлов или реестра сохранить ширину столбцов в DBGride?
← →
Е-Моё имя (2003-09-19 09:29) [1]в уме запомнить можно
← →
Е-Моё имя (2003-09-19 09:30) [2]знаешь такое, типа "три пишем, два в уме"
← →
VAleksey (2003-09-19 09:34) [3]
> Е-Моё имя © (19.09.03 09:29)
Ответ верный.
← →
Е-Моё имя (2003-09-19 09:35) [4]дык!
ДАВАЙТЕ МНЕ МЕДААААААЛЬ!!!!!
=))))))
← →
Reindeer Moss Eater (2003-09-19 09:35) [5]Можно и довольно просто.
Напечатать на принтере ширину всех колонок перед закрытием грида. После открытия отсканировать отпечатанную страницу, распознать значения ширины, восстановить ширину колонок.
Никаких файлов и тем более реестра.
← →
Е-Моё имя (2003-09-19 09:36) [6]
> [5] Reindeer Moss Eater © (19.09.03 09:35)
ему тоже медааааааааааааль!!!!!!
=))))
ЗЫ всем раздать медали! (подражание Н-З__)
← →
BAYES (2003-09-19 14:27) [7]через реестр. Пример из книжки ХХХ(это что бы автор в тык за плогиат не дал).
uses dmNaklsU, Registry;
procedure TfmNakls.FormClose(Sender: TObject;
var Action: TCloseAction);
var
Registry: TRegistry;
k: Integer;
begin
Registry := TRegistry.Create;
with Registry do
begin
for k := 0 to DBGrid1.Columns.Count-1 do with DBGrid1.Columns do
begin
OpenKey("\Software", True);
OpenKey("Nakls", True);
OpenKey("DBGrid1", True);
OpenKey("Col"+IntToStr(k), True);
WriteString("Field", Items[k].FieldName);
WriteString("Caption", Items[k].Title.Caption);
WriteInteger("Width", Items[k].Width);
CloseKey
end; //for
Destroy;
Action := caFree
end //with
end;
procedure TfmNakls.FormCreate(Sender: TObject);
var
Registry: TRegistry;
k, N: Integer;
begin
CurrencyDecimals := 2;
Registry := TRegistry.Create;
{Проверяем существование ключа software/nakls/DBGrid1, иначе при
первом запуске программы все столбцы в сетке будут уничтожены}
if (Registry.OpenKey("software",False)) and
(Registry.OpenKey("nakls",False)) and
(Registry.OpenKey("DBGrid1",False)) then
with Registry do
begin
N := DBGrid1.Columns.Count-1;
//Уничтожаем столбцы в сетке:
DBGrid1.Columns.Clear;
for k := 0 to N do with DBGrid1.Columns do
begin
OpenKey("\Software", True);
OpenKey("Nakls", True);
OpenKey("DBGrid1", False);
OpenKey("Col"+IntToStr(k), False);
Add; //Добавляем очередной столбец
Items[k].FieldName := ReadString("Field");
Items[k].Title.Caption := ReadString("Caption");
Items[k].Width := ReadInteger("Width");
CloseKey
end;
end;
Registry.Destroy
end;
end.
← →
BAYES (2003-09-19 14:57) [8]Больше никак!!!!!
если думаешь по другому то:...........
← →
Sandman25 (2003-09-19 15:37) [9]А еще можно исправлять Exe файл - по нужному смещению записывать нужное значение ширины. Но не советую :)
← →
ДмитрийК (2003-09-19 15:43) [10]Я видел компонент, который при помещении на форму сохранял все размены элементов, принадлежащих форме. Что за компонент не помню, и как работал не знаю. Но вроде именно так как я писал.
← →
NAlexey (2003-09-19 15:55) [11]Ну раз такое дело...
procedure TForm1.Button1Click(Sender: TObject);
var
Mem1 : TMemoryStream;
Mem2 : TMemoryStream;
j : integer;
LName: string;
procedure WriteToClipboard (Comp : TComponent);
var
W : TWriter;
begin
Mem1.Seek(0, 0);
W := TWriter.Create(Mem1, 4096);
with W do
try
WriteSignature;
WriteComponent(Comp);
finally
Free;
end;
Mem1.Seek(0, 0);
ObjectBinaryToText(Mem1, Mem2);
end;
begin
Mem1 := TMemoryStream.Create;
Mem2 := TMemoryStream.Create;
try
WriteToClipboard(StringGrid1);
j := 0;
Mem2.WriteBuffer(j, 1);
Mem2.Seek(0, 0);
ClipBoard.SetTextBuf(Mem2.Memory);
finally
Mem1.Free;
Mem2.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Mem1: TMemoryStream;
Mem2: TMemoryStream;
ALength: integer;
A: TStringGrid;
procedure ReadFromStream(Stream : TStream);
begin
with TWriter.Create(Stream, 16) do
try
WriteListEnd;
finally
Free;
end;
Stream.Seek(0,0);
with TReader.Create(Stream, 4096) do
ReadComponents(Self, Panel1, ComponentRead);
end;
begin
ALength := Length(ClipBoard.AsText);
if ALength = 0 then
Exit;
Mem1 := TMemoryStream.Create;
Mem2 := TMemoryStream.Create;
try
Mem1.SetSize (Alength);
StrLCopy(Mem1.Memory, PChar(ClipBoard.AsText), Mem1.Size);
while Mem1.Position < Mem1.Size do
ObjectTextToBinary(Mem1, Mem2);
StringGrid1.Name := "Noname";
ReadFromStream(Mem2);
finally
Mem1.Free;
Mem2.Free;
end;
end;
procedure TForm1.ComponentRead(Component: TComponent);
begin
Component.Name := "Noname1";
end;
← →
Reindeer Moss Eater (2003-09-19 16:14) [12]Я видел компонент, который при помещении на форму сохранял все размены элементов, принадлежащих форме. Что за компонент не помню, и как работал не знаю. Но вроде именно так как я писал.
А ты уверен, что он делал это без использования дополнительных файлов или реестра?
← →
NAlexey (2003-09-19 16:15) [13]Ну так чё, получается можно сохранять ширину колонок без использования дополнительных файлов и реестра?
← →
ДмитрийК (2003-09-19 16:16) [14]Я пока в код не въехал, что за процедура ObjectBinaryToText. Ее в хелпе нет.
← →
Reindeer Moss Eater (2003-09-19 16:18) [15]Ну так чё, получается можно сохранять ширину колонок без использования дополнительных файлов и реестра?
Ну если сохранять надо исключительно в течение одного сеанса программы, то получается что можно
← →
Переяслов Григорий (2003-09-19 16:19) [16]А если в 17 строке сохранить?
← →
NAlexey (2003-09-19 16:22) [17]А че въезжать? Положи 2 кнопки, одну панель, один String грид. Запусти, скопируй нажатием на 1 кнопку, измени ширину колонок грида, и вставь нажатием на вторую кнопку. И ты увидишь что в панели будет тот грид который ты копировал, т.е неизмененный. и ошибку за мной подправь:
with TReader.Create(Stream, 4096) do
try
ReadComponents(Self, Panel1, ComponentRead);
finally
Free;
end;
А в процедуре ComponentRead к тебе придет вновь созданный(или твой старый грид) пробегись по его колонкам и присвой ширину обратно.
Кстати: я не говорю что так как я написал надо поступать, я просто показал что можно...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c