IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила форума Всем прочитать перед созданием темы!
 
Ответить в данную темуНачать новую тему
Редактор Delphi и пр., Delphi
EGORR
сообщение 2.04.2007 - 15:57
Сообщение #1


Свой человек
Иконка группы

Группа: Пользователи
Пользователь №: 308
Сообщений: 552
Регистрация: 18.03.2003
Из: Планета Земля
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 38 раз(а)



Я сейчас осваиваю Дельфу...
Скажите мне пжта, почему даже простая форма с парой кнопок весит 300-400 кило?
В книгах я ответа на этот вопрос не нашел. Почти все модули поотключал. Убавилось 20-30 кил. Что делать?

Властью, данной мне свыше (админами то бишь wink.gif), разделяю тему про Delphi на два потока.
Fallcom


Сообщение отредактировал Fallcom - 6.04.2007 - 22:33
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Fallcom
сообщение 3.04.2007 - 10:53
Сообщение #2


The Last Gunslinger
Иконка группы

Группа: Пользователи
Пользователь №: 6829
Сообщений: 1008
Регистрация: 26.04.2004
Из: Беларусь, Гомель
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 10 раз(а)



EGORR
Это нормальное явление. У тебя не просто форма, внутрь приложения сразу вкомпилируются обработчики событий и исключений винды, стандартные модули и т.д., поэтому приложение и получается сразу относительно большим. При последующем добавлении твоего кода приложение будет увеличиваться совсем незначительно.

Для того, чтобы значительно уменьшить размер приложения, нужно запретить вкомпилировать в проект эти обработчики. В этом случае приложение получится маленькое, т.к. все эти вещи оно будет брать из стандартных дельфовских библиотек Vcl70.bpl и других, находящихся в папке Windows\System. Включается эта опция так: в меню Project\Options на вкладке Packages нужно включить внизу птичку Build with runtime packages. Тут же приводится список библиотек (*.bpl), которые дельфа НЕ БУДЕТ включать в твое приложение, а будет искать их снаружи. Соответственно, если это поле сделать пустым, то твое приложение будет опять под 300-400 кило. Как правило, достаточно включить основные: Vcl50;Vclbde50;Vcldb50;vcldbx50;vclsmp50;vclx50

Опять же, обрати внимание, что если ты напишешь там, например, vcl50, то тебе нужно будет рядом с приложением таскать еще и ее, помимо проекта, если на другой машине их не будет.

Собственно, это не только в дельфе такая фигня, в VC хоть приложения изначально и маленькие, но они тоже юзают точно такие же библиотеки от майкрософта, точно так же лежащие по тому же пути. Единственная разница, что майкрософтовские бибиотеки с виндой распространяются, поэтому есть почти у всех.

В общем, если у тебя будет целая куча разных приложений, то включай режим этих Packages-ов, и бери пару BPL-ок с собой. Если у тебя одно приложение - то не обращай внимания, дальше проект расти будет не так сильно. Если ты вообще для себя только делаешь - то вообще забей.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
EGORR
сообщение 3.04.2007 - 15:52
Сообщение #3


Свой человек
Иконка группы

Группа: Пользователи
Пользователь №: 308
Сообщений: 552
Регистрация: 18.03.2003
Из: Планета Земля
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 38 раз(а)



Fallcom, спасибо! Я понял.
Я по мере наступления тупизма ещё к тебе попристаю!...
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
EGORR
сообщение 4.04.2007 - 08:54
Сообщение #4


Свой человек
Иконка группы

Группа: Пользователи
Пользователь №: 308
Сообщений: 552
Регистрация: 18.03.2003
Из: Планета Земля
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 38 раз(а)



Fallcom, хочу снова поприставать к тебе с детскими вопросами.
Дельфи я только начал осваивать. Все непривычно, непонятно...
Спросить некого. Пробовал на программерских форумах свои вопросы спрашивать, и получал в ответ высокомерное "Фу!..." или совет читать книги. Но в книгах на все вопросы ответов не найдешь. Так что стану к тебе приставать насколько твоего терпения хватит...
Скажи, пожалуйста, почему в Дельфийском редакторе кода так ужасно отображается текст. При выделении часть текста не отображается, Ctrl+c, Ctrl+v не работает. Режим замены... Я пробовал сделать настройки в пропертях, но помогло мало...
Что-то можно предпринять? А то приходится писать в Notepad++, а потом вставлять. Это был вопрос номер 0.
Теперь вопрос номер next.
Я недавно для практики написял прогамульку которая вынимает из суммы с НДС сумму НДС и сумму без НДС.
Она крайне проста, но надо же с чего-то начинать... Форма, комбобокс с числами от 1 до 99(выбор процентов НДС), Edit(ввод суммы), Button с процедурой вычисления, два Едита для отображения результата: сумма НДС и сумма без НДС.
Все работает.
Но захотелось мне избавить юзера от нудного копирования результата в буфер.
Засунул под едиты с результатами два радиобаттона: копировать в буфер либо сумму НДС, либо сумму без НДС.
Нашел процедуру Edit2.CopyToClipboard. Засунул её в БаттонОнКлик после всех отстальных. И удивлялся почему не работает.
Потом дошло, что работает, но с выделенным текстом. Значит на иф привязывать к радиобаттонам ещё рано...
По привычке LUA стал искать функцию Input.GetText или что-нибудь похожее. Не нашел...
А вот и сам вопрос: как можно взять из Edit2 и Edit3 текст для того, чтобы поместить его потом в буфер?
Для наглядности привожу код.

