-
Всем привет. Не могу разобраться как это сделать. И форум перерыл, и в googl'e искал и даже в koll.pas смотрел-ненашёл. В delphi vcl такое делалось так
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Form5.ModalResult=mrOk then
Form2.ListView1.Items.Assign(lvClas.Items)
else
if Form5.ModalResult=mrCancel then
Form2.ListView1.Items.Assign(lvClas.Items)
end;
А как такое сделать в kol? Просто я уже и все значения по поиску item в ресурсах kol.pas перебрал ничего не подходит под компиляцию:(
-
Никак. Только цикл по колонкам, и добавление элементов во второй список, с копированием всех колонок из элемента в первом (вложенный цикл). Assign в VCL именно это и делает.
-
Если так, то у меня есть пример сохранения инфы в PStrList
var i,j:integer;
S:PStrList;
S1:String;
begin
begin
S:=NewStrList;
try
for i:=0 to LV.LVCount-1 do
begin
S1:='';
for j:=0 to LV.LVColCount-1 do
S1:=S1+LV.LVItems[i,j]+';';
S.Add(S1);
end;
finally
end;
end;
end;
а как загрузить то обратно?
-
Я уже не знаю как передать данные. Код
var i,j:integer;
S:PStrList;
S1:String;
begin
NewForm2( Form2, Applet );
Form2.Form.ShowModal;
begin
for i:=0 to Form2.LV.LVCount-1 do
begin
S1:='';
for j:=0 to Form2.LV.LVColCount-1 do
Form1.ListView1.LVItems[i,j]:=Form2.LV.LVItems[i,j];
Куда уже не подстовлял и как только не минял, всё бестолку. Владимир Кладов ну подскажите освающему kol mck как тут быть
-
первое что бросилось в глаза - в вашем коде обработка LV идет после фактического уничтожения модальной формы, то есть после .ShowModal А, как понял, должно быть после создании формы. То есть надо вставлять обработку до ShowModal. И зачем столько синтаксических контейнеров? Или это куски когда так выданы странно.. И рекомендуют в целях оптимизации For i:=0 to bla-bla.Count - 1 do Заменять y := bla-bla.Count - 1; For i:=0 to y do
-
> И рекомендуют в целях оптимизации > For i:=0 to bla-bla.Count - 1 do > Заменять > y := bla-bla.Count - 1; > For i:=0 to y do
Не один раз, и на этом форуме в том числе, обсуждалось, что границы цикла for... to вычисляются один раз, поэтому смысла нет в такой оптимизации. > psih ©
Пусть Form1 - главная форма, Form2 - модальная, на каждой - ListView с одинаковым количеством колонок. В обработчике OnClose Form2 пишешь примерно следующее: var i, j, ii: Integer;
begin
for i := 0 to ListView1.LVCount - 1 do
begin
ii := Form1.ListView1.LVItemAdd(ListView1.Items[i, 0]);
for j := 1 to ListView1.LVColCount - 1 do
Form1.ListView1.LVItems[ii, j] := ListView1.Items[i, j]
end;
end;
-
пример type TSample = object function fGetCount: integer; procedure fSetCount(const val: integer); property Count: integer read fGetCount write fSetCount; end;
function TSample.fGetCount: integer; begin {специфичный код получения количества элементов} end;
procedure TSample.fSetCount(const val: integer) begin {специфичный код установки количества элементов} end;
Вывод - если пределы цикла расчитываются один раз в первую интерацию цикла - это серьезный баг компилятора, так как значение в объекте может быть изменено в теле цикла. Подобного не наблюдал.
-
Это не баг, это фича. Если нужно учитывать изменение значения, используют цикл while.
-
ну я спорить не буду, компилятор дельфи оптимизирует такие участки сам, читал статьи, но вот только к объектам это не относится, аналогичная ситуация в gcc для c. Желательно значения такие расчитывать заранее, так как машина в отличии от человека не обладает экстрасенсорными способностями и поведение того же самого компилятора должно быть предугадываемым, или как лучше выразится..
-
Все именно так как написал Дмитрий К. Причем описано в документации. Хотя с точки зрения читабельности кода - я бы это фичей называть не стал.
-
вот написал пример в bds2006 и прогнал в дебагере, при каждой интераци расчитывает значение fGetCount. Вечером прогоню в иде, но поведение такое как описал, и оно правильное.
-
не хачу показаться дураком, но у меня вылетает ошибка о том что параметров передаю больше чем есть, хотя колличество колонок одинаковое
ii := Form1.ListView1.LVItemAdd(ListView1.Items[i, 0]);
-
Чё та в натуре тупанул, нада была так
ii := Form1.ListView1.LVItemAdd(ListView1.LVItems[i, 0]);
for j := 1 to ListView1.LVColCount - 1 do
Form1.ListView1.LVItems[ii, j] := ListView1.LVItems[i, j]
-
> вот написал пример в bds2006 и прогнал в дебагере, при каждой > интераци расчитывает значение fGetCount. Вечером прогоню > в иде, но поведение такое как описал, и оно правильное.
Вполне возможно, что они одумались и исправили "фичу" - но в 7-й это еще так. Общение с более новыми версиями заканчивал установкой-просмотром-сносом, да и с 7-кой работаю только над поддержкой старых проектов. Для новых проектов пока решения от мелкомягких рулят, а какие были времена...
|