- 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.
В чем лажа? Я тупо не вижу ошибки.
Stertor 07.09.2013 12:11 # +2
guest 07.09.2013 12:50 # 0
Ну или приведи класс к тобъекту, имхо.
Stertor 07.09.2013 12:54 # −1
А по умолчанию разве не tobject?
...
end;
Дело явно в tobjectlist - я использовал его для удобства, чтобы не добавлять ненужные строки в tstringlist, так как обращение идет именно к объектам. Но я не понимаю, в чем разница - вроде и там объекты, и там. Однако с tstringlist никаких нареканий нет - работает.
Stertor 07.09.2013 12:58 # −1
Stertor 07.09.2013 13:09 # −1
Это песдец, господа! Тип поинтер приводится к tobject-у.
bormand 07.09.2013 13:54 # −1
А если постараться, то и к Integer'у :) Правда это говно потом не будет работать на 64-битной платформе, но кого из дельфинов это волнует...
bormand 07.09.2013 13:55 # 0
Ну запускай под отладчиком, смотри на каком шаге вылетает... Что тут еще посоветуешь...
Stertor 07.09.2013 14:15 # −1
Stertor 07.09.2013 14:22 # −1
гов...м бы было, если бы я писал это на сишке или сиподобных языках -
ухлопал бы уйму времени и сил: а ля сизифов труд, епта. А тут -
переписал код в два счета, и вуаля.
anonimb84a2f6fd141 07.09.2013 14:51 # −1
Stertor 07.09.2013 14:56 # −1
anonimb84a2f6fd141 07.09.2013 15:06 # −1
Stertor 07.09.2013 15:11 # −2
Чудно как-то.ю когда прога в 200 кб требует установленного фреймворка который весит почти гиг - "родила гора мышь" . Я уж как нибудь потерплю Делфю.
kegdan 07.09.2013 15:19 # +5
bormand 07.09.2013 15:20 # −2
kegdan 07.09.2013 15:33 # +5
А фреймворки - это удобно. не нужно ничего таскать с собой. Имхо.
Stertor 07.09.2013 15:35 # −2
ПИЗДУЙ, говорю, отсюда, пока живой.
kegdan 07.09.2013 15:36 # +10
anonimb84a2f6fd141 07.09.2013 15:42 # −1
Толсто. Инсталлятор весит 20-40 метров, установленный дотнет - метров 400. Если ты не полный нищеброд, проблем не будет.
Stertor 07.09.2013 15:54 # −2
anonimb84a2f6fd141 07.09.2013 16:03 # −1
Stertor 07.09.2013 16:04 # −2
anonimb84a2f6fd141 07.09.2013 16:05 # −1
Stertor 07.09.2013 16:28 # −2
anonimb84a2f6fd141 07.09.2013 16:38 # −3
Stertor 07.09.2013 16:41 # −2
anonimb84a2f6fd141 07.09.2013 16:42 # −2
Stertor 07.09.2013 17:47 # −2
Stertor 07.09.2013 17:56 # −2
anonimb84a2f6fd141 07.09.2013 18:15 # −2
guest 07.09.2013 18:16 # −2
anonimb84a2f6fd141 07.09.2013 18:26 # −2
guest 07.09.2013 18:29 # −8
[email protected]
Stertor 08.09.2013 15:22 # −1
kegdan 08.09.2013 07:10 # 0
генерал обосраного делфи
Stertor 08.09.2013 10:35 # −2
kegdan 08.09.2013 14:04 # −2
Stertor 08.09.2013 15:19 # −2
Stertor 08.09.2013 15:24 # +5
Эмулятор же трамвая покорил мое сердце всерьез и надолго.
http://tarasber.narod.ru/
Stertor 07.09.2013 15:21 # −2
kegdan 07.09.2013 15:35 # +6
Stertor 07.09.2013 15:38 # −1
kegdan 07.09.2013 15:40 # −2
Stertor 07.09.2013 15:42 # −1
anonimb84a2f6fd141 07.09.2013 15:41 # −2
Зря ты так. Вылези уже из своих 90-х.
Дотнет по дефолту на спермерке. Да и нет никаких проблем сегодня один раз скачать и поставить фреймверк.
anonimb84a2f6fd141 07.09.2013 15:46 # −2
Stertor 07.09.2013 15:51 # −1
anonimb84a2f6fd141 07.09.2013 15:52 # −1
Stertor 07.09.2013 15:57 # −3
anonimb84a2f6fd141 07.09.2013 16:04 # −1
Stertor 07.09.2013 16:12 # −3
Stertor 07.09.2013 15:46 # −1
anonimb84a2f6fd141 07.09.2013 15:53 # −2
Вылазь из 90-х. Честно. У тебя делфи головного мозга.
kegdan 07.09.2013 15:55 # −2
Stertor 07.09.2013 15:59 # −1
Ы.З
Пищи больше не будет. Ты съел все запасы на неделю.
bormand 07.09.2013 15:59 # −2
Да куда они денутся. Сейчас даже сраные дрова на звуковуху без фреймворка не ставятся... Так что 2.0 тебе гарантирован на 99.9% компов с вендой.
Stertor 07.09.2013 16:03 # −1
anonimb84a2f6fd141 07.09.2013 16:04 # −1
Вот это,н аверно, толсто.
bormand 07.09.2013 16:16 # −1
Это не толсто, это, емнип, ёбаная реальность :( Свежие риалтековские дрова вроде требовали фреймворк. И ATIшные на видео, насколько помню, тоже хотят, иначе панель управления у них не запускается.
guest 07.09.2013 18:32 # −8
guest 07.09.2013 18:32 # −8
bormand 07.09.2013 14:59 # −1
> Отладчик проскакивает ошибку. Номер строки не отображается
Тогда просто пошагово потыкайся, F7/F8 или как там в делфе. На какой строке вылетит ошибка - та и бажная. Код небольшой, быстро протыкается.
kipar 07.09.2013 15:23 # −1
Stertor 07.09.2013 15:24 # −1
А если серьезно, кипа, ты же кое-чего смыслишь. Почему объекты из tobjectlist некорректно добавляются в listview?
kipar 07.09.2013 16:04 # −2
Stertor 07.09.2013 16:26 # −1
1024-- 07.09.2013 14:01 # −11
Из любопытства спрашиваю: autoruns Руссиновича не используете? Если да, то ради каких фич приходится писать своё приложение?
Stertor 07.09.2013 14:17 # −3
Любопытство - порок.
1024-- 07.09.2013 15:21 # −15
Stertor 07.09.2013 15:32 # −2
1024-- 07.09.2013 15:41 # −2
Удивляет, что у главного тролля такие бурные эмоции на невинное баловство посетителей ГК.
Stertor 07.09.2013 15:48 # −2
anonimb84a2f6fd141 07.09.2013 14:52 # 0
Stertor 07.09.2013 14:57 # −3
Упс...
можешь не отвечать.
anonimb84a2f6fd141 07.09.2013 15:43 # 0
kegdan 07.09.2013 14:57 # +3
Stertor 07.09.2013 15:04 # −8
P/S/ Поприветствуем, господа: хуй опять встал!
inkanus-gray 07.09.2013 15:28 # 0
Stertor 07.09.2013 15:41 # −2
А где он должен быть, в обработчике задницы?
anonimb84a2f6fd141 07.09.2013 15:47 # −1
Вот поэтому плохо начинать программировать с гуя.
Stertor 07.09.2013 16:13 # −1
anonimb84a2f6fd141 07.09.2013 15:45 # 0
with нету?
bormand 07.09.2013 16:02 # −1
Кстати, а rlist.Free случаем не фришит все элементы, которые в нем лежат? Если да - в этом и зарыта собака.
anonimb84a2f6fd141 07.09.2013 16:05 # −1
Stertor 07.09.2013 16:07 # −1
Проблема в том, что эти объекты не хотят корректно добавляться в listview.
в то же время код
работает нормально.
Stertor 07.09.2013 16:22 # −2
Вот и доизвращался.
kegdan 08.09.2013 07:14 # −1
Может попробуешь на нем кодить, а не извращаться?
kipar 07.09.2013 16:09 # −1
bormand 07.09.2013 16:10 # −1
Stertor 07.09.2013 16:15 # −1
Принцип то в чем - тупо скопировать каждый объект из листа в listview.subitems, потом очистить лист.
Или я не прав?
bormand 07.09.2013 16:33 # −1
Stertor 07.09.2013 16:37 # 0
bormand 07.09.2013 16:40 # −1
Ну да, все эти потомки TObject'а передаются по ссылке. Из-за этого ты и делаешь им Create и Free каждый раз.
Вобщем-то ничего особо нового тут нет. В жабе, шарпе, да и в куче других языков все точно так же (ну только что Free не надо, ибо сборщик).
anonimb84a2f6fd141 07.09.2013 16:43 # −1
kegdan 08.09.2013 07:16 # +1
ultimate_palmface.pdf
bormand 07.09.2013 16:36 # 0
Для фикса попробуй добавить rlist.OwnsObjects := false сразу после создания (rlist := tobjectlist.create). Должно помочь.
Stertor 07.09.2013 16:43 # −1
bormand 07.09.2013 16:44 # −1
Stertor 07.09.2013 16:46 # −1
Тогда можно еще один вопрос? Допустим, если удалять элемент из списка - удалится ли объект с ним связанный?
bormand 07.09.2013 16:49 # −1
Из 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..
> Теория - полная лажа.
Но без нее никак. Учись читать маны. Не всю же жизнь вопросы задавать будешь.
Stertor 07.09.2013 16:54 # −1
Я уже подумываю, может, я зря связался с программированием?
anonimb84a2f6fd141 07.09.2013 17:11 # −1
Stertor 07.09.2013 17:14 # −2
anonimb84a2f6fd141 07.09.2013 17:39 # −2
Stertor 07.09.2013 17:41 # −2
anonimb84a2f6fd141 07.09.2013 17:43 # −2
Stertor 07.09.2013 17:49 # −2
>>Переходи на языки со сборкой мусора - по крайней мере, таких проблем в них нет.
Хорошо ты мне советуешь, нечего сказать. Это значит, я должен бросить все проекты на Делфи и срочно начать учить сишку? А вот хуй.
anonimb84a2f6fd141 07.09.2013 18:16 # −2
guest 07.09.2013 18:18 # −2
anonimb84a2f6fd141 07.09.2013 22:01 # 0
Как будто тебе дофига проектов надо поддерживать.
Stertor 08.09.2013 10:36 # −1
kegdan 08.09.2013 14:07 # −1
bormand 07.09.2013 17:18 # 0
Вот поэтому у тебя с ним все работало.
> Я уже подумываю, может, я зря связался с программированием?
Ну хз, тебе решать.
Stertor 07.09.2013 17:54 # −2
bormand 07.09.2013 17:58 # −1
Не, лучше скачай какую-нибудь хорошую книжку по делфи для начинающих. Будет полезнее ;)
А справку лучше читать уже по месту, когда надо найти конкретную инфу про конкретный класс. Она у билдера\делфи юзабельна только как справочник.
kegdan 08.09.2013 07:23 # −1
у любого языка так.
bormand 08.09.2013 07:29 # 0
Ты хотел сказать либы?
Сравни вот с этой справкой: http://qt-project.org/doc/qt-5.0/qtwidgets/qwidget.html#details. По ней вполне можно понять что к чему безо всяких книжек: вводные статьи, примеры, типичные косяки, отсылки к похожим классам...
В MSDN, имхо, тоже хорошо оформлено. Ну и java, конечно, отстает, но у нее тоже вполне приличные доки.
А в билдере/делфи... посмотреть список функций, и почитать 2-3 строчки по функции и 5-6 строчек по классу. Хер че поймешь по этим описаниям, все тонкости придется гуглить или у кого-то выспрашивать. Хотя, после того как ее продали эмбаркадере, стало получше.
kegdan 08.09.2013 09:24 # 0
и у либы тоже. Но язык важнее либы ибо без знаний языка все рано не уедешь
>В MSDN, имхо, тоже хорошо оформлено.
не совсем. иногда в статье просто капитанское описание без примеров и тонкостей. MSDN не учебник. это красивая справка, но учить по ней шарпик глупо. Троелсен же есть
> посмотреть список функций, и почитать 2-3 строчки по функции и 5-6 строчек по классу. Хер че поймешь по этим описаниям, все тонкости придется гуглить или у кого-то выспрашивать.
а у Окси как, тяжелое наследие?
Так с любым языком. Все равно приходиться кодить с гуглом периодически
defecate-plusplus 08.09.2013 11:53 # 0
Stertor 08.09.2013 12:03 # −1
kegdan 08.09.2013 07:22 # −1
Удачи. Хотя я думаю что тебе для начала неплохо было бы прочитать энциклопедию профессора фортрана
Stertor 08.09.2013 10:37 # −1
anonimb84a2f6fd141 08.09.2013 16:18 # 0
Stertor 07.09.2013 17:19 # −1
Если удалить все объекты из списка, это будет невозможно. Оставить тоже нельзя - утечка памяти.
bormand 07.09.2013 17:22 # −1
Ну а потом, когда будешь удалять элементы из листвью, надо будет фришить прицепленные к ним TRegKey, чтобы не было утечки.
P.S. Учись читать доки и книжки: без них будешь тыкаться как слепой котёнок, и все грабли соберешь на свою жопу.
Stertor 07.09.2013 17:32 # −1
По-моему, меня нужно забанить и с позором изгнать. Чужие-то коды я обсмеивал, а сам даже с объектами не смог разобраться. (
Stertor 07.09.2013 17:42 # −1
Stertor 08.09.2013 12:00 # −1
rlist у меня tthreadlist.
Не будет ли это ошибкой? Я сам генерирую исключение, но сам же и обрабатываю его.
Stertor 08.09.2013 13:21 # −1
kegdan 08.09.2013 07:18 # −1
обещай мне, что никогда не будешь осквернять мой любимый шарпик написанием кода на нем. Обещай
Stertor 08.09.2013 12:02 # −1
Кстати, я и на билдере сиплюсном одно время кодил, у которого иконка с панельными многоэтажками, обломись.
kegdan 08.09.2013 14:11 # −1
и что? Я как то раз во сне трахнул королеву англии, так что, теперь ко мне "Ваше величество" обращаться?
Stertor 08.09.2013 15:20 # −1
Простыню сам стирал, или мамке сплавил?
anonimb84a2f6fd141 08.09.2013 16:19 # 0