Вопрос № 45333: Вот такая задача: надо создать двупотоковое приложение, в коем один поток занимается чтением из СОМ порта данных. Так вот как написать так чтоб читающему потоку можно было назначать бОльший приоритет без ущерба для основного приложения?
ЗЫ: Если ...Вопрос № 45344: Добрый день, уважаемые! Подскажите как преобразовть путь из
'c:aaabbcccfilename' в 'c:aaa...filename', если по длине эта строка не влазит в Edit, а также как отображать этот путь в хинте?...Вопрос № 45363: Как переименовать папку программно?
и еще нужен компонент:
1) ему можно было бы задать корневую папку, выше которой подняться нельзя;
2) файлы и папки оформлены как дерево;
3) показывать нужно название файла или папки и его время...Вопрос № 45368: Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, как "пройтись" по всем элементам формы и проверить, обладает ли элемент определенным свойством, например width? Заранее благодарен!...Вопрос № 45369: Здравствуйте, уважаемые эксперты!
Можно ли преобразовать символы из Caption, Richedit, combobox в верхний и нижний индексы? И если такое возможно, то как это сделать во время выполнения программы?
Спасибо....Вопрос № 45378: Здравствуйте, уважаемые эксперты.
вопрос такой:можно в делфи сделать так, чтобы по нажатию какой-нибудь комбинации клавиш у меня вставлялись например строки procedure
begin
end
чтобы не приходилось каждый раз это набирать
или что...Вопрос № 45407: Спасибо за ответ на предыдущий вопрос. есть еще один.
Как можно клавишами переключаться между юнитами проекта, которые в закладках?
Спасибо за ответы...Вопрос № 45464: Здраствуйте, екперты. Хочу попробовать создать firewall на Delphi
но не знаю с чего начать?...Вопрос № 45465: Уважаемые эксперты, подскажите, пожалуйста, как расположить текст по параболе? Заранее благодарен!...Вопрос № 45470: Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, литературу по DLL в интеренете. Мне нужно не просто "что такое и зачем", а как можно подробнее, до мелочей. Заранее очень благодарен!...Вопрос № 45474:
Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, как на форме расположить тект по параболе?...
Вопрос № 45.333
Вот такая задача: надо создать двупотоковое приложение, в коем один поток занимается чтением из СОМ порта данных. Так вот как написать так чтоб читающему потоку можно было назначать бОльший приоритет без ущерба для основного приложения?
ЗЫ: Если не правильно сформулировал - подскажите как надо.
Отправлен: 06.06.2006, 06:37
Вопрос задал: SUPcOZA (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, SUPcOZA!
Первый же результат в Яндексе по запросу "приоритет нити" (без кавычек) выдает страницу с информацией. Все используемые функции есть в help-е Delphi. Только в Delphi нет типа HANDLE - вместо него используется HWND. Впрочем, в принципе, можно использовать хоть LongWord, т.к. системный идентификатор HANDLE - это по сути 32-битное целое без знака.
Например, при инициализации процесса:
var
threadHandle: HWND;
...
threadHandle := GetCurrentThread();
if not SetThreadPriority(threadHandle, THREAD_PRIORITY_ABOVE_NORMAL) then
ShowMessage('Не удалось установить повышенный приоритет');
Отвечает: Злоумышленник
Здравствуйте, SUPcOZA!
...
SetThreadPriority(CommThread,8);//выставляете приоритет, какой надо
CommThread - хэндл потока
Приложение:
Ответ отправил: Злоумышленник (статус: 9-ый класс)
Ответ отправлен: 07.06.2006, 00:43
Отвечает: Маренич Владимир
Здравствуйте, SUPcOZA!
Есть такой класс TThread, в котором есть соотв. свойство. А для того чтобы основной поток не тормозил, то нужно правильно настроить работу потока с высоким приоритетом. Я обычно в теле потока в не критических местах ставлю Sleep(1). Это заставляет операционку "затормозить" этот поток и дать управление другим потокам. Примерно выглядит так:
begin
while not Terminated do
begin
//...
//читаем данные с порта
Sleep(1);
//обработка полученных данных
Sleep(1);
//обработка полученных данных
Sleep(1);
//отправляем ответ в порт
Sleep(1);
//...
end;
Тогда критические участки (прием/получение данных) будут выполняться с наивысшим приоритетом, а в ходе обработки данных даем другим потокам "пробиться" к процессорному времени. Не забывайте правильно настроить порт (SetCommTimeouts) для таймаутов прийма/отправки данных. Пока будет операционка ожидать ввода/вывода другие потоки будут нормально работать.
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 07.06.2006, 14:48
Вопрос № 45.344
Добрый день, уважаемые! Подскажите как преобразовть путь из
'c:aaabbcccfilename' в 'c:aaa...filename', если по длине эта строка не влазит в Edit, а также как отображать этот путь в хинте?
Отвечает: Проходящий Мимо
Здравствуйте, Савенко Вадим Иванович!
В приложении функция Mince(PathToMince: string; InSpace: Integer): string; преобразует полный путь для отображения по принцыпу:
"C:Program FilesDelphiDDropTargetDemomain.pas" в
"C:Program Files..main.pas", где
PathToMince - полный путь;
InSpace - количество символов преобразованого пути.
Для отображения Hint нужно обязательно выставить в родительськой форме свойство Form1.ShowHint := true;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
//отображаем обрезаный путь
Edit1.Text := Mince(OpenDialog1.FileName, 40);
//в хинте отобоажаем полный путь
Edit1.Hint := OpenDialog1.FileName;
end;
end;
Удачи!
Приложение:
--------- Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 5-ый класс)
Ответ отправлен: 06.06.2006, 10:26
Отвечает: Баззи Баззукин
Здравствуйте, Савенко Вадим Иванович!
начиная с Delphi 7 можно использовать функцию MinimizeName. Unit Filectrl.
Приложение:
Ответ отправил: Баззи Баззукин (статус: 2-ой класс)
Ответ отправлен: 06.06.2006, 11:04
Вопрос № 45.363
Как переименовать папку программно?
и еще нужен компонент:
1) ему можно было бы задать корневую папку, выше которой подняться нельзя;
2) файлы и папки оформлены как дерево;
3) показывать нужно название файла или папки и его время модификации.
4) прикрепить контекстное меню для работы с выбранным файлом или папкой.
Отправлен: 06.06.2006, 11:55
Вопрос задал: Vitalya (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Баззи Баззукин
Здравствуйте, Vitalya!
Папки и файлы успешно переименовывает функция RenameFile. Если успешно, возвращает True
Ответ отправил: Баззи Баззукин (статус: 2-ой класс)
Ответ отправлен: 06.06.2006, 12:11
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Vitalya!
1) у TShellTreeView есть свойство Root. Можно редактировать как на этапе разработки, так и после компиляции. Однако, чтобы еще и нельзя было подняться выше - это надо подумать. Но какую-то идейку я вам подкинул =)
2) TShellTreeView на закладке Samples. Полный путь к выбранному файлу или папке получается по свойству Path. Также там есть SelectedFolder и еще куча полезных свойств.
3) Прикрутите к этому небольшую панельку с Label-ами а данные читайте с помощью, например, FindFirst через TSearchRec.
4) Свойство PopupMenu есть у данного компонента - если вы это имеете ввиду. Я с ним никогда не работал, так что не знаю :-,
Ответ отправил: Сухомлин Кирилл Владимирович (статус: 8-ой класс)
Ответ отправлен: 06.06.2006, 15:21 Оценка за ответ: 4
Вопрос № 45.368
Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, как "пройтись" по всем элементам формы и проверить, обладает ли элемент определенным свойством, например width? Заранее благодарен!
Отвечает: Проходящий Мимо
Здравствуйте, Андрющенко Вячеслав Васильевич!
В этом вам поможет приведенный ниже код, только в раздел uses нужно добавить модуль TypInfo:
procedure TForm1.Button1Click(Sender: TObject);
var
PropInfo: PPropInfo;
i:byte;
begin
//проходим в цикле все компоненты
for i:=0 to Form1.ComponentCount-1 do
begin
PropInfo := GetPropInfo(Form1.Components[i].ClassInfo, 'Width');
//вот здесь и проверяется, есть ли свойство
if PropInfo <> nil then
Application.MessageBox(PChar('Свойство ''Width'' есть в компоненте '+
Form1.Components[i].Name), '', 0)
end;
end;
Удачи!
--------- Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 5-ый класс)
Ответ отправлен: 06.06.2006, 13:18 Оценка за ответ: 5
Вопрос № 45.369
Здравствуйте, уважаемые эксперты!
Можно ли преобразовать символы из Caption, Richedit, combobox в верхний и нижний индексы? И если такое возможно, то как это сделать во время выполнения программы?
Спасибо.
Отвечает: Баззи Баззукин
Здравствуйте, Граур Василий Олегович!
В Richedit можно.
смотри пример.
SCF_ALL применить ко всему тексту
SCF_SELECTION применить к веделенному тексту
SCF_WORD | SCF_SELECTION применить к выделенным словам
Проверено на Delphi7.
Приложение:
Ответ отправил: Баззи Баззукин (статус: 2-ой класс)
Ответ отправлен: 06.06.2006, 13:35
Отвечает: Маренич Владимир
Здравствуйте, Граур Василий Олегович!
Можно использовать функции преобразования в верхний и нижний регистр:
AnsiUpperCase(S: string): string
AnsiLowerCase(S: string): string
к соотв. свойствам.
Например для TLabel это будет выглядеть примерно так:
Label1.Caption:=AnsiUpperCase(Label1.Caption);
для TComboBox:
ComboBox1.Lines.Text:=AnsiUpperCase(ComboBox1.Lines.Text);
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 07.06.2006, 14:37 Оценка за ответ: 5
Вопрос № 45.378
Здравствуйте, уважаемые эксперты.
вопрос такой:можно в делфи сделать так, чтобы по нажатию какой-нибудь комбинации клавиш у меня вставлялись например строки procedure
begin
end
чтобы не приходилось каждый раз это набирать
или чтобы сразу begin с end.
Спасибо за ответы и помощь
Отвечает: Проходящий Мимо
Здравствуйте, Lichkaty Alexander!
Конечно можно!
В Delphi7 нужно выбрать пункт меню ToolsEditorOptions, закладку Source Options, нажать кнопку Edit Code Templates. В форме нужно нажать кнопку Add. В поле Shortcut Name ввести уникальную последовательность букв, которые будут вызывать Ваш шаблон, например для procedure begin end это может быть 'pbe' или что-то по Вашему вкусу. В поле Code вводите сам шаблон:
procedure
begin
|
end
Знак '|' обозначает куда IDE поставит курсор после выполнения шаблона.
В редакторе для вызова шаблона нужно набрать его Shortcut и нажать комбинацию Ctrl+j
P.S. Для Вашего случая уже имеется стандартный шаблон procedure
--------- Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 5-ый класс)
Ответ отправлен: 06.06.2006, 14:04 Оценка за ответ: 5 Комментарий оценки: то, что мне нужно было. Спасибо
Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Lichkaty Alexander!
Создаете название шаблона, описание.
Пишете нужный код для вставки.
Когда в редакторе напишете название шаблона - нажмите Ctrl+J - вставится нужный код, или просто Ctrl+J и выбирайте из списка нужный Вам код.
Удачи!
--------- Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 06.06.2006, 14:16 Оценка за ответ: 5
Отвечает: Lexus
Здравствуйте, Lichkaty Alexander!
Можете попробовать следующим образом:
Объявляете в начале программы процедуру или функцию, например:
private
procedure proc1(s:string);
И нажимаете Ctrl+Shift+C и делфи сама вставит следующий код в программе:
procedure Tform1.proc1(s:string);
begin
end;
Можно сразу писать код, очень удобно и даже лучше чем вы просили!
--------- "Все что вы скажете будет использовано против вас в суде..." (УК РФ)
Ответ отправил: Lexus (статус: 3-ий класс)
Ответ отправлен: 06.06.2006, 16:16
Вопрос № 45.407
Спасибо за ответ на предыдущий вопрос. есть еще один.
Как можно клавишами переключаться между юнитами проекта, которые в закладках?
Спасибо за ответы
Отвечает: Ерёмин Андрей
Здравствуйте, Lichkaty Alexander!
С помощью Ctrl+Tab и Ctrl+Shift+Tab.
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Знаю, что при нажатии Сtrl+F12 появляется окно со всеми юнитами, а при нажатии Shift+F12 - окно со всеми формами проекта
Ответ отправил: Serg_6667 (статус: 2-ой класс)
Ответ отправлен: 06.06.2006, 17:59
Вопрос № 45.464
Здраствуйте, екперты. Хочу попробовать создать firewall на Delphi
но не знаю с чего начать?
Отправлен: 07.06.2006, 02:54
Вопрос задал: Pm_pilot (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: sir henry
Здравствуйте, Pm_pilot!
Перво-наперво необходимо начать с изучения стека протоколов TCP/IP. Потом с изучения службы шлюза alg.exe, который является посредником между приложением и брандмауэром в Windows.
Ну и выучить наизусть всю MSDN. :)
Зайдите на http://www.sourceforge.net, введите там в строке поиска firewall и внимательно изучите все проекты с исходным кодом по этой тематике. Конечно на Delphi файрволов там нет, но не вызовет абсолютно никакого затруднения перевод кода с Си на Дельфи, если Вы сможете ухватить идею. Тем более все WinAPI функции есть в Дельфи, только необходимо будет преобразовать типы данных параметров этих функций.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 07.06.2006, 05:37 Оценка за ответ: 4 Комментарий оценки: Спасибо. Ну с MSDN єто ясно, а про www.sourceforge.net я не подумал, а переделывать код с Си в Паскаль уже приходилось.
Вопрос № 45.465
Уважаемые эксперты, подскажите, пожалуйста, как расположить текст по параболе? Заранее благодарен!
Отвечает: Евгения
Здравствуйте, Андрющенко Вячеслав Васильевич!
стандартными функциями можно создать шрифт под каким-либо углом, поэтому, чтобы вывести текст по кривой, нужно посимвольно выводить его, расчитывая координаты и угол текста (найти угол между горизонтом и касательной к параболе в данной точке)...
ниже приведена программа, которая выводит текст посимвольно под разным углом... формулы расчета координат и угла наклона не считала... можете сами попридумывать, или у математиков спросите...
unit Unit2;
type
TForm2 = class(TForm)
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure printing(s: string; x1,y1,a1: integer);
var LF: TLogFont;
Fnt: HFont;
begin
FillChar(LF, SizeOf(LF), 0);
with LF do
begin
lfHeight := 20;
lfEscapement := a1;
StrPCopy(lfFaceName, 'Courier New Cyr');
end;
with Form2.Canvas do
begin
Fnt := CreateFontIndirect(LF);
Font.Handle := Fnt;
TextOut(x1, y1, s);
DeleteObject(Fnt);
end;
end;
procedure TForm2.FormClick(Sender: TObject);
var
i,x1,y1,a1: Integer;
Text: string;
begin
text:='мама мыла раму... рама мыла маму...';
for i:=1 to length(text) do begin
y1:=i*i; //задаете координаты по у тут
x1:=i*10; //задаете координаты по х тут
a1:=-i*30; //задаете угол наклона тут
Printing(text[i],x1,y1,a1);
end;
end;
end.
по функции CreateFontIndirect почитайте тут:
http://it.kgsu.ru/Delphi_6/dlph0042.html
и вообще я это отсюда взяла и немного переделала...
Счастливо!
--------- Я не волшебник, я только учусь... А разве кто-то обещал, что будет легко?
Ответ отправила: Евгения (статус: 6-ой класс)
Ответ отправлен: 07.06.2006, 08:53
Вопрос № 45.470
Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, литературу по DLL в интеренете. Мне нужно не просто "что такое и зачем", а как можно подробнее, до мелочей. Заранее очень благодарен!
Посмотрите эту ссылку:
http://delphiworld.narod.ru/base/uses_dll.html
Воообще советую заходить по чаще на http://delphiworld.narod.ru - много полезного найдете!!!
Удачи!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаються события на земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Студент)
Ответ отправлен: 07.06.2006, 10:47
Вопрос № 45.474
Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, как на форме расположить тект по параболе?
Отвечает: Баззи Баззукин
Здравствуйте, Андрющенко Вячеслав Васильевич!
Вам для этого надо создать шрифт. Потребуется структура Logfont и API функция CreateFontIndirect. В структуре LogFont можно указать размер шрифта, угол. Получившийся шрифт примените на канвас формы. Это не работает в Win 9x.
Ответ отправил: Баззи Баззукин (статус: 2-ой класс)
Ответ отправлен: 07.06.2006, 09:46