Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 3

Модерирует : ShIvADeSt

ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

yuish

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
В статик элементе  - не знаю, но с помощью компонента TWebBrowser у меня сделано было так:
 
procedure SetRunText(Web: TWebBrowser; Text: ansistring);
var txtr:ansistring;
begin
 txtr:='about:<body topmargin="0" leftmargin="0" marginwidth="0"'+
  'rightmargin="0" bottommargin="0" scroll="no"> <marquee height="'+
  IntToStr(Web.height-5)+'" width="'+IntToStr(Web. width)+
  '"bgcolor="white" scrollamount="3"><small>';
  txtr:=txtr+text;
  txtr:=txtr+'</small></marquee></body>';
  Web.Navigate(txtr);
end;
 
запуск: SetRunText(WebBrowser1,'бла-бла-бла');
 
единственно что текст нельзя использовать длиннее 255 символов

Всего записей: 218 | Зарегистр. 10-02-2003 | Отправлено: 10:17 31-08-2007
lavren



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
antonn2
 

Цитата:
туда записи может не быть

 
А может и бить! Надо из условий задачи смотреть, может нужно чтобы под всеми пользователями запускалось?

Всего записей: 545 | Зарегистр. 29-05-2007 | Отправлено: 10:24 31-08-2007
antonn2

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lavren
не вижу там кода проверки, скорее код "на вылет"

Код:
var
reg: tregistry;
begin
reg := tregistry.create;
try
reg.rootkey := hkey_local_machine;
reg.lazywrite := false;
reg.openkey('softwaremicrosoftwindowscurrentversionrun',false);
if not delete then reg.writestring(strname, application.exename)
else reg.deletevalue(strname);
reg.closekey;
finaly
reg.free;
end;  

Всего записей: 97 | Зарегистр. 13-11-2006 | Отправлено: 21:26 31-08-2007
SiberianGRemlin



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что-то ничего не пойму...
Не работает: WinExec(PAnsiChar('excel.exe "'+SaveDialog1.FileName+'"'),1);
Но работают:
WinExec(PAnsiChar('notepad.exe "'+SaveDialog1.FileName+'"'),1);
WinExec(PAnsiChar('mspaint.exe "'+SaveDialog1.FileName+'"'),1);
 
Подскажите, пожалуйста, в чём загвостка? И подскажите, пожалуйста, как узнать установлен ли Excel в пакете MS Office?

Всего записей: 101 | Зарегистр. 04-12-2003 | Отправлено: 14:24 01-09-2007
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SiberianGRemlin
загвоздка не в том, установлен ли Excel - а в том, что Вы не указываете к нему путь!
mspain.exe и notepad.exe лежать в самой Windows (в XP - в папке system32)
Если вы в комаднной строке наберёте команду path - увидите пути, по которым Windows ищет exe файл, когда Вы пытаетесь его запустить...
значит, Вы должны указать полный путь к Вашему excel.exe
Стандартно, Office ставится в папку "C:\Program Files\Microsoft Office\"
дальше, в зависимости от версии Excel. Для MS Office 2003 полный путь будет такой:
"C:\Program Files\Microsoft Office\OFFICE11\excel.exe".
Но пользователь при установке может указать ЛЮБУЮ директорию, куда поставить Office!

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 14:45 01-09-2007
AntonVA1



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SiberianGRemlin  
А ты попробуй их из командной строки позапускать (выполнить- cmd)
Все дело в том, что notepad.exe и mspaint.exe лежат в каталоге, прописанном в PATH, а excel.exe- в своей папке, т.е. нужно прописывать путь
 
Добавлено:
SERGE_BLIZNUK
Ха! меня опередили    

Всего записей: 475 | Зарегистр. 17-09-2003 | Отправлено: 14:50 01-09-2007 | Исправлено: AntonVA1, 15:19 01-09-2007
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
проверить наличие установленного Excel на машине пользователя проще всего через OLE.
И, кстати, открыть ваш файл в Excel - так же!
смотри пример открытия файла [?]
Но, если, по каким-то причинам очень надо или хочется воспользоваться WinExec - то можно попытаться считать путь из реестра:
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Excel\InstallRoot]
"Path"="C:\\Program Files\\Microsoft Office\\OFFICE11\\"

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 15:06 01-09-2007
SiberianGRemlin



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Excel запускается из любой папки и открывает файл, путь к которому переданнаётся Excel'у как параметр. Почему WinExec не может найти Excel мне непонятно. Если написать в WinExec полный путь к Excel, то он запустится. Обязательно лесть в реестр, чтобы путь узнать... может можно как-то использовать переменные среды?
 
P.S.: Мы находимся в ветке программирования, а вы мне рассказываете, что пользователь может выбрать любую папку для установки ПО. =)))))

Всего записей: 101 | Зарегистр. 04-12-2003 | Отправлено: 15:26 01-09-2007
AntonVA1



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ладно, читаем справку по WinExec: Подробнее... [?]  
 
Это подтверждает то, что я писал, и дает понять тебе почему у тебя не работает.
Что бы сделать то что ты хочешь, нужно прописать в WinExec не excel а команду start с файлом, который тебе нужно открыть. Винда запустит ассоциированную с этим расширением программой. Это насколько я помню, не смог найти рабочий вариант.
 
Кстати в справке написано еще это:

Цитата:
 
The WinExec function runs the specified application.  
 
This function is provided for compatibility with earlier versions of Windows. For Win32-based applications, use the CreateProcess function.  
 
 
 
Добавлено:
Еще я делал так:
procedure TSplashForm.lblVersionClick(Sender: TObject);
const
  Mail = 'mailto:111@inbox.ru';
begin
  ShellExecute(Handle, 'open', Mail, nil, nil, SW_SHOW);
end;
 
Открывает почтовик по умолчанию

Всего записей: 475 | Зарегистр. 17-09-2003 | Отправлено: 16:49 01-09-2007
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здраствуйте. Подскажите сайты, где можно нарыть исходники для просмотра таблицы импорта исполняемых файлов. Требуется отображать данные через SysListView32 на ВинАпи. Хотелосьбы также глянуть на исходни для просмотра Делэй Импорта.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 21:53 01-09-2007 | Исправлено: Maks150988, 21:55 01-09-2007
xy



ХУдератор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, есть ли в делфи родная функция или какая-нить проверенная сторонняя библиотечка, которая бы работала как php-функция
htmlentities() http://www.php.net/manual/ru/function.htmlentities.php
 
т.е. брала строку и заменяла в ней все спецсимволы на спецтеги хтмл (сущности:)
:-?

----------
Счастливые мысли приводят к счастливой клеточной биохимии

Всего записей: 10530 | Зарегистр. 28-05-2003 | Отправлено: 17:56 02-09-2007
Arvur



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
xy
В source\Internet\HTTPApp.pas (для D7) есть функции HTMLEncode/HTMLDecode
Оно?

Всего записей: 2111 | Зарегистр. 18-01-2002 | Отправлено: 18:16 02-09-2007
xy



ХУдератор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arvur
как упрощенный вариант подходит, только его дополнить придется :)
спасибо

----------
Счастливые мысли приводят к счастливой клеточной биохимии

Всего записей: 10530 | Зарегистр. 28-05-2003 | Отправлено: 18:25 02-09-2007
lavren



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Процедура ТBitmap.Canvas.TextOut(Х,У,Text) выводит текст от точки Х,У в право (выравнивает по левому краю).
А как выводить текст слева от этой точки (выравнять по правому краю)?
Изначально в код нельзя внести поправку (dx,dy), так как не известна ширина текста (ни набор символов, ни шрифт)!

Всего записей: 545 | Зарегистр. 29-05-2007 | Отправлено: 15:42 03-09-2007 | Исправлено: lavren, 16:25 03-09-2007
skinash



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lavren
Шрифт у Canvas известен: Canvas.Font
Высота и ширина шрифта тоже:


Код:
 
var
  FText: string;
...
W := Pic.Canvas.TextWidth(FText);
H := Pic.Canvas.TextHeight(FText);
 

Что тебе ещё надо?

Всего записей: 145 | Зарегистр. 21-09-2006 | Отправлено: 16:40 03-09-2007
lavren



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
skinash
Шрифт часто меняю и на других машинах могут бить под одним именем разные шрифты!
Мне только что посоветовали использовать DrawText с флагом DT_RIGHT.

Всего записей: 545 | Зарегистр. 29-05-2007 | Отправлено: 17:01 03-09-2007
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lavren
Можно и DT_RIGHT, а можно как написал skinash через Canvas.TextWidth:
bmp.Canvas.TextOut(x - bmp.Canvas.TextWidth(str), y, str)
Так как это выполняется на конечной машине, то учтется ширина текста в том шрифте, что на ней установлен.
Что больше по душе, тем и пользуйся. Работать будет наверняка одинаково

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 17:59 03-09-2007
lavren



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
skinash
RomanTim
А кто быстрее работает (рисует) DrawText или TextOut?

Всего записей: 545 | Зарегистр. 29-05-2007 | Отправлено: 18:38 03-09-2007
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lavren
TextOut рисует через виндовую ExtTextOut:
Код:
procedure TCanvas.TextOut(X, Y: Integer; const Text: String);
begin
  Changing;
  RequiredState([csHandleValid, csFontValid, csBrushValid]);
  if CanvasOrientation = coRightToLeft then Inc(X, TextWidth(Text) + 1);
  Windows.ExtTextOut(FHandle, X, Y, FTextFlags, nil, PChar(Text),
   Length(Text), nil);
  MoveTo(X + TextWidth(Text), Y);
  Changed;
end;

А внутри виндовса все это скорее всего через один код реализуется, так что вряд ли ты сможешь найти какую-то принципиальную разницу по скорости... Хотя чтобы наверняка - попробуй сделать цикл с выводом текста и большим количеством итераций таким и таким способом и засеки время выполнения через GetTickCount

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 20:44 03-09-2007
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну так что никто не знает где взять исходный код? Или подскажите программерские сайты где все это делают.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 21:18 03-09-2007
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 3
ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru