- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
Пишу менеджер автозапусков:
type
tregkey = class
rootkey: hkey;
keyname: string;
param: string;
value: string;
function Rootkeyname:string;
end;
procedure TForm1.UpdateAutoruns;
var
i: integer;
lst: tlistitem;
rlist: tobjectlist;
keyname: string;
tregobj:tregkey;
begin
rlist := tobjectlist.create;
ListView4.items.clear;
try
regread(windows.HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Run',rlist);
regread(windows.HKEY_CURRENT_USER,
'Software\Microsoft\Windows\CurrentVersion\RunOnce', rlist);
regread(windows.HKEY_CURRENT_USER,
'Software\Microsoft\Windows\CurrentVersion\RunServices', rlist);
regread(windows.HKEY_CURRENT_USER,
'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run', rlist);
regread(windows.HKEY_CURRENT_USER,
'HKEY_CURRENT_USER\Software\Microsoft\ Windows NT\CurrentVersion\Windows', rlist);
regread(windows.HKEY_LOCAL_MACHINE,
'Software\Microsoft\Windows\CurrentVersion\Run', rlist);
regread(windows.HKEY_LOCAL_MACHINE,
'Software\Microsoft\Windows\CurrentVersion\RunOnce', rlist);
regread(windows.HKEY_LOCAL_MACHINE,
'Software\Microsoft\Windows\CurrentVersion\RunServices', rlist);
regread(windows.HKEY_LOCAL_MACHINE,
'Software\Microsoft\Windows\CurrentVersion\RunServicesOnce', rlist);
regread(windows.HKEY_LOCAL_MACHINE,
'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows\CurrentVersion\RunOnceEx', rlist);
for i := rlist.Count - 1 downto 0 do
begin
tregobj:=tregkey(rlist[i]);
lst := ListView4.items.Add;
keyname := format('%s\%s\%s', [tregobj.Rootkeyname,tregobj.keyname, tregobj.param]);
lst.Caption :=keyname;
lst.SubItems.AddObject(tregobj.value,tregobj);
end;
finally
rlist.Free;
end;
end;
В итоге этот код
procedure TForm1.sBitBtn20Click(Sender: TObject);
var
i:integer;
reg:tregistry;
begin
for i:= listview4.Items.Count -1 downto 0 do
showmessage(tregkey(listview4.Items[i].subitems.Objects[0]).rootkeyname);
end;
либо вызывает ошибку доступа либо пустой messagebox.
В чем лажа? Я тупо не вижу ошибки.
Ну или приведи класс к тобъекту, имхо.
А по умолчанию разве не tobject?
...
end;
Дело явно в tobjectlist - я использовал его для удобства, чтобы не добавлять ненужные строки в tstringlist, так как обращение идет именно к объектам. Но я не понимаю, в чем разница - вроде и там объекты, и там. Однако с tstringlist никаких нареканий нет - работает.
Это песдец, господа! Тип поинтер приводится к tobject-у.
А если постараться, то и к Integer'у :) Правда это говно потом не будет работать на 64-битной платформе, но кого из дельфинов это волнует...
Ну запускай под отладчиком, смотри на каком шаге вылетает... Что тут еще посоветуешь...
гов...м бы было, если бы я писал это на сишке или сиподобных языках -
ухлопал бы уйму времени и сил: а ля сизифов труд, епта. А тут -
переписал код в два счета, и вуаля.
Чудно как-то.ю когда прога в 200 кб требует установленного фреймворка который весит почти гиг - "родила гора мышь" . Я уж как нибудь потерплю Делфю.
А фреймворки - это удобно. не нужно ничего таскать с собой. Имхо.
ПИЗДУЙ, говорю, отсюда, пока живой.
Толсто. Инсталлятор весит 20-40 метров, установленный дотнет - метров 400. Если ты не полный нищеброд, проблем не будет.
[email protected]
генерал обосраного делфи
Эмулятор же трамвая покорил мое сердце всерьез и надолго.
http://tarasber.narod.ru/
Зря ты так. Вылези уже из своих 90-х.
Дотнет по дефолту на спермерке. Да и нет никаких проблем сегодня один раз скачать и поставить фреймверк.
Вылазь из 90-х. Честно. У тебя делфи головного мозга.
Ы.З
Пищи больше не будет. Ты съел все запасы на неделю.
Да куда они денутся. Сейчас даже сраные дрова на звуковуху без фреймворка не ставятся... Так что 2.0 тебе гарантирован на 99.9% компов с вендой.
Вот это,н аверно, толсто.
Это не толсто, это, емнип, ёбаная реальность :( Свежие риалтековские дрова вроде требовали фреймворк. И ATIшные на видео, насколько помню, тоже хотят, иначе панель управления у них не запускается.
> Отладчик проскакивает ошибку. Номер строки не отображается
Тогда просто пошагово потыкайся, F7/F8 или как там в делфе. На какой строке вылетит ошибка - та и бажная. Код небольшой, быстро протыкается.
А если серьезно, кипа, ты же кое-чего смыслишь. Почему объекты из tobjectlist некорректно добавляются в listview?
Из любопытства спрашиваю: autoruns Руссиновича не используете? Если да, то ради каких фич приходится писать своё приложение?
Любопытство - порок.
Удивляет, что у главного тролля такие бурные эмоции на невинное баловство посетителей ГК.
Упс...
можешь не отвечать.
P/S/ Поприветствуем, господа: хуй опять встал!
А где он должен быть, в обработчике задницы?
Вот поэтому плохо начинать программировать с гуя.
with нету?
Кстати, а rlist.Free случаем не фришит все элементы, которые в нем лежат? Если да - в этом и зарыта собака.
Проблема в том, что эти объекты не хотят корректно добавляться в listview.
в то же время код
работает нормально.
Вот и доизвращался.
Может попробуешь на нем кодить, а не извращаться?
Принцип то в чем - тупо скопировать каждый объект из листа в listview.subitems, потом очистить лист.
Или я не прав?
Ну да, все эти потомки TObject'а передаются по ссылке. Из-за этого ты и делаешь им Create и Free каждый раз.
Вобщем-то ничего особо нового тут нет. В жабе, шарпе, да и в куче других языков все точно так же (ну только что Free не надо, ибо сборщик).
ultimate_palmface.pdf
Для фикса попробуй добавить rlist.OwnsObjects := false сразу после создания (rlist := tobjectlist.create). Должно помочь.
Тогда можно еще один вопрос? Допустим, если удалять элемент из списка - удалится ли объект с ним связанный?
Из TObjectList'а походу да: TObjectList controls the memory of its objects, freeing an object when its index is reassigned; when it is removed from the list with the Delete, Remove, or Clear method; or when the TObjectList instance is itself destroyed..
> Теория - полная лажа.
Но без нее никак. Учись читать маны. Не всю же жизнь вопросы задавать будешь.
Я уже подумываю, может, я зря связался с программированием?
>>Переходи на языки со сборкой мусора - по крайней мере, таких проблем в них нет.
Хорошо ты мне советуешь, нечего сказать. Это значит, я должен бросить все проекты на Делфи и срочно начать учить сишку? А вот хуй.
Как будто тебе дофига проектов надо поддерживать.
Вот поэтому у тебя с ним все работало.
> Я уже подумываю, может, я зря связался с программированием?
Ну хз, тебе решать.
Не, лучше скачай какую-нибудь хорошую книжку по делфи для начинающих. Будет полезнее ;)
А справку лучше читать уже по месту, когда надо найти конкретную инфу про конкретный класс. Она у билдера\делфи юзабельна только как справочник.
у любого языка так.
Ты хотел сказать либы?
Сравни вот с этой справкой: http://qt-project.org/doc/qt-5.0/qtwidgets/qwidget.html#details. По ней вполне можно понять что к чему безо всяких книжек: вводные статьи, примеры, типичные косяки, отсылки к похожим классам...
В MSDN, имхо, тоже хорошо оформлено. Ну и java, конечно, отстает, но у нее тоже вполне приличные доки.
А в билдере/делфи... посмотреть список функций, и почитать 2-3 строчки по функции и 5-6 строчек по классу. Хер че поймешь по этим описаниям, все тонкости придется гуглить или у кого-то выспрашивать. Хотя, после того как ее продали эмбаркадере, стало получше.
и у либы тоже. Но язык важнее либы ибо без знаний языка все рано не уедешь
>В MSDN, имхо, тоже хорошо оформлено.
не совсем. иногда в статье просто капитанское описание без примеров и тонкостей. MSDN не учебник. это красивая справка, но учить по ней шарпик глупо. Троелсен же есть
> посмотреть список функций, и почитать 2-3 строчки по функции и 5-6 строчек по классу. Хер че поймешь по этим описаниям, все тонкости придется гуглить или у кого-то выспрашивать.
а у Окси как, тяжелое наследие?
Так с любым языком. Все равно приходиться кодить с гуглом периодически
Удачи. Хотя я думаю что тебе для начала неплохо было бы прочитать энциклопедию профессора фортрана
Если удалить все объекты из списка, это будет невозможно. Оставить тоже нельзя - утечка памяти.
Ну а потом, когда будешь удалять элементы из листвью, надо будет фришить прицепленные к ним TRegKey, чтобы не было утечки.
P.S. Учись читать доки и книжки: без них будешь тыкаться как слепой котёнок, и все грабли соберешь на свою жопу.
По-моему, меня нужно забанить и с позором изгнать. Чужие-то коды я обсмеивал, а сам даже с объектами не смог разобраться. (
rlist у меня tthreadlist.
Не будет ли это ошибкой? Я сам генерирую исключение, но сам же и обрабатываю его.
обещай мне, что никогда не будешь осквернять мой любимый шарпик написанием кода на нем. Обещай
Кстати, я и на билдере сиплюсном одно время кодил, у которого иконка с панельными многоэтажками, обломись.
и что? Я как то раз во сне трахнул королеву англии, так что, теперь ко мне "Ваше величество" обращаться?
Простыню сам стирал, или мамке сплавил?