Код
unit new_nds;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Controls, Forms,
  Dialogs, StdCtrls, ActnList;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    Label3: TLabel;
    Button1: TButton;
    GroupBox1: TGroupBox;
    Label4: TLabel;
    Label5: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    procedure Edit1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit3.Clear;
Edit2.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  yiy,traf,fh:String;
begin
try
yiy:= ComboBox1.Text;
traf:='1,';
fh:= traf + yiy;
Edit3.text:= FloatToStr( StrToFloat(Edit1.Text) / StrToFloat(fh));
Edit3.text:=FloatToStr(Round(StrToFloat(Edit3.text)*exp(2*ln(10)))/(exp(2*ln(10))));
Edit2.Text:=FloatToStr(StrToFloat(Edit1.Text)-StrToFloat(Edit3.Text));
  except
  MessageDlg('Ошибка ввода данных!',
        mtError, [mbOk], 0);
        Edit1.Clear;

end;
end;
end.

Сама прога...=>http://specific-soft.by.ru/soft/nds/nds.rar

Сообщение отредактировал EGORR - 4.04.2007 - 15:05
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
EGORR
сообщение 5.04.2007 - 09:18
Сообщение #5


Свой человек
Иконка группы

Группа: Пользователи
Пользователь №: 308
Сообщений: 552
Регистрация: 18.03.2003
Из: Планета Земля
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 38 раз(а)



Цитата
А вот и сам вопрос: как можно взять из Edit2 и Edit3 текст для того, чтобы поместить его потом в буфер?

Вопрос снимаю. Разобрался.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Williams
сообщение 5.04.2007 - 09:47
Сообщение #6


Торговец чёрным деревом
Иконка группы

Группа: Админы
Пользователь №: 3953
Сообщений: 21844
Регистрация: 1.08.2003
Из: Москва
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 55825 раз(а)



EGORR, тут подумалось об обработке события OnChange (или как там его ... дльфу лет 5 уже не открывал) для твоих эдит-ов.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
EGORR
сообщение 5.04.2007 - 12:30
Сообщение #7


Свой человек
Иконка группы

Группа: Пользователи
Пользователь №: 308
Сообщений: 552
Регистрация: 18.03.2003
Из: Планета Земля
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 38 раз(а)



Williams , спасибо.
Как я уже уже писял, проблему взятия содержимого из едитов с результатами(сумма НДС и сумма без НДС) в буфер я решил. Нашел в справке дельфийской функцию CopyAll (если склероз мне не изменяет)
Дальше ... если один радиобаттон чекет, то Edit2CopyAll и Edit2CopyToБуфер , если другой, то Edit3CopyAll и Edit3CopyToБуфер.
Fallcom, я сдуру все библиотеки смахнул с компиляции. Размер экзешника рухнул до 25 кило. Но на рабочем компе стал библиотеки канючить. М-м-м-дя...
Дальше я хочу програмусю заставить логи вычислений в файл писать.

Редактор кода совсем достал! Что можно сделать? Надоело в Бреду v.03 писать!

Сообщение отредактировал EGORR - 5.04.2007 - 12:31
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Fallcom
сообщение 5.04.2007 - 21:32
Сообщение #8


The Last Gunslinger
Иконка группы

Группа: Пользователи
Пользователь №: 6829
Сообщений: 1008
Регистрация: 26.04.2004
Из: Беларусь, Гомель
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 10 раз(а)



EGORR
Сорри, но что-то ты путаешь. В Дельфе редактор вообще один из самых лучших, что я знаю. Отображается и выделенный текст, и Ctrl+C, и Ctrl+V работает, и Ctrl+Ins, Shift+Ins соответственно. Возможно, что-то ты накосячил в настройках. Зайди в настройки (Tools-Editor Options) и посмотри, что у тебя там. Кстати, там присутствует комбобокс Editor SpeedSetting - это предустановки, советую выбрать Default keymapping (по умолчанию, кстати, должен быть). Если привык к VC - выбирай его.

На второй вкладке (Source options), посмотри, чтобы был выбран Pascal и включен syntax highlight. Ну и вообще все опции просмотри. Нажмешь кнопку Help - и можешь про все галочки прочитать подробно. Но все должно работать по умолчанию, уж не знаю, что у тебя за проблемы.

Вместо GetText тут все гораздо проще. smile.gif Edit2.Text - это и есть твой текст, можешь делать с ним, что тебе угодно. Например, выводить его прямо так:
Код
ShowMessage(Edit2.Text);

, объединять с другим:
Код
Edit2.Text := Edit2.Text + Edit1.Text;

Никаких промежуточных переменных или выделений памяти не нужно. Прямо так.

Вместо комбобокса с процентами от 1 до 100 используй SpinEdit на вкладке Samples (тот же Edit, только с кнопочками вверх-вниз для уменьшения значения). Там удобнее - можно задать MinValue, MaxValue, и получить значение в результате целочисленное.

Извращенное выражение с логарифмом и экспонентой - это что, возведение в степень? Боже мой, FoxPro, как давно я тебя не вспоминал! biggrin.gif Используй функцию Pow.

Для того, чтобы поместить значение в буфер обмена, делай так:
Код
Clipboard.AsText := Edit1.Text


С файлами все тоже очень просто. Вот тебе кусок программы:
Код
var
  f: TextFile;
begin
  AssignFile(f, 'a.txt');
  Rewrite(f);
  WriteLn(f, 'Расчет значения ' + Edit1.Text + ' и ' + Edit2.Text);
  WriteLn(f); // просто пустая строка вставляется
  CloseFile(f);
end;


Здесь создается новый файл постоянно, и в него чего-то пишется. Если хочешь, чтобы файл дописывался постоянно, а не обнулялся при каждом запуске, используй функцию Reset вместо Rewrite, только не забудь проверить, существует ли файл, то есть:
Код
var
  f: TextFile;
begin
  AssignFile(f, 'a.txt');
  if FileExists('a.txt')
    then Reset(f)
    else Rewrite(f);
  WriteLn(f, 'Расчет значения ' + Edit1.Text + ' и ' + Edit2.Text);
  WriteLn(f); // просто пустая строка вставляется
  CloseFile(f);
end;


Вот тебе пример кода программы во встроенном редакторе. Я выделил пару строк. Неужели это по-твоему ужасно?
Прикрепленный файл  delphi.gif ( 8.08 килобайт ) Кол-во скачиваний: 190


P.S. Спрашивай - мне не сложно. smile.gif

P.P.S. Кстати, в эту тему можно прикреплять файлы - чтобы далеко не бегать по ссылкам. wink.gif

Сообщение отредактировал Fallcom - 5.04.2007 - 21:23
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
EGORR
сообщение 6.04.2007 - 09:02
Сообщение #9


Свой человек
Иконка группы

Группа: Пользователи
Пользователь №: 308
Сообщений: 552
Регистрация: 18.03.2003
Из: Планета Земля
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 38 раз(а)



Fallcom, спасибо, сенсей!
Твои советы мне очень помогают.
Пока я Дельфе не освоился, так что изящества в коде никакого нет...
Но будет... smile.gif
Редактор кода пробовал настраивать. dulya.gif Попробую ещё...
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
EGORR
сообщение 13.04.2007 - 12:34
Сообщение #10


Свой человек
Иконка группы

Группа: Пользователи
Пользователь №: 308
Сообщений: 552
Регистрация: 18.03.2003
Из: Планета Земля
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 38 раз(а)



Цитата(Fallcom @ 6.04.2007 - 23:24) *
Сабж

Что это значит? Ты ругаешься?

Все наприятности с редактором кода закончились, когда я догадался сменить шрифт, коим отображается код.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Fallcom
сообщение 15.04.2007 - 10:09
Сообщение #11


The Last Gunslinger
Иконка группы

Группа: Пользователи
Пользователь №: 6829
Сообщений: 1008
Регистрация: 26.04.2004
Из: Беларусь, Гомель
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 10 раз(а)



Не, не ругаюсь. Это таким странным образом произошло объединение тем. Почему-то перенесенные сообщения легли не вниз темы, а вверх. А мое первичное сообщение "сабж" ушло под низ. Не заметил. Не важно.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
EGORR
сообщение 15.04.2007 - 21:17
Сообщение #12


Свой человек
Иконка группы

Группа: Пользователи
Пользователь №: 308
Сообщений: 552
Регистрация: 18.03.2003
Из: Планета Земля
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 38 раз(а)



По поводу излишнего веса програмульки.
Я Setup сотворил, PPMDом сжал, и вроде ничего,...терпимо... smile.gif
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Fallcom
сообщение 16.04.2007 - 10:53
Сообщение #13


The Last Gunslinger
Иконка группы

Группа: Пользователи
Пользователь №: 6829
Сообщений: 1008
Регистрация: 26.04.2004
Из: Беларусь, Гомель
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 10 раз(а)



Я ж говорю, можно использовать проги для сжатия EXE-шников дополнительно. Вроде AsPack и прочего. Хотя при нынешних размерах веников и флэшек все это не очень уж актуально. 300Кб - не вес.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 20.04.2024 - 01:53