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

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


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

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

Выпуск № 428
от 30.03.2006, 03:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 293, Экспертов: 73
В номере:Вопросов: 8, Ответов: 21


Вопрос № 38375: Доброго времени суток, коллеги! У меня следующая задача: Есть текстовый файл в dos-кодировке, который, мало того, содержит псевдографику. Дак вот, данный файл нужно вывести на экран и принтер без потери псевдографики. Может кто-нибуд...
Вопрос № 38393: Здравствуйте! Есть рисунок с расширением *.jpg. Как программно перевести его в рисунок с расшмрением *.bmp и изменить его размер, чтобы он умещался на форме нужного мне размера?...
Вопрос № 38403: Хочу использовать TEdit с прозрачным фоном или одним цветом с родителем(в данном случае TTabSheet). Кладу на страницу PageControl\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'а TEdit(ну вообщето TLabeledEdit, но в данном сл...
Вопрос № 38411: Здравствуйте, уважаемые эксперты! Кто подскажет новичку, как работать с такими окнами как MDIForm и MDIChild. Такие основные проблемки возникли: 1. Когда я ставлю у 2-й формы свойство MDIChild, то она при запуске программы автоматически запускается, ...
Вопрос № 38433: Здравствуйте Специ! В Дельфи есть основная форма при вызове из нее другой фомы сделать основную форму и все что на ней, не цветной, а оттенками серого??...
Вопрос № 38436: Доброго времени суток, Уважаемые эксперты!!! Как проверить есть ли в дисководе А: диск или нет. А то при использовании функции FindFirst и FindNext вылезает сообщение что мол в устройстве нет диска, а это с точки зрения интерфейс...
Вопрос № 38444: Здравствуйте, уважаемые эксперты! Как можно открыть JPEG, показать его на форме, и сохранить в формате BMP? Спасибо. ...
Вопрос № 38458: Здравствуйте уважаемые эксперты! У меня вопрос:мне надо ,чтобы прога (сделанная в делфи) открывала файл,как НЕХ-редактор,а то я чайник (тока начал изучать) и не могу догнать как это сотворить. И еще вопрос:делаю список файлов в List...

Вопрос № 38.375
Доброго времени суток, коллеги!

У меня следующая задача:
Есть текстовый файл в dos-кодировке, который, мало того, содержит псевдографику. Дак вот, данный файл нужно вывести на экран и принтер без потери псевдографики.
Может кто-нибудь уже сталкивался с такой задачей?
Пример такого файла можно скачать здесь (~2 Kb).

Среда: Delphi 7.

Заранее благодарен за ЛЮБУЮ помощь;)
Отправлен: 24.03.2006, 04:15
Вопрос задал: Лучников Ю.В. (статус: Профессионал)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, Лучников Ю.В.!
Если Вы хотите использовать Windows окно, то вывести на просмотр можно будет только текст, псевдографика потеряется, т.к. НИ В ОДНОМ windows-шрифте нет символов псевдографики. Надеюсь знаете почему. :)
Остается консоль. Ну а в консоли все прсто до безобразия. Объявляете файл как текстовый, открываете, считываете построчно (ReadLn), выводите на экран (WriteLn) и на принтер тоже построчно, для этого есть специальный модуль Printers.
Если никогда раньше не работали с консолью или не программировали в Турьо Паскале, напишите, я Вам помогу с реализацией.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 24.03.2006, 08:29

Отвечает: akaDemik
Здравствуйте, Лучников Ю.В.!
В принципе можно отобразить и в окне. Только придется установить шрифт "Terminal" для TMemo например. И потом уже в процессе работы программы выполнить Memo.Lines.LoadFromFile('Файл С Псевдографикой');
Если вставлять текст прямо в делфи при редактировании формы, то он почему-то искажается. В RichEdit к сожалению установка шрифта не помогает.
Удачи.
Ответ отправил: akaDemik (статус: 2-ой класс)
Ответ отправлен: 24.03.2006, 09:08

Отвечает: Zubex
Здравствуйте, Лучников Ю.В.!
Сталкивался и решил следующим образом:
берешь Memo, устанавливаешь
Font.Charset:=OEM_CHARSET;
Font.Name:='Courier New';
далее загружаешь из файла и наслаждаешься...
Одно но, если стоит манифест, то рисует кракозябры...
Почему? Так и не разобрался...
Удачи!
---------
Если не знаешь что сказать - лучше промолчи...
Ответ отправил: Zubex (статус: 6-ой класс)
Ответ отправлен: 24.03.2006, 10:26


Вопрос № 38.393
Здравствуйте!
Есть рисунок с расширением *.jpg. Как программно перевести его в рисунок с расшмрением *.bmp и изменить его размер, чтобы он умещался на форме нужного мне размера?
Отправлен: 24.03.2006, 09:20
Вопрос задал: KuchumHan (статус: 10-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Злоумышленник
Здравствуйте, KuchumHan!
Этот вопрос из разряда так называемых "часто задаваемых вопросов". В Интернете существует много сборников ответов на подобные вопросы, которые можно скачать для использования off-line. Лично у меня есть 7 таких сборников. Ссылки на некоторыеиз них есть на сайте нашего уважаемого эксперта Ерёмина Андрея:

http://www.delphi.int.ru/?name=documentation

Скачай все, пригодится.

//..умещался на форме нужного мне размера?
в инспекторе объектов stretch в true поставь, например, и proportional тоже

Приложение:

Ответ отправил: Злоумышленник (статус: 5-ый класс)
Ответ отправлен: 24.03.2006, 20:09

Отвечает: Николай Б.
Здравствуйте, KuchumHan!
Процедура перевода JPG --> BMP в приложении.
С размером - не знаю. Попробуй изменять размер Image'a (если в него грузишь)

Приложение:

Ответ отправил: Николай Б. (статус: 3-ий класс)
Ответ отправлен: 26.03.2006, 07:44


Вопрос № 38.403
Хочу использовать TEdit с прозрачным фоном или одним цветом с родителем(в данном случае TTabSheet).

Кладу на страницу PageControl\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'а TEdit(ну вообщето TLabeledEdit, но в данном случае никакой разницы) делаю ParentColor = true, Color = clBtnFace. В windows 9x все ок, а в XP (на форме лежит TXPManifest) фон TTabSheet\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'а более светлый а TEdit так и остался clBtnFace(т.е. серый). Не знаю как с этим боротся, прога должна нормально работать во всех ОС.

Думаю здесь есть два возможных пути решения:
1. Узнать при создании окна цвет родительского компонента и выставить в TEdit\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'е соответствующий. Но как узнать цвет TTabSheet\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'а? У PageControl\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'а есть канва, но там цвет более светлый!

2. Сделать фон TEdit\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'а прозрачным, но как?

Подскажите пожалуйста. Буду крайне признателен.
Отправлен: 24.03.2006, 11:21
Вопрос задал: AlexanderR (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лучников Ю.В.
Здравствуйте, AlexanderR!

Тут вижу один выход: создать свой нестандартный компонент ввода, наподобие TEdit.

Обычными средствами тут никак не сделать. Ибо когда к проекту линкуется XPManifest, за прорисовку всех стандартных Windows-элементов начинает отвечать сама Windows. В зависимости от типа элемента Windows выбирает нужный "кусок" скина ...
Кратко: внешний вид всех стандартных элементов предопределен.

Успехов!
Ответ отправил: Лучников Ю.В. (статус: Профессионал)
Россия, Киров
WWW: Чат Кировской молодежи
ICQ: 176308580
----
Ответ отправлен: 24.03.2006, 11:45

Отвечает: Cheater76
Здравствуйте, AlexanderR!
Может типа этого
LabeledEdit3.Color:=LabeledEdit3.Parent.Brush.Color;
Ответ отправил: Cheater76 (статус: 3-ий класс)
Ответ отправлен: 24.03.2006, 13:56


Вопрос № 38.411
Здравствуйте, уважаемые эксперты! Кто подскажет новичку, как работать с такими окнами как MDIForm и MDIChild. Такие основные проблемки возникли: 1. Когда я ставлю у 2-й формы свойство MDIChild, то она при запуске программы автоматически запускается, как это предотвратить; 2. Если MDIChild запущена, то когда я нажимаю закрыть, она просто сворачивается; 3. Как сделать в меню список открытых MDIChild окон, и чтобы их можно было выбирать из меню; 4. А может быть кто-нибудь в курсе, как их сворачивать не вниз, а допустим аккуратно складывать на какую-нибудь панельку???
Заранее спасибо за Ваши ответы.
Отправлен: 24.03.2006, 12:52
Вопрос задал: xXx (статус: 5-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Zubex
Здравствуйте, xXx!
1. В файле проекта удалите строку Application.CreateForm(TMyChild, MyChild) и
всавьте ее при вызове дочерней формы.
2. В OnClose дочерней формы пишите Action:=caFree;
3. В свойстве WindowMenu главной формы поставьте пункт меню, в котором хотите видеть список открываемых окон (пункт должен быть создан уже).
4. Стандартных средств нет, но где-то я что-то подобное видел (вродь компонента ToolBar2000), но не помню точно :((
Удачи!
---------
Если не знаешь что сказать - лучше промолчи...
Ответ отправил: Zubex (статус: 6-ой класс)
Ответ отправлен: 24.03.2006, 13:16

Отвечает: Leshiy2006
Здравствуйте, xXx!
1)Уберите Form2 из списка автоматически создаваемых окон и обрабатывайте его создание
2)В событии OnClose - Action:=caFree;

4)Попробуйте создавать для каждой формы свою кнопку где-нибудь на панели и управляйте с ее помощью видимостью формы.
Удачи!
Ответ отправил: Leshiy2006 (статус: 6-ой класс)
Ответ отправлен: 24.03.2006, 23:02


Вопрос № 38.433
Здравствуйте Специ!
В Дельфи есть основная форма при вызове из нее другой фомы сделать основную форму и все что на ней, не цветной, а оттенками серого??
Отправлен: 24.03.2006, 19:47
Вопрос задал: Cheater76 (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: LanK
Здравствуйте, Cheater76!

Конечно можно... сложно только стоит ли заморачиваться?
procedure TMain.Skin(Sender: TWinControl);
var
MyImage : TImage;
cntH: Integer;

<skip>

cntH := Sender.ComponentCount;

for I := 0 to cntH - 1 do
begin
if Sender.Components[I] is TImage then
Sender.Components[I].Enabled := False;

if Sender.Components[I] is TPanel then
(Sender as TPanel).Color := clBtnFace;
end;
Т.е. алгоритм такой - Sender - передаем название формы, далее исследуем ВСЕ ее компоненты и им назначаем цвет/свет/и т.п.

но это громоздко и медленно. Хотя если у тебя 2000 объектов, то самое то :)
---------
Пусть все будет хорошо! Давайте жить дружно! :) И будет жить еще лучше!
Ответ отправил: LanK (статус: 10-ый класс)
Ответ отправлен: 27.03.2006, 15:39


Вопрос № 38.436
Доброго времени суток, Уважаемые эксперты!!!

Как проверить есть ли в дисководе А: диск или нет.
А то при использовании функции FindFirst и FindNext
вылезает сообщение что мол в устройстве нет диска,
а это с точки зрения интерфейса не желательно (думаю
всех бы раздражало, когда при запуске Проводника
он бы вам говорил что в дисководе нет диска).

Спасибо.
Отправлен: 24.03.2006, 20:42
Вопрос задал: Korolyov Alexandr (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Cheater76
Здравствуйте, Korolyov Alexandr!
Для любых дисков
function DiskInDrive(ADriveLetter : Char) : Boolean;
var SectorsPerCluster,
BytesPerSector,
NumberOfFreeClusters,
TotalNumberOfClusters : Cardinal;
begin
Result := GetDiskFreeSpace(PChar(ADriveLetter+':'),
SectorsPerCluster,
BytesPerSector,
NumberOfFreeClusters,
TotalNumberOfClusters);
end;
Ответ отправил: Cheater76 (статус: 3-ий класс)
Ответ отправлен: 24.03.2006, 20:58

Отвечает: Злоумышленник
Здравствуйте, Korolyov Alexandr!
Вот то, что надо, сам пользуюсь

type
TDriveState(DS_NO_DISK, DS_UNFORMATTED_DISK,
DS_EMPTY_DISK, DS_DISK_WITH_FILES);

function DriveState(DrvLetter: Char): TDriveState;

var
Mask: String[6];
SearchRec: TSearchRec;
oldMode: Cardinal;
ReturnCode: Integer;

begin
oldMode: = SetErrorMode(SEM_FAILCRITICALERRORS);
Mask:= '?:*.*';
Mask[1] := DrvLetter;
{$I-} { отключить обработку исключительных ситуаций }
ReturnCode := FindFirst(Mask, faAnyfile, SearchRec);
FindClose(SearchRec);

{$I+}
case ReturnCode of
{ как минимум один файл был найден }
0: Result := DS_DISK_WITH_FILES;
{ файлов не найдено и дискета в порядке }
-18: Result := DS_EMPTY_DISK;
{ DS_NO_DISK для DOS, ERROR_NOT_READY для WinNT, ERROR_PATH_NOT_FOUND для Win 3.1 }
-21, -3: Result := DS_NO_DISK;
else
{ дискета лежит в дисководе но она не форматировнная }
Result := DS_UNFORMATTED_DISK;
end;
SetErrorMode(oldMode);
end; { DriveState }
Ответ отправил: Злоумышленник (статус: 5-ый класс)
Ответ отправлен: 25.03.2006, 08:07

Отвечает: AlexanderR
Здравствуйте, Korolyov Alexandr!

function DiskInDrive(Drive: Char): Boolean;
// Disk can be a floppy, CD-ROM,...
var
ErrorMode: Word;
begin
{ make it upper case }
if Drive in ['a'..'z'] then Dec(Drive, $20);
{ make sure it's a letter }
if not (Drive in ['A'..'Z']) then
raise EConvertError.Create('Not a valid drive ID');
{ turn off critical errors }
ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
try
{ drive 1 = a, 2 = b, 3 = c, etc. }
if DiskSize(Ord(Drive) - $40) = -1 then
Result := False
else
Result := True;
finally
{ Restore old error mode }
SetErrorMode(ErrorMode);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if DiskInDrive('a') = False then
ShowMessage('Drive not ready');
end;


---------
Если ты хочешь понять я тебе помогу, но я не буду выполнять за тебя твою работу.
Ответ отправил: AlexanderR (статус: 1-ый класс)
Ответ отправлен: 25.03.2006, 18:36


Вопрос № 38.444
Здравствуйте, уважаемые эксперты!
Как можно открыть JPEG, показать его на форме, и сохранить в формате BMP?
Спасибо.
Отправлен: 24.03.2006, 21:44
Вопрос задал: Граур Василий Олегович (статус: 1-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Полховский Александр Владимирович
Здравствуйте, Граур Василий Олегович!
Не знаю, насколько этот способ рационален, но он работает, по крайней мере.
Для начала загружаем картинку в image1.

image1.Picture.LoadFromFile('E:DownloadÐèñóíêèMount withplanes.jpg');

Не забудьте только размеры рисунка выставить как у загружаемого файла.

image1.Width:=image1.Picture.Width;
image1.Height:=image1.Picture.Height;

Выставляем параметры второй картинки.

image2.Width:=image1.Width;
image2.Height:=image1.Height;
image2.Picture.Bitmap.PixelFormat:=pf32bit;
image2.Picture.Bitmap.Width:=image1.Width;
image2.Picture.Bitmap.Height:=image1.Height;

Рисуем рисунок на второй картинке.

image2.Canvas.Draw(0, 0, image1.Picture.Graphic);

Сохраняем вторую картинку в файл.

image2.Picture.SaveToFile('e:BmpImage.bmp');
---------
Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 25.03.2006, 06:14

Отвечает: Злоумышленник
Здравствуйте, Граур Василий Олегович!

//Как можно открыть JPEG
uses
jpeg;
...
Image1.Picture.LoadFromFile('Здесь имя JPGE-файла');

//показать его на форме
{Способов много, например, при разработке формы размещаешь рисунок на форме и делаешь невидимым, затем а врограмме:}
Image1.Visible := true;

//и сохранить в формате BMP
//сначала перегоняешь JPEG в BMP
var
bm: TBitmap;
...
bm := TBitmap.Create;
try
bm.Assign(Image1.Picture.Graphic);
//потом сохраняешь
bm.SaveToFile('Здесь имя BMP-файла пишешь');
finally
bm.free;
end;
Ответ отправил: Злоумышленник (статус: 5-ый класс)
Ответ отправлен: 25.03.2006, 08:26

Отвечает: AlexanderR
Это делается с помощью модуля JPEG:

uses
...
Jpeg;

...

var
JpegImage:TJPEGImage;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
JpegImage := TJPEGImage.Create;
JpegImage.LoadFromFile('E:PicturesANIMALSend;

procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Canvas.Draw(0,0,JpegImage);
end;

procedure TForm1.FormDestroy(Sender: TObject);
var BMP:TBitmap;
begin
BMP := TBitmap.Create;
BMP.Assign(JpegImage);
BMP.SaveToFile('c:BMP.BMP');
BMP.Free;
JpegImage.Free;
end;
...
---------
Если ты хочешь понять я тебе помогу, но я не буду выполнять за тебя твою работу.
Ответ отправил: AlexanderR (статус: 1-ый класс)
Ответ отправлен: 25.03.2006, 18:33

Отвечает: Николай Б.
Здравствуйте, Граур Василий Олегович!
Процедура преобразования JPG ==> BMP в приложении

Приложение:

Ответ отправил: Николай Б. (статус: 3-ий класс)
Ответ отправлен: 26.03.2006, 07:54


Вопрос № 38.458
Здравствуйте уважаемые эксперты!

У меня вопрос:мне надо ,чтобы прога (сделанная в делфи) открывала файл,как НЕХ-редактор,а то я чайник (тока начал изучать) и не могу догнать как это сотворить.

И еще вопрос:делаю список файлов в ListBox,но там показывается весь путь к файлу,как можно сделать ,чтобы показывалось только имя файла (но путь сохранялся)
Отправлен: 25.03.2006, 01:34
Вопрос задал: Lamer_Brother (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лучников Ю.В.
Здравствуйте, Lamer_Brother!

1. Воспользуйтесь бесплатными компонентами с сайта Torry.NET.

2. Воспользуйтесь невизуальным компонентом TStringList. В нем вы будете хранить полный путь, а в ListBox вы будете отображать только имена файлов, полученных из TStringList.

Успехов!
Ответ отправил: Лучников Ю.В. (статус: Профессионал)
Россия, Киров
WWW: Чат Кировской молодежи
ICQ: 176308580
----
Ответ отправлен: 25.03.2006, 01:50

Отвечает: Jadd
Здравствуйте, Lamer_Brother!
1) Читайте файл средствами стандартных функций ввода-вывода. А потом FormatString() шестнадцатиричному виду.

2) Берете путь к файлу и вызываете ExtractFileName. Она вернет имя файла из пути, а далее вставляете в ListBox то, что получили.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Ответ отправлен: 25.03.2006, 13:07

Отвечает: Diman_A
Здравствуйте, Lamer_Brother!
Скачайте и установите компонент Hexedit. Там в комплекте идет много пример, с которыми не сложно разобраться.

Приложение:

Ответ отправил: Diman_A (статус: 8-ой класс)
Ответ отправлен: 25.03.2006, 14:07

Отвечает: AlexanderR
Здравствуйте, Lamer_Brother!

для извлечения имени файла используй функцию ExtractFileName
---------
Если ты хочешь понять я тебе помогу, но я не буду выполнять за тебя твою работу.
Ответ отправил: AlexanderR (статус: 1-ый класс)
Ответ отправлен: 25.03.2006, 18:40


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.20 (beta) от 17.03.2006
Яндекс Rambler's Top100

В избранное