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

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

Не ставятся никакие пакеты [Delphi, Windows]


Страницы:   1 2 3 4 5 6

Dy1 ©   (2007-02-19 20:58:00) 

Ошибка при попытке установки "Unit SysInit was compiled with..."
МСК 2.37 с заменой системных модулей. Возврат к стандартным добавляет 8 ошибок.


Дмитрий К   (2007-06-20 16:12:00) [41]

Список разрушается при уничтожении формы. Да, sl.Free. Только не уничтожайте список пока не уничтожен ListView к которому этот список привязан.

procedure SetText(const S: string; Append2List: boolean);
если Append2List = true, то строки добавляются к списку, в противном случае заменяют содержимое.

Сначала нужно избавиться от комментариев, т.к. количество строк ListView определяется количеством строк в списке.

Чтобы отразить изменения  списка в ListView нужно сделать
ListView.LVCount := sl.count;

У списка есть метод Sort.

Сделайте родителем  TabControl1.Pages[ 0 ]


domo   (2007-06-20 15:24:00) [42]

Я взглянул, и даже виртуальный список создал. Что можно сказать? Мой массив из сотен тысяч строк этот код съедает за доли секунды. Скорость просто поразительная! Огромное спасибо за пример.

Но есть несколько вопросов. Они, наверно, мелкие для Вас, может не захотите отвечать, но я все-таки спрошу, если есть возможность - ответьте пожалуйста:
- где и когда разрушается список sl? В form.add2autofree(sl) при закрытии программы? А если мне надо раньше, то вместо этого - sl.Free?
- что значит "false/true" из sl.SetText(StrLoadFromFile(GetWindowsDir+'win.ini'), false);?
- мне надо только строки - не комментарии, так я должен делать

case SubItem of
 0:
 1: if sl.Items[idx][1]<>'/' then Txt:=sl.Items[Idx];
end;

или

var sL2: pStrList; i,j: integer;
sL2:=NewStrList;
 j:=0;
 for i:=0 to sL.Count-1 do if sL.Items[i][1]<>'/' then begin{i2}
  sL2.Items[j]:=sL.Items[i];
  inc(j);
 end{i2};

или как?

- если я изменю какую-то строку / sL.Items[i]:=myString; / или добавлю строку / sL.Add(myString); / - как обновить список на форме или это произойдет автоматически?

- мне нужно отсортировать строки, удалить дубликаты - я должен сам писать эти функции (в принципе, это несложно для меня) или уже в КОЛ есть стандартные (может AnsiSort() работает?) и их нужно только подключить или как-то вызвать?

- это снова список строится только на КОЛ при выполнении, из-за этого сложно расположить его на форме - он ездит куда хочет. Если у меня на форме KOLTabControl с двумя закладками и этот список должен быть только не первой закладке как его привязать туда?


Дмитрий К   (2007-06-19 14:19:00) [43]

domo, взгляните на этот код
program VirtLV;

uses
 windows, KOL;

type
 PForm1 = ^TForm1;
 TForm1 = object(TObj)
   form, lv: PControl;
 public
   procedure lvOnLVData(Sender: PControl; Idx, SubItem: Integer;
             var Txt: KOL_String; var ImgIdx: Integer; var State: DWORD;
             var Store: Boolean);
 end;

var Form1: PForm1; sl: PStrList;

procedure NewForm1(var Result: PForm1; AParent: PControl);
begin
 New(Result, Create);
 with Result^ do
 begin
   form:=NewForm(AParent, 'VirtLV').SetSize(400,300);
   applet:=form;
   sl:=NewStrList;
   form.add2autofree(sl);
   lv:=NewListView (form, lvsDetail, [lvoRowSelect, lvoGridlines, lvoOwnerData], nil, nil, nil).SetAlign(caClient);
   lv.LVColAdd('N строки', taRight, 80);
   lv.LVColAdd('Сама строка', taLeft, 220);
   lv.OnLVData:=lvOnLVData;
 end;
end;

{ TForm1 }

procedure TForm1.lvOnLVData(Sender: PControl; Idx, SubItem: Integer;
 var Txt: KOL_String; var ImgIdx: Integer; var State: DWORD;
 var Store: Boolean);
begin
 case SubItem of
   0: Txt:=int2str(Idx);
   1: Txt:=sl.Items[Idx];
 end;
end;

begin
 NewForm1(Form1, nil);
 sl.SetText(StrLoadFromFile(GetWindowsDir+'win.ini'), false);
 form1.lv.LVCount:=sl.Count;

 run(applet);
end.


domo   (2007-06-19 11:08:00) [44]

2. Спасибо за ответ, пойду экспериментировать с tooltip и виртуальным списком. Я понимаю, из-за постоянной занятости писать примеры Вам особо некогда, надеюсь, если Вы говорите, что виртуальный список - это просто, то я смогу это сделать по Вашим подсказкам. Пока же я сделал обычный listview вот так:

var  ListView2: TKOLListView; i: integer; sList: pStrList;

  ListView2:=NewListView (Form, lvsDetail, [lvoRowSelect, lvoGridlines], nil, nil, nil).SetPosition(290,72).SetSize(180,130).BringToFront;
  ListView2.LVColAdd('N строки', taRight, 50);
  ListView2.LVColAdd('Сама строка', taLeft, 150);
  ListView2.BeginUpdate;
  for i:=0 to sList.Count-1 do if sList.Items[i][1]<>'/' then begin{i1}//если не комментарий, добавить в список
   ListView2.LVItemAdd('');
   ListView2.LVItems[ListView2.LVCount-1, 0] := int2str(ListView2 .LVCount); //нумерация строк
   ListView2.LVItems[ListView2.LVCount-1, 1] := sList.Items[i]; //сами строки (из sList, читаю из файла)
  end{i1};
  ListView2.EndUpdate;
  ...
  ListView2.Free;

К сожалению, сделал на чистом КОЛ, т.к. с зеркалом МСК для ListView разобраться не смог. Кроме того, пользоваться им все-равно сложно, т.к. он такой же медленный, как и тот ListBox1, что Вы критиковали раньше. Одно хорошо - есть гор.лифт. Кстати, Вы не ответили про гор.лифт в ListBox, где он там?

1. И еще про установку. Я перекачал FAQ, но туда так и не добавлено Ваше

"Search path разве что указать надо, если он у вас отличается от C:\kol" и то, что в настройках Conditional defines, Unit aliases "просто ничего не трогайте".

Почему бы все-таки явно не указать это в ФАК, ведь посмотрите сколько людей (не программистов, конечно) спотыкается на этой установке-переустановке. Или Вы просто не успели?

Также очень интересно Ваше замечание "Все модули - в один пакет, и после обновления - Rebuild". У меня есть несколько модулей, которые я хотел бы ставить всегда, сразу с КОЛ-МСК и чтоб при всех обновлениях КОЛ они сохранялись. Учитывая, что Вы говорите, что для того, чтобы внести вопрос в ФАК, его надо сформулировать, попробую сформулировать:

У меня есть любимые пакеты KOLxxx.pas и KOLyyy.pas, а также их зеркала MCKxxx.pas и MCKyyy.pas. Я хочу, чтобы они устанавливались вместе с КОЛ/МСК и появлялись в Дельфи на той же вкладке, что и стандартные компоненты КОЛ/МСК. Как это сделать?

Ответьте, пожалуйста. Уверен, многие будут Вам благодарны.


Galkov   (2007-06-18 20:15:00) [45]

Да и сегодня нормальная погода...


Vladimir Kladov   (2007-06-18 18:37:00) [46]

Tooltips я поправил. До этого работал tooltip на самой кнопке.

Виртуальный list view - проще не бывает. Установить lvoOwnerData, назначить OnData и вернуть там Txt и прочие данные, от номера строки и номера колонки. Во время работы присвоить LVCount, чтобы list view "знал", сколько спрашивать. Храните строки где хотите. Хотя бы в StrList'е.

Нюанс. Если LVCount надо менять на ходу (lvsDetail, lvsDetailNoHeader), может проявляться бага от MS (проявляется и в VCL): первые строки могут оказаться пустыми. Чтобы не происходило такого, надо сначала очистить list view (LVCount := 0) и Update сделать, потом устанавливать новое значение. Еще помогает временная смена вида отображения.

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


  (2007-06-18 14:32:00) [47]

Удалено модератором


  (2007-06-18 14:32:00) [48]

Удалено модератором


  (2007-06-18 14:32:00) [49]

Удалено модератором


  (2007-06-18 14:31:00) [50]

Удалено модератором


domo   (2007-06-16 13:17:00) [51]

> Вся штука в том, что тулбар можно настраивать очень разными способами

Конечно. Я понимаю, что я делаю что-то неправильно (иначе и не спрашивал бы). Я делаю так:
- бросаю на форму компонент КОЛтулбар
- нажимаю кнопку Далее (с тремя точками), справа от свойства buttons для создания своих кнопок
- нажимаю кнопку Add, ввожу название своей кнопки и ВВОД.  Повторяю для каждой кнопки
- нажимаю Apply и закрываю окно Toolbar1 buttons
- меняю свойство showTooltips на true
- нажимаю Далее (с тремя точками) справа от свойства tooltips и ввожу столько строк подсказок, сколько создал кнопок
- запускаю прогу, а подсказка только одна (первая строка из tooltips, даже почему-то не все строки) для всех кнопок (т.е. это получается однострочная подсказка для всей панели КОЛтулбар, а не для кнопок на ней, как я ожидал). А как для каждой кнопки свою подсказку?

Но это еще мелочи, вот у меня не получается работа с виртуальным ListView (с listBox все работает, но медленно, да и Вы говорите, что это неправильный подход). Понятно, что нужно определить переменные нужного типа, инициализировать список (выделить память, указать какого типа данные там будут и как должен список выглядеть), заполнить его строковыми данными (они у меня читаются из файла и их около 150 тыс) и вывести список на форму, чтобы он был виден пользователю. Но как это сделать? Нужен пример, не работал я раньше с виртуальными списками.
Можете помочь?


Vladimir Kladov   (2007-06-15 19:10:00) [52]

я спрашивал, почему подсказки для кнопок на панели инструментов все одинаковые

Не заметил такого вопроса. Вообще во многих форумах есть требование: 1 вопрос в теме. Как раз чтобы не пропускать мимо.

Ну, у меня подсказки разные, это точно. Вся штука в том, что тулбар можно настраивать очень разными способами. Я, например, предпочитаю надписей не делать, а надписи использовать как подсказки. Расскажите, как вы делаете.


domo   (2007-06-15 16:57:00) [53]

Спасибо, я попробую не трогать то, о чем не написано. Но все-таки так стало гораздо понятнее, когда явно указано - что трогать, а что не трогать. А то всё "смотрите в FAQ", FAQ, а выясняется, что в том FAQ и нет этого.

ANTPro ©: Это слишком неконкретно, такой ответ на вопрос любой напишет. Конкретнее, пожалуйста.

И еще я спрашивал, почему подсказки для кнопок на панели инструментов все одинаковые - как для первой (см. выше). Ответьте, пожалуйста.


Vladimir Kladov   (2007-06-15 16:45:00) [54]

Еще раз попробую объяснить. Я не могу писать рецепт на исправление ошибки, которой сам не видел. У меня ничего не падает. И размер одинаковый, независимо от наличия MCK, в приложении без MCK (приложение MCK тоже должно компилироваться одинаково без MCK, но я не пробовал). И получается: есть ответ - делайте Build, а не Compile, если переходите от проекта к проекту, от проекта к пакету, от проекта к пакету. В Книге о KOL я об этом написал и рахэяснил причину: Delphi не видит необходимости пересобрать dcu-файл, хотя такая необходимость есть, вот и все.


homm   (2007-06-14 22:48:00) [55]

> Какой такой вопрос должен соответствовать ответу, не совсем
> понятно. "У меня не получается..." что не получается-то?

1) Я устанавливаю версию поверх старой. При работе все падает.
2) Я работал с чистым КОЛ, решил установить МСК, еперь у меня все падает.
3) Я поставил КОЛ и МСК, но после компиляции программа весит на 20 Кб больше, чем написано в предъидущем вопросе про размер получившехся испоняемых хайлов.


Vladimir Kladov   (2007-06-14 22:27:00) [56]

А об Unit output directory, Search path, Conditional defines, Unit aliases - о чем я спрашиваю
Об этом-то зачем спрашивать? Установка пакета в Delphi обычная. Просто ничего не трогайте, про что не написано. Search path разве что указать надо, если он у вас отличается от C:\kol, так это и так понятно. Меня вводят в недоумение программисты, ставящие компонент, и не знающие, что делать, когда Delphi выводит сообщение об ошибке типа "файл xxx.dcu" не найден. Какие мануалы нужны, художественная литература, чтобы постичь элементарное?

Другое дело, что мало кто знает даже из тех кто любит  ставить подряд на всякий случай десятки пакетов (надо-не надо. Как-то в одной конференции встретил такой вопрос от "программиста" с позволения сказать: у него больше 999 компонентов в линейку ставиться не захотелось, то был кажись еще Delphi3), что потом делать, когда несколько пакетов увязаны друг на друга, и из-за ребилда одного вдруг выгружаются повязанные с ними.

Ответ давно найден (для MCK работает). Все модули - в один пакет, и после обновления - Rebuild. О том, что нужен именно Build, сказано в инструкциях к MCK, русской и английской. И это надо бы в FAQ внести, но вот незадача. FAQ - это список вопрос-ответ. Какой такой вопрос должен соответствовать ответу, не совсем понятно. "У меня не получается..." что не получается-то? Если все по инструкции, то все как раз получается. Если действовать осторожно, и начать работать только с одного пакета MCK, то проблем коллизий вообще не возникает. Я бы озаботился сей проблемой, но мне как-то основного пакета по самое не хочу для работы хватает. Даже если очень надо, то вовсе нет надобности ставить доп. компоненты как пакеты. Их и в Run-time создать можно всегда. Я так и делаю, когда какой-нибудь trackbar потребуется. Чтобы GRushControls задействовать, с ToGRush можно MCK-часть от GRush и не ставить. Чем меньше на линейке компонентов, тем Delphi быстрее грузится (и меньше жрет памяти, и шустрее работает) - давно известный факт.


ANTPro   (2007-06-14 20:34:00) [57]

> [59] domo   (14.06.07 17:49)

http://www.kolnmck.ru/- тебе этого мало?


domo   (2007-06-14 17:49:00) [58]

1. Кладову В: Дайте же наконец ссылку на этот неуловимый FAQ. А то в моем FAQ "Часто задаваемые вопросы о KOL и MCK" написано только:

"Не забудьте также указать в опциях пакета 'Design time only' и 'Rebuild as needed' - это касается в том числе любой другой версии Delphi (начиная с D3)."

Так я об этом и не спрашиваю, я так и делаю. А об Unit output directory, Search path, Conditional defines, Unit aliases - о чем я спрашиваю - там ни слова.

2. Может ли кто-нибудь помочь в этом вопросе и написать несколько строчек примера работы? Или, если очень не хочется, дайте хотя бы ссылку на FAQ где описана работа с виртуальным ListView и событием OnLVData, попробую разобраться.

для =BuckLr=: я понял, что мне это подойдет, но с примерчиком я пойму гораздо лучше...


Vladimir Kladov   (2007-06-14 15:39:00) [59]

build. Читайте FAQ.


domo   (2007-06-14 11:31:00) [60]

2. Попробовал, но не получилось. Не работал я раньше с виртуальными списками, поэтому прошу тех, кто работал, дайте пример создания списка и работы с OnLVData.
Пока у меня стоит только такое:

listviewMy: pControl;
   listviewMy:=NewListView(form, lvsList, [lvoownerdata, lvoRowSelect, lvogridlines], nil,nil,nil).SetPosition(290, 70).SetSize(140, 120).BringToFront;

1. Почему-то слетел КОЛ. Делал так:
- скачал вчера kol_mck.7z с kolnmck.ru
- скопировал все файлы оттуда (кроме оканчивающихся на d2, d3, d4, d6, d7) в папку с КОЛ
- в Д5 закрыл все и открыв MirrorKOLPackage.dpk нажал "Построить"
- на вопрос Д5 "Сохранить изменения в MirrorKOLPackage.dpk?" нажал Нет.

Ошибок не было, кроме сообщения, что ранее установленных доп.компонентов BAPFileBrowser теперь почему-то не будет.
После этого вкладки КОЛ и КОЛ_компоненты (там были BAPFileBrowser и BAPDriveBox) исчезли и проект перестал компилироваться. К сожалению, после этого я запаниковал и начал нажимать все подряд:  "Построить", "Компилировать", "Установить", менять Опции пакета. В результате вкладка КОЛ появилась, доп.КОЛ_компоненты - нет, а проект стал работать. Однако, я не успел заметить, что же именно такого правильного я сделал,  поэтому прошу помощи, а именно - объясните, что должно быть в Опциях проекта MirrorKOLPackage.dpk перед тем, как нажимать "Построить" или "Установить". Именно _перед_, а не потом, особенно поля в Directories/Conditionals: Unit output directory, Search path, Conditional defines, Unit aliases, может еще что (у меня они все пустые). И надо ли в конце установки сохранять изменения в MirrorKOLPackage.dpk (или другом пакете)?

Кстати, при этих экспериментах я выяснил (оказывается, я это записал), что за версия КОЛ у меня стоит и где я ее взял  - кто-то раньше у меня спрашивал. Вот: пакет koldistro-0.11.exe с сайта http://heanet.dl.sourceforge.net/sourceforge/xsdnyd/


Страницы:   1 2 3 4 5 6

Наверх

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