Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.017 c
14-4130
clickmaker
2003-09-12 16:37
2003.10.02
Hедавно проходила конференция по борьбе со спамом, приглашения


14-4070
Igorek
2003-09-12 10:41
2003.10.02
Есть идея - Botherer


1-3967
Romeo
2003-09-20 09:15
2003.10.02
Функция, ожидающая щелчка мыши на форме


14-4131
Skywalker
2003-09-12 13:59
2003.10.02
Мы не хиппи и не панки...


14-4043
саша2
2003-09-16 10:11
2003.10.02
где форум?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский