Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 1027
от 07.01.2008, 09:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 431, Экспертов: 59
В номере:Вопросов: 4, Ответов: 17

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 116551: не получается написать программу для вывода jpg ( или векторной-что оптимальнее) картинки на форму, причём желательно с масштабированием её с учётом параметров самой формы, надеюсь, здесь есть люди, которые мне помогут :))...
Вопрос № 116556: Поздравляю всех с Новым 2008 годом! Желаю всем крепкого здоровья и исполнения всех желаний в новом году! Уважаемые эксперты! У меня такой вопрос. Я использую treeview. При нажатии какого-нибудь пункта, запускаю программу на выполнение с помощью w...
Вопрос № 116586: Здравствуйте! Скажите, пожалуйста, что нужно делать мне в строчке 19. Это задачка на поиск символа в строке. Компилятор выдает ошибку - [Error] Unit1.pas(46): Incompatible types: 'Char' and 'TCaption'. Что нужно сделать, подскажите, пожалуйста. З...
Вопрос № 116590: Здравствуйте, уважаемые эксперты! Мне необходимо программным путем скопировать файл. Функцией CopyFile воспользоваться не могу, поскольку путь к файлу необходимо прописывать в несколько этапов (Extractfilepath(application.exename)+'имя папки/'+inttos...

Вопрос № 116.551
не получается написать программу для вывода jpg ( или векторной-что оптимальнее) картинки на форму, причём желательно с масштабированием её с учётом параметров самой формы, надеюсь, здесь есть люди, которые мне помогут :))
Отправлен: 01.01.2008, 19:01
Вопрос задала: Надежда Сергеевна (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Remnew Anatoliy
Здравствуйте, Надежда Сергеевна!

Могу порекомендовать использовать библиотеку Graphics32, там есть компонент TImage32 делающий то что вам нужно. Могу помочь с написанием, но пока не знаю как это сделать правильно здесь на этом ресурсе. Обращайтесь в личку - там решим.
---------
Если у человека золотые руки, неважно откуда они растут...
Ответ отправил: Remnew Anatoliy (статус: 1-ый класс)
Ответ отправлен: 01.01.2008, 19:51
Оценка за ответ: 4
Комментарий оценки:
ну мне ж надо рисовать на форме :))))))

Отвечает: PavelGM
Здравствуйте, Надежда Сергеевна!

Вот для первого вопроса код, его можно в Paint формы воткнуть например или в Image.Canvas рисовать а тому сделать alClient

procedure TForm1.Button1Click(Sender: TObject);
var JP : TJPEGImage; MF : TMetaFile;
begin
if not FileExists(EFile.Text) then Exit;

if UpperCase(ExtractFileExt(EFile.Text)) = '.WMF' then begin
MF := TMetaFile.Create;
MF.LoadFromFile(EFile.Text);
Canvas.StretchDraw(ClientRect, MF);
MF.Free;
end else begin
JP := TJPEGImage.Create;
JP.LoadFromFile(EFile.Text);
Canvas.StretchDraw(ClientRect, JP);
JP.Free;
end;
end;

На вопрос из мини-форума - уберите у формы флажок в BorderIcons - biMaximize := False.
Ответ отправил: PavelGM (статус: Студент)
Ответ отправлен: 02.01.2008, 17:40
Оценка за ответ: 4
Комментарий оценки:
ещё не попробывала, но понятно блин )))

Отвечает: Genia007
Здравствуйте, Надежда Сергеевна! Немножко намудренно, но у меня работает отлично. Я только не стал растягивать маленкую картинку до размеров формы, из-за её плохого качества(квадратики).

Приложение:

Ответ отправил: Genia007 (статус: 3-ий класс)
Ответ отправлен: 05.01.2008, 15:02


Вопрос № 116.556
Поздравляю всех с Новым 2008 годом! Желаю всем крепкого здоровья и исполнения всех желаний в новом году!
Уважаемые эксперты! У меня такой вопрос. Я использую treeview. При нажатии какого-нибудь пункта, запускаю программу на выполнение с помощью winexec. Проблема состоит в том, что первая программа теряет фокус и не видно какой пункт treeview был выбран. Есть ли по данному вопросу какие-нибудь решения?
Отправлен: 01.01.2008, 20:11
Вопрос задал: Esi (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Remnew Anatoliy
Здравствуйте, Esi!

Попробуйте после вызова winexec вернуть фокус своей программе, а точнее форме с которой идет вызов, например Form1.SetFocus.
---------
Если у человека золотые руки, неважно откуда они растут...
Ответ отправил: Remnew Anatoliy (статус: 1-ый класс)
Ответ отправлен: 01.01.2008, 20:16
Оценка за ответ: 4
Комментарий оценки:
Спасибо за быстрый ответ! К сожалению, не получилось. Потому что первая программа, полностью перестает быть активным. Только во второй программе можно менять фокус.

Отвечает: Coupler
Здравствуйте, Esi!
Попробуйте так:

winexec ('notepad.exe',SW_SHOWNOACTIVATE); //окно запускаемой программы не активно
Form1.SetZOrder(true);//т.к. фокус остался у Form1, то она должна быть поверх всех окон, поэтому восстанавливаем ее положение
Ответ отправил: Coupler (статус: Практикант)
Ответ отправлен: 02.01.2008, 06:50
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо! Попробую.

Отвечает: Denisss

Здравствуйте, Esi!

Сделать форму первой программы активной можно с помощью функции SetForegroundWindow.

Пример:
SetForegroundWindow(Form1.Handle);

Удачи!
---------
Будь осторожен, когда молишься ради чего-то, потому что можешь это получить...
Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
----
Ответ отправлен: 02.01.2008, 12:29
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо! Попробую немного попозже.


Вопрос № 116.586
Здравствуйте!
Скажите, пожалуйста, что нужно делать мне в строчке 19. Это задачка на поиск символа в строке. Компилятор выдает ошибку - [Error] Unit1.pas(46): Incompatible types: 'Char' and 'TCaption'. Что нужно сделать, подскажите, пожалуйста. Заранее спасибо!!!:-)
1. Function ChFirst (Str:string; Ch:char):integer;
2. Var
3. i:integer;
4. Begin
5. Result:=0;
6. For i:=1 to Length(Str) do
7. If Str[i]=Ch then
8. begin
9. Result:=i;
10. break;
11. end;
12. end;
13. procedure TForm1.Button1Click(Sender: TObject);
14. Var
15. Str:string;
16. Ch:char;
17. Begin
18. Str:=Edit1.Text;
19. Ch:=Edit2.Text;
20. Label1.Caption:=IntToStr(ChFirst(Str,Ch));
21. end;
22. end.
Отправлен: 02.01.2008, 01:13
Вопрос задала: Krista (статус: Посетитель)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Selya
!!!
Здравствуйте, Krista!
Попробуй так:
19. Ch:=PChar(Edit2.Text);

При ответе рекомендую Вам проверять его!!!
Ваш ответ даеть схожую ошибку: Incompatible types: Char and PAnsiChar

Верный ответ смотрите ниже!

-----
∙ Отредактировал: Gh0stik (Академик)
∙ Дата редактирования: 02.01.2008, 01:41
Ответ отправил: Selya (статус: 3-ий класс)
Ответ отправлен: 02.01.2008, 01:18

Отвечает: Gh0stik
Здравствуйте, Krista!

Дело в том, что по сути TCaption = string; следовательно Вы переменной символьного типа пытаетесь присвоить значение строкового типа - вот и получаетет не совместимость типов (Incompatible types: 'Char' and 'TCaption').

Поэтому если у Вас точно в поле Edit2 вводится один символ, то можно сделать такой "ход конем":
Ch:=Edit2.Text[1];

В простивном случае перестраивать функцию Function ChFirst (Str:string; Ch:char):integer;, а соответственно менять тип переменной Ch с char на string.

Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Академик)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
WWW: http://gh0stik.rusfaq.ru/
ICQ: 289363162
----
Ответ отправлен: 02.01.2008, 01:32
Оценка за ответ: 5
Комментарий оценки:
Вот спасибочки Вам огромное!:-)
С новым годом Вас!!!:-)
И Вам удачи!:-)

Отвечает: Ranmasao
Здравствуйте, Krista!

типу Char нельзя присваивать значение типа String, а тип TCaption унаследован как раз от String.
Ответ отправил: Ranmasao (статус: 1-ый класс)
Ответ отправлен: 02.01.2008, 01:37

Отвечает: Esi
!!!
Здравствуйте, Krista!

Думаю, что в 19 строке нужно Ch:=pchar(Edit2.text). Хотя не уверен.
Считаю, что проще воспользоваться функцией POS('искомая строка', 'исходная строка').
В вашем примере в procedure TForm1.Button1Click нужно написать одну строку:
Label1.caption:=inttostr(pos(edit2.text,edit1.text));
//Если edit2.text не содержится в edit1.text, то label1.caption будет равен=0.

Ошибка таже, что и в ответе эксперта Selya!
Прежде чем отвечать, рекомендую читать предыдущие ответы!!!

-----
∙ Отредактировал: Gh0stik (Академик)
∙ Дата редактирования: 02.01.2008, 01:56
Ответ отправил: Esi (статус: 2-ой класс)
Ответ отправлен: 02.01.2008, 01:44
Оценка за ответ: 5

Отвечает: Remnew Anatoliy
Здравствуйте, Krista!

Объявите переменную Сh как string и все заработает: тип сhar подразумевает наличие всего одного символа, в то время как TCaption подразумевает их несколько. Это во первых. Во вторых используйте функцию pos('что ищем','где ищем'), которая вернет вам номер символа с которого начинается искомая строка. Т.е. вашу программу можно переделать так:

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:=IntToStr(pos(Edit2.Text,Edit1.Text))
end;


---------
Если у человека золотые руки, неважно откуда они растут...
Ответ отправил: Remnew Anatoliy (статус: 1-ый класс)
Ответ отправлен: 02.01.2008, 10:15
Оценка за ответ: 5

Отвечает: Сычёв Павел Алексеевич
!!!
Здравствуйте, Krista!
Замените в 19 строке
19. Ch:=Edit2.Text;
на
19. Ch:=Edit2.Text[0];

При данном подходе Вы получите такую ошибку: "Element 0 inaccessible - use Length or SetLength"
Проще говоря в элементе с индексом 0 не хранится первый элемент, а хранится длина строки!
Правильное решение читайте выше!

-----
∙ Отредактировал: Gh0stik (Академик)
∙ Дата редактирования: 02.01.2008, 23:13
Ответ отправил: Сычёв Павел Алексеевич (статус: 2-ой класс)
Ответ отправлен: 02.01.2008, 22:40
Оценка за ответ: 5

Отвечает: Genia007
Здравствуйте, Krista!
Предлагаю модифицировать ваш код по своему работает без проблем.
В компоненте edit2, свойство MaxLength установить в 1 и избавиться от переменной типа char

Приложение:

Ответ отправил: Genia007 (статус: 3-ий класс)
Ответ отправлен: 05.01.2008, 15:03


Вопрос № 116.590
Здравствуйте, уважаемые эксперты! Мне необходимо программным путем скопировать файл. Функцией CopyFile воспользоваться не могу, поскольку путь к файлу необходимо прописывать в несколько этапов (Extractfilepath(application.exename)+'имя папки/'+inttostr(введенное значение)+'имя файла'). Так вот, что подскажете? Ведь в CopyFile надо использовать PAnsiChar, а получается String. В общем, жду ваших советов.
И еще. Как все-таки правильно указывать путь программно в Delphi7: через "/" или "".
Заранее благодарен!
Отправлен: 02.01.2008, 02:36
Вопрос задал: RegolusX (статус: 1-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Gh0stik
Здравствуйте, RegolusX!

Для перехода от типа String к PAnsiChar используйте функцию PChar() и все проблемы я думаю на этом закончатся :).
По поводу какправильно писать пути, то могу сказать что вернее конечно использовать бэкслеш ("") поскольку именное его используют в путях все приложения windows (достаточно запустить "Проводник" и посмотреть...).

Также советую Вам при решении подобны задач разбивать ее на более легкие, в качестве примера привожу код программы которая копирует файл из одной папки old в другую new, при условии что такая папка (new) существует (папка new должна располагаться в каталоге в котором лежит исполняемый файл).

procedure TForm1.Button1Click(Sender: TObject);
var exepath,oldfile,newfile,dirname,fullpath:string;
    z:integer;
begin
  z:=10; //введенное значение
  e xepath:=ExtractFilePath(Application.ExeName);
  dirname:='new';
  oldfile:='oldfile.pas';
  newfile:='newfile.txt';
  //формируем путь к новому файлу
  fullpath:=Format('%s%s\%d%s',[exepath,dirname,z,flname]);
  CopyFile(PChar('c:old'+oldfile),PChar(fullpath),false);
end;


На всякий пожарный вот ссылочка на описание функции Format, ее я Вам рекомендую использовать когда необходимо в строку записать несколько переменных различного типа.

Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Академик)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
WWW: http://gh0stik.rusfaq.ru/
ICQ: 289363162
----
Ответ отправлен: 02.01.2008, 04:01
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо! Все понятно, все получилось!

Отвечает: Remnew Anatoliy
!!!
Здравствуйте, RegolusX!

1. Для преобразования строки в тип PAnsiChar используйте функцию PChar
PChar(Extractfilepath(application.exename)+'имя папки/'+inttostr(введенное значение)+'имя файла'))

2. Правильно указывать путь обратным слешем - ''''

Повторный ответ! Внимательно прочитайте правила Портала.
-----
∙ Отредактировал: Gh0stik (Академик)
∙ Дата редактирования: 02.01.2008, 12:48

---------
Если у человека золотые руки, неважно откуда они растут...
Ответ отправил: Remnew Anatoliy (статус: 1-ый класс)
Ответ отправлен: 02.01.2008, 10:17
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

Отвечает: Сычёв Павел Алексеевич
!!!
Здравствуйте, RegolusX!
String перевести в PAnsiChar - функция PChar(s:string):PAnsiChar
А путь пишеться через /, если это html адрес, а через - локальный

Повторный ответ!
-----
∙ Отредактировал: Gh0stik (Академик)
∙ Дата редактирования: 02.01.2008, 23:16
Ответ отправил: Сычёв Павел Алексеевич (статус: 2-ой класс)
Ответ отправлен: 02.01.2008, 22:42
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

Отвечает: Genia007
Здравствуйте, RegolusX!
Всё просто copyfile(pchar(Extractfilepath(application.exename)+'имя папки/'+inttostr(введенное значение)+'имя файла'),pchar('Новое имя файла),true);
Либо так, да ещё и с оставшимся временем копирования

Приложение:

Ответ отправил: Genia007 (статус: 3-ий класс)
Ответ отправлен: 05.01.2008, 15:04
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Очень ценный совет!


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.69 от 06.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное