Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.007 c
2-1260258996
VS
2009-12-08 10:56
2010.01.31
32 битные битмапы с альфой на TSpeedButton


11-1210873275
Vinum
2008-05-15 21:41
2010.01.31
Как у стринггриду запретить редактировать определенные ячейки


15-1259264658
Игорь Шевченко
2009-11-26 22:44
2010.01.31
Наука нанотехнологий на марше!


4-1206729534
Пётр
2008-03-28 21:38
2010.01.31
Открыть с помощью


15-1259098216
Юрий
2009-11-25 00:30
2010.01.31
С днем рождения ! 25 ноября 2009 среда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский