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

Вниз

Сохранение ширины столбцов в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
1-3873
Goorus
2003-09-18 16:56
2003.10.02
PageControl


1-3948
tim5
2003-09-20 22:38
2003.10.02
Image и PopupMenu.


14-4038
BasjaB
2003-09-16 10:14
2003.10.02
Про цифровики


1-3834
Starkom
2003-09-19 13:55
2003.10.02
вопрос о странном глюке стандартных цветовых констант


3-3744
rh
2003-09-12 12:46
2003.10.02
Какой пользователь в MS SQL?