Вопрос № 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 ( или векторной-что оптимальнее) картинки на форму, причём желательно с масштабированием её с учётом параметров самой формы, надеюсь, здесь есть люди, которые мне помогут :))
Отвечает: 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 (статус: 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.
Ответ отправил: 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];
Ответ отправил: Сычёв Павел Алексеевич (статус: 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 Комментарий оценки: Большое спасибо! Все понятно, все получилось!
1. Для преобразования строки в тип PAnsiChar используйте функцию PChar PChar(Extractfilepath(application.exename)+'имя папки/'+inttostr(введенное значение)+'имя файла'))
2. Правильно указывать путь обратным слешем - ''''
--------- Если у человека золотые руки, неважно откуда они растут...
Ответ отправил: Remnew Anatoliy (статус: 1-ый класс)
Ответ отправлен: 02.01.2008, 10:17 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: Сычёв Павел Алексеевич !!! Здравствуйте, RegolusX! String перевести в PAnsiChar - функция PChar(s:string):PAnsiChar А путь пишеться через /, если это html адрес, а через - локальный
Ответ отправил: Сычёв Павел Алексеевич (статус: 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 Комментарий оценки: Спасибо! Очень ценный совет!