Форум: "Начинающим";
Текущий архив: 2010.01.31;
Скачать: [xml.tar.bz2];
ВнизВыравнивание колонок ListView по содержимому Найти похожие ветки
← →
Aleks (2009-10-26 15:31) [0]Как выравнять колонки ListView по содержимому? Нашел такой код:
ListView1.SetFocus;
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(VK_ADD, 0, 0, 0);
keybd_event(VK_ADD, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Отлично работает,но не учитывает текст в шапке списка :(
и после автовыравнивания приходится еще и ручно раздвигать колонки чтобы прочитать обрезаный текст в шапке.
← →
clickmaker © (2009-10-26 15:50) [1]> но не учитывает текст в шапке списка
значит, самому нужно учесть. см. Canvas.TextWidth
← →
Aleks (2009-10-26 18:19) [2]Выставлять после заполнения списка ListView данными программно ширину Canvas.TextWidth? Или как? Я не очень понимаю как это можно сделать :(
← →
Юрий Зотов © (2009-10-26 18:47) [3]> Aleks (26.10.09 18:19) [2]
После выполнения Вашего кода пройти в цикле по колонкам, и у тех колонок, где ширина текста в заголовке больше ширины самой колонки, выставить новую ширину колонки.
Но гораздо лучше использовать макрос ListView_SetColumnWidth, а не Ваши археологические раскопки (я в шоке: это ж надо такое придумать - управлять контролом через эмуляцию клавиш).
Описание ListView_SetColumnWidth см. в MSDN, там все очень просто, например:
for i := 0 to ColumnCount -1 do
ListView_SetColumnWidth(Handle, i, LVSCW_AUTOSIZE_USEHEADER);
← →
Aleks (2009-10-27 10:18) [4]Спасибо большое! Буду пробывать for i := 0 to ColumnCount -1 do
ListView_SetColumnWidth(Handle, i, LVSCW_AUTOSIZE_USEHEADER);
← →
Aleks (2009-10-28 17:45) [5]ListView_SetColumnWidth - неизвестный идентификатор (ошибка компилирования) :(
← →
Юрий Зотов © (2009-10-28 18:50) [6]> Aleks (28.10.09 17:45) [5]
uses ..., CommCtrl;
Не стыдно?
← →
Aleks (2009-10-29 10:46) [7]Совершенству нет предела.. Бум знать,Спасибо Большое за помощь Юрий!
← →
Aleks (2009-10-29 10:54) [8]Написал так:
for i := 0 to ListView1.Columns.Count -1 do
ListView_SetColumnWidth(Handle, i, LVSCW_AUTOSIZE_USEHEADER);
Но почему-то все-равно не работает :( Ни хидер не раздвигает по ширине заголовков, ни колонки по ширине содержимого. Вызываю цикл после заполнения списка данными.(юсес прописал)
← →
Юрий Зотов © (2009-10-29 11:06) [9]Handle чей передаете? Формы?
Видимо, формы. Вот окно формы эту команду и получает. Теперь вопрос - а как окно формы может ее выполнить, ежели ни о каких колонках оно и понятия не имеет?
Разве не очевидно, что команду должно получить окно ListView? Значит, и передавать нужно ListView1.Handle.
Совершенству, конечно, предела нет. Но думать все равно нужно.
← →
Aleks (2009-10-29 13:58) [10]Заработало! :) Спасибо Большое Юрий!
← →
Юрий Зотов © (2009-10-29 14:55) [11]Что заработало - это хорошо. А что на такую простую вещь было потрачено 3 дня вместо 3-х минут - это никуда не годится. Аж две грубые ошибки... ну как же так? Причем первая (uses) было совершенно очевидной, да и вторая (handle) тоже.
← →
Aleks (2009-10-29 15:15) [12]У хорошего учителя знающие ученики.. :) (Со временем;) )
← →
Aleks (2009-10-29 15:18) [13]Нужно из проги запустить TecDoc (http://pslan.com/details.php?id=78220). Указываю путь к нему и запускаю таким методом:
var
c: array[0..800] of Char;
path:String;
begin
path:=openDialog1.FileName;
StrPCopy(c, path);
ShellExecute(Application.Handle, "open", c, nil, nil, SW_NORMAL);
end;
В результате несколько окон с ошибками и нулевой результат, с WinEXEC аналогично. Блокнот или плеер вызывает легко,а вот ТекДок никак :( Че делать?
← →
Dennis I. Komarov © (2009-10-29 15:24) [14]Плох ученик, который учится не хочет, а ищет халаву. Одной ветки мало?
← →
Юрий Зотов © (2009-10-29 15:47) [15]> Aleks (29.10.09 15:18) [13]
1. Почему массив не packed (хотя он все равно будет packed, но почему не объявлен правильно)?
2. Зачем копировать строку вместо приведения типа (хотя это не ошибка, но это лишняя память и лишние операции)?
3. Почему Application.Handle (хотя это не ошибка, но почему именно так)?
4. Почему передается массив, а не его адрес (а вот это уже ошибка - и, кстати, если бы не было вопроса 2, то не было бы и этой ошибки)?
5. Это расширение имени файла в системе точно зарегистрировано?
← →
Aleks (2009-10-29 16:02) [16]Код взял тут:http://www.delphisources.ru/pages/faq/base/run_app.html так как сам не знал как запустить файл из Дельфи :(
← →
Dennis I. Komarov © (2009-10-29 16:20) [17]Издержки халявы...
← →
Aleks (2009-10-29 16:33) [18]Издержки незнания :( Научить некому, вот и спрашиваю на форуме. Но видимо и тут не найду помощь.. :(
← →
Юрий Зотов © (2009-10-29 16:36) [19]> Aleks (29.10.09 16:02) [16]
Разобрать чужой код "по винтикам", используя для этого справочные материалы - очень полезно. И MSDN я упоминал именно для этого.
Использовать чужой код бездумно, не понимая, как он работает - очень вредно.
Если Вы не смогли самостоятельно использовать пример с ListView и не смогли ответить на вопросы по поводу открытия файла - значит, в обоих случаях Вы пошли вторым путем. А это уже тенденция.
Что ж, Ваше право. Но без меня.
Жаль.
← →
Юрий Зотов © (2009-10-29 16:40) [20]> Aleks (29.10.09 16:33) [18]
Вы нигде не найдете ни уважения, ни помощи, пока САМИ не начнете РАБОТАТЬ.
Но как только Вы это начнете - Вы найдете помощь и уважение везде. И здесь тоже.
← →
Dennis I. Komarov © (2009-10-29 16:50) [21]
> Aleks (29.10.09 16:33) [18]
> Издержки незнания :( Научить некому, вот и спрашиваю на
> форуме. Но видимо и тут не найду помощь.. :(
Как же тебя научить, ты учиться не хочешь?
← →
Юрий Зотов © (2009-10-29 17:15) [22]> Aleks (29.10.09 16:02) [16]
А знаете, почему "использовать чужой код бездумно, не понимая, как он работает - очень вредно"? Вот почему.
В Сети ОЧЕНЬ много примеров кода, которые содержат погрешности, прямые ошибки, утечки памяти и прочие недочеты. Либо пример был писан еще под Win16 - и там был правильным, а под Win32 оказался неверным. Либо пример правильный, но написан не для тех условий, для которых его пытаются использовать без соответствующих доработок - и поэтому он снова превращается в неправильный.
Поэтому любой найденный в Сети код ОБЯЗАТЕЛЬНО нужно досконально проанализировать и понять, как он работает - причем со справкой в руках. Нужно по справке изучить каждую использованную функцию, каждый ее параметр, прочитать замечания по ней - вот это и есть учеба. И только после такого изучения станет ясно, подходит ли данный пример, не содержит ли он ошибок и требует ли он доработки. И вопросы после этого Вы будете задавать уже совсем другие - не "как взлететь на Луну?", а "какой материал лучше использовать для болта номер 7 в ракете номер 4?".
Приведенная Вами ссылка - яркий тому пример. Вы даже представить не можете сколько там погрешностей и прямых ошибок. Море. Они буквально в каждой из 5 приведенных там функций (хотя 5 не нужно, все легко сводится к двум). Лень комментировать, да и комментировать пришлось бы слишком много - просто поверьте на слово, что грязи там действительно много. И, даже не пытаясь разобраться, Вы методом "copy+paste" тащите всю эту грязь в свою программу.
И получается: программа так и не заработала, знаний у Вас так и не прибавилось - пользы, значит, никакой. Зато в программе появилась грязь - значит, вред один только.
А зачем?
← →
Aleks (2009-10-29 18:00) [23]Я уже все способы перепробовал и ShellExecute и WinExec,ниче не работает :( Любую прогу можно запустить кроме TecDoc,даже параметры никакие при запуске не передаются(смотрел свойства ярлыка на раб.столе). Неужели так трудно привести код в пару строк для запуска внешней проги и обьяснить как работает? Пишу сам себе софт для работы на автосервисе, так как в инете все платное(дорогое) для таких нужд как у нас.
← →
Dennis I. Komarov © (2009-10-29 18:12) [24]Aleks (29.10.09 18:00) [23]
А после на сервис все хором поедим к тебе масло скажем менять. Ну ведь правда, ничего сложного в этом нет? Ну не может доярка управлять страной, так нафига же тебе писать себе программу? В больницу на операцию будите ложиться, а хирург вам: "Да, ща скажут на форуме как тут чего..."
← →
Aleks (2009-10-29 18:23) [25]Я не механиком у нас работаю,а менеджер-бухгалтер,и с компами давно на "ТЫ" (еще с Басика начинал,потом перешел на Паскаль). Счас пытаюсь Дельфи освоить собственными силами.. А масло можете приехать поменять,сделаю скидку за помощь на форуме. Будем рады Вас видеть! :)
← →
Юрий Зотов © (2009-10-29 18:23) [26]> Aleks (29.10.09 18:00) [23]
> Любую прогу можно запустить кроме TecDoc
А сам факт того, что ShellExecute запускает любую прогу, кроме TecDoc - сам этот факт разве ни о чем не говорит?
← →
Aleks (2009-10-29 18:24) [27]P.S. Понравилась фраза про больницу,смешно.. :)
← →
Aleks (2009-10-29 18:26) [28]Вот и мне непонятно почему не запускается,хотел разобратся с Вашей помощью.. Вроде параметры никакие не передаются,судя по ярлыку,а вот ведь незадача.. :(
← →
Юрий Зотов © (2009-10-29 18:37) [29]> Aleks (29.10.09 18:26) [28]
Для того, чтобы ShellExecute открыла файл X.EXT в программе P, нужно, чтобы для файлов с расширением EXT в системе была зарегистрирована команда OPEN, а в ней указана программа P. Без этого ничего не получится.
В Проводнике сделайте двойной клик левой кнопкой по Вашему файлу. Если при этом TecDoc не запустится, то и ShellExecute ничего не сможет сделать, пока расширение EXT не будет зарегистрировано в системе (правый клик по файлу -> "Открыть с помощью" -> "Выбрать программу").
← →
Dennis I. Komarov (htc) (2009-10-29 22:43) [30]не смешно, а грустно...
это управляющий-бухгалтер что-ли?
← →
Германн © (2009-10-30 01:57) [31]
> Dennis I. Komarov (htc) (29.10.09 22:43) [30]
>
> не смешно, а грустно...
Смирись.
← →
Aleks (2009-10-30 10:52) [32]>Dennis I. Komarov. 2in1 время нонче такое.. >Юрий Зотов. В проводнике ТecDoc запускается двойным кликом. Это - исполняемый ехе-файл (tof.exe, в ярлыке на раб.столе указан путь(без доп. параметров) и рабочая папка программы)
← →
Юрий Зотов © (2009-10-30 11:03) [33]> Aleks (30.10.09 10:52) [32]
Елы-палы... еще бы исполняемому файлу не запускаться из проводника... разве об этом речь шла?
У Вас в коде в ShellExecute передается OpenDialog.FileName. Это значит, что Вы хотите открыть файл с этим самым FileName с помощью той программы, которая зарегистрирована в системе для файлов такого типа.
Вот по ЭТОМУ файлу и щелкайте, а не по файлу самой программы и не по ее ярлыку. Если откроется двойным щелчком - значит, ошибка в Вашей программе, а если нет - значит, для файлов такого типа никакой программы в системе не зарегистрировано, поэтому ShellExecute и не срабатывает.
← →
brother © (2009-10-30 11:07) [34]если я правильно понял, то автор хочет чего-то открыть с помощью ТecDoc? но обламывается... предположу, эта прога не кушает доп параметры...
← →
brother © (2009-10-30 11:08) [35]Юрий, догадавыаетесь, что в openDialog1.FileName; находится?
автор, нука покаж, что там лежит?)
← →
Юрий Зотов © (2009-10-30 11:37) [36]> brother © (30.10.09 11:07) [34]
> предположу, эта прога не кушает доп параметры...
Я тоже это предполагаю. Заодно и оно проверится.
← →
Aleks (2009-10-30 11:50) [37]> brother. Я так думаю в openDialog1.FileName полный путь с именем файла. А параметры не нужно никакие передавать, просто запустить TecDoc. (Имя tof.exe, в ярлыке на раб.столе указан путь(без доп. параметров) и рабочая папка программы).
← →
brother © (2009-10-30 11:56) [38]это даже не ТЗ, ну, ладно... теперь пиши программу...
← →
Юрий Зотов © (2009-10-30 11:58) [39]> Aleks (30.10.09 11:50) [37]
> Я так думаю в openDialog1.FileName полный путь с именем файла.
Здесь не надо думать - надо поставить точку останова и отладчиком посмотреть, что там в этом FileName сидит. Конкретно и без всяких раздумий. И отписать сюда.
И еще: уточните, что Вы хотите сделать - просто запустить tof.exe, или запустить так, чтобы в нем сразу оказался открытым какой-то документ (файл)?
← →
Aleks (2009-10-30 12:05) [40]openDialog1.FileName=E:\TECDOC_CD\3_2009\pb\tof.exe Нужно просто запустить, открыть ничего в нем не удастся. В идеале надо открыть указанную в проге запчасть в каталоге,но я пробовал передать параметры bat-ником (tof.exe код запчасти),-безрезультатно :(
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.01.31;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.005 c