Форум: "Начинающим";
Текущий архив: 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 код запчасти),-безрезультатно :(
← →
Юрий Зотов © (2009-10-30 12:13) [41]О, боже... ну наконец-то.
WinExec(PChar(OpenDialog1.FileName), SW_NORMAL);
PS
Не нужен Вам никакой OpenDialog. Пропишите путь к tof.exe в файле настроек Вашей программы и читайте его оттуда. Незачем заставлять юзера каждый раз одни те же кнопки тыркать.
← →
Юрий Зотов © (2009-10-30 12:17) [42]Добавление: у Вас строка запуска не содержит пробелов, но если они есть, то при передаче WinExec эту строку надо взять в двойные кавычки.
← →
Aleks (2009-10-30 12:49) [43]> Юрий Зотов. OpenDialog единожды использую для выбора пути к файлу TecDoc в настройках программы, потом он записывается в реестр и читается при вызове комманды контекстного меню списка запчастей. Попробую WinExec(PChar(OpenDialog1.FileName), SW_NORMAL) и отпишусь.. Спасибо за поддержку!
← →
Aleks (2009-10-30 12:54) [44]Не работает WinExec(PChar(OpenDialog1.FileName), SW_NORMAL); Окно ошибки: Reading Errormessages failed. Errorcode= -2. Could not load Errormessages :( Predefined Message "ISB-00001" not found (да\нет\отмена). Так же как и с ShellExecute :(
← →
Юрий Зотов © (2009-10-30 13:22) [45]Фантастика какая-то. Попробуйте так:
// S - это строка запуска TecDoc (E:\TECDOC_CD\3_2009\pb\tof.exe)
if not SetCurrentDir(ExtractFileDir(Trunc(S))) then
raise Exception.Create("Невозможно установить стартовый каталог");
WinExec(PChar(""" + Trunc(S) + """), SW_NORMAL);
← →
Aleks (2009-10-30 13:30) [46]Попробую и отпишусь.. Спасибо Юрий!
← →
Aleks (2009-10-30 13:47) [47]Ошибка компиляции,несовместимость типов: Trunc(S). Trunc разве не с числами работает, отделяет дробную часть?
← →
Юрий Зотов © (2009-10-30 13:52) [48]Trim, а не Trunc, конечно.
Блин... чертова Java...
← →
Dennis I. Komarov © (2009-10-30 14:11) [49]
> Aleks (30.10.09 10:52) [32]
Отговорки...
> OpenDialog единожды использую для выбора пути к файлу TecDoc
> в настройках программы,
Для этого есть SelectDirectory
← →
Aleks (2009-10-30 15:17) [50]>Dennis I. Komarov. SelectDirectory как использовать? Можно код?
> Юрий Зотов. ПопробуюTrim..
← →
Dennis I. Komarov © (2009-10-30 15:21) [51]
> Aleks (30.10.09 15:17) [50]
опять 25...
F1 не проще нажать или это проверка терпения?
← →
Aleks (2009-10-30 15:21) [52]> Юрий Зотов. С тримом заработало! :) В чем секрет можете обьяснить? Буду оч.благодарен...
← →
Dennis I. Komarov © (2009-10-30 15:23) [53]подскажу лишь, что он не один...
> В чем секрет можете обьяснить?
в пробелах...
← →
Aleks (2009-10-30 15:25) [54]>Dennis I. Komarov. Ясно, сам разберусь..
> Юрий Зотов. Откуда взялись пробелы в начале и конце в OpenDialog.FileName?
← →
Aleks (2009-10-30 15:26) [55]>Dennis I. Komarov. Нравятся загадки? ;) Или просто отвечать не любите?
← →
Dennis I. Komarov © (2009-10-30 15:31) [56]
> Aleks (30.10.09 15:26) [55]
Хочу научить юзать справку, оно полезно будет
> Aleks (30.10.09 15:25) [54]
Оно и без трима должно прекрасно работать...
← →
Aleks (2009-10-30 15:33) [57]>Dennis I. Komarov. А вот не работало, стал бы я создавать тут тему и всем надоедать. Писал бы себе дальше прогу(еще процентов 25 предстоит)...
← →
Aleks (2009-10-30 15:35) [58]>Dennis I. Komarov. P.S. И сдается мне что Гугль полезнее справки..
← →
Dennis I. Komarov © (2009-10-30 15:42) [59]Ну так посмотри что делает трим, и, как следствие, откуда пробелы берутся.
> Aleks (30.10.09 15:35) [58]
Флаг в руки...
← →
Dennis I. Komarov © (2009-10-30 15:46) [60][16] тоже там нашел...
← →
Юрий Зотов © (2009-10-30 17:47) [61]> Aleks (30.10.09 15:21) [52]
Скорее всего, дело не в триме, я его просто на всякий случай вставил (кто его знает, что там с FileName у Вас присходит, вдруг к нему ерунда какая-нибудь дописывается?).
Меня смутило сообщение об ошибке - какое-то оно "несистемное" (да и код -2 функция WinExec выдать не может, если верить ее описанию). Поэтому я предположил, что WinExec срабатывает нормально и TecDoc успешно запускает, а ошибку выдает уже сам TecDoc и тут же завершается (а с виду получается, что он, вроде бы, и не запускался вовсе, хотя это не так).
Косвенным подтвержением такого предположения стал текст "ISB-00001 not found" в сообщении - я набрал ISB-001 в гугле и стало ясно, что к WinExec он уж точно никаким боком не относится, а вот к TecDoc - может быть (я просто не знаю этой программы, но не исключено).
Тогда возник следующий вопрос - почему при клике по ярлыку TecDoc запускается нормально, а при программном запуске кричит, что он чего-то там "not found"? В чем разница? Вы сказали, что никаких параметров запуска в ярлыке не прописано - значит, разница только в стартовом каталоге. При запуске ярлыком стартовый каталог - это собственный каталог TecDoc, а при запуске из программы стартовый каталог - это текущий каталог программы, если явно не указан никакой другой. И запросто может быть, что при запуске не из своего каталога TecDoc действительно не может чего-то там найти (неграмотно написан, кстати).
Проверка простая - перед запуском TecDoc сменить текущий калог и на собственный каталог TecDoc и посмотреть, что произойдет. И правда произошло - оно возьми, да и заработай.
А трим - это уже так, для страховки. Если никаких фокусов Вы с FileName не вытворяете, то трим можно убрать, должно и без него работать.
← →
Юрий Зотов © (2009-10-30 17:54) [62]> Aleks (30.10.09 15:35) [58]
> И сдается мне что Гугль полезнее справки..
Это САМАЯ грубая ошибка, какую только можно себе представить.
Гугль становится полезным после того, как справку знаешь уже чуть ли не наизусть. А при незнании справки гугль гораздо более вреден, чем полезен.
Знаете, сколько новичков на этом обжигалось? Только на одном этом форуме их были многие сотни (если не тысячи). Кстати, и Вы тоже (см. 22).
← →
Юрий Зотов © (2009-10-30 18:02) [63]Для двоичных программистов:
Я в курсе, что при запуске ярлыком стартовый каталог в этом же ярлыке и прописывается.
Но я также в курсе и того, что с вероятностью "много-много девяток" он прописан, как собственный каталог программы. Потому что по дефолту он именно такой, а меняют дефолт лишь очень редкие эстеты.
Эстеты - это, знаете ли, вообще редкость...
← →
Aleks (2009-10-30 18:09) [64]> Юрий Зотов. Спасибо за подробное описание,очень рад получить помощь от толкового специалиста. Впредь буду знать нюансы запуска внешних программ. А еще понравилась фраза: "Эстеты - это, знаете ли, вообще редкость..." :)
← →
Германн © (2009-10-30 18:41) [65]
> А еще понравилась фраза: "Эстеты - это, знаете ли, вообще
> редкость..."
Она понравится ещё больше, если прочитаешь бессмертное произведение Я.Гашека
:)
← →
Inovet © (2009-10-30 19:15) [66]> [45] Юрий Зотов © (30.10.09 13:22)
А WinExec для упрощения примера?
← →
Юрий Зотов © (2009-10-30 19:45) [67]> Inovet © (30.10.09 19:15) [66]
Угу. Оно, конечно, уже давно deprecated, зато самое простое.
И, впрочем, песня не о нем, а...
:o)
← →
Юрий Зотов © (2009-10-30 20:09) [68]А вообще, я лопух. Уже в [44] после слов "окно ошибки" надо было сразу сообразить, что WinExec никаких окон не выдает и, значит, ни при чем.
Хотя кто его знает, чем там этот WinExec был в коде обернут...
← →
recop © (2009-12-07 17:28) [69]Господа, а как можно выровнять колонку по содержимому в стиле vsList?
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.01.31;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.008 c