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

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

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

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
asimpsons
Так Вам не запретить. Событие является только уведомлением о происходящем в сердцевине Виндового апи.
 
Но по идее совершенно не верно то что Вы хотите. Чтобы пользователь видел на экране графические элементы управления и чтобы они не работали. Зачем они тогда Вам?
Я бы их просто убрал.

Код:
 
  PageControl1.Style := tsButtons;
  PageControl1.TabStop := False;
  TabSheet1.TabVisible := False;
  TabSheet2.TabVisible := False;
  TabSheet3.TabVisible := False;
...
 

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 08:14 06-03-2009
asimpsons

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
Все компоненты создаются динамически и процедура одна для всех кнопок. Кроме PageControl создаются WebBrowser(10) и RadioGroup(10). Поэтому мне нужна была универсальная процедура (тестирующая программа). А PageControl нужна для просмотра своих ошибок пользователем, после окончании теста. Вообще, в моем предыдущем посте я описал, как проблему решил, все работает. Спасибо

Всего записей: 15 | Зарегистр. 08-07-2008 | Отправлено: 13:57 06-03-2009
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, что за глюк (или не глюк, фиг знает) может быть - в Дельфи 2009 не вижу компонента TCheckListBox. Поиск среди компонентов ничего не дает, в справке про него тоже ничего не написано. Ну вот, TScrollBox, за ним должен быть TCheckListBox, но его нет, идет Сплиттер. Блин, я в шоке... Или я чего-то не знаю? С 2009 еще не работал, только решил пересесть.
 
Добавлено:
Блин, ну и засада - щас запустил копию Дельфи 2009 ранее установленную на Виртуалке - там этот компонент находится на положенном месте!!!
Вопрос - можно ли как-то вылечить сие отсутствие родного компонента без переустановки студии? И вообще, как такое может быть???
 
 
 
Добавлено:
Единственное предположение, что кто-то из установленных сторонних компонентов так "постарался". Такое может быть?
 
Добавлено:
Кажется, нашел "предателя" - TMS Unicode Component Pack 1.7.0.2 - последняя версия, которую разрабы рекомендуют для постепенного переноса ранее написанных проектов на 2009 - TCheckListBox сначала обнаружился на их вкладке Additional, а после удаления пака вернулся на свое законное место.

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 00:19 08-03-2009
lorents



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как сделать функцию печать нескольких картинок, но чтобы через диалоговое окно печати?
 
Добавлено:
а лучше если у кого портативная программа для просмотра картинок?
спасибо

Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 16:08 08-03-2009 | Исправлено: lorents, 16:26 08-03-2009
Frodo_Torbins

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

Цитата:
а лучше если у кого портативная программа для просмотра картинок?  

Недавно накропал такое: http://narod.ru/disk/6428487000/ImageViewer.exe.html

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:36 08-03-2009
lorents



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
но в проге ничего нет, абсолютно ничего, может я что-то перепутал?

Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 17:46 08-03-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lorents
Во-первых там есть попап меню А во-вторых печатать она действительно не умеет, я для этого в висте пользуюсь стандартными средствами.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 18:18 08-03-2009
lorents



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

Цитата:
я для этого в висте пользуюсь стандартными средствами.

мастер печати фотографий? я хотел ее в использовать ее в своей проге но она поддерживается тока в висте и хр

Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 18:22 08-03-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lorents
Ну тогда остается или torry.net, или руками рисовать на канве принтера.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 20:22 08-03-2009
lorents



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

Цитата:
у тогда остается или torry.net

объясни плиз что это такое?

Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 20:26 08-03-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lorents
Это самый большой в инете сборник компонент для делфи. Заходиш в раздел "VCL->Print VCL" и ищеш чего там тебе надо. Если с английским проблемы, то можно у гугла помощи попросить.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 20:36 08-03-2009
lorents



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
спасибо, пойду разбираться
 
Добавлено:
такой вопрос возник
как можно вызвать вот это вот окно
 
   
 
которое использую почти все программы?

Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 20:40 08-03-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lorents
Загляните на вкладку Dialogs.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 22:38 08-03-2009
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, какой наиболее оптимальный путь хранения настроек программы, если их (опций в форме) много? Вроде как вариант с сохранением всей формы в файл приемлемый, но вот у меня в форме "Опции" есть парочка кнопок, которые вызывают форму настроек параметров прокси и родной Фонтдиалог. Делать два файла настроек, соответствующих каждой форме уже как-то нехочется, да и как хранить результаты выбора пользователем в Фонтдиалоге. В-общем, вопрос, как обычно поступают? Разные места хранения разных настроек - файл, реестр?

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 15:29 09-03-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
Мне из джедайского набора очень нравятся компоненты. Кроме того там есть методы для сохранения только published свойств обьектов. Т о можно просто сделать все настройки published полями.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 19:43 09-03-2009
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Понял, спасибо за подсказку

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 20:42 09-03-2009
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
В библиотеке EhLib есть TPropStorageEh.
В библиотеке DevExpress есть TPropertiesStore.
Ну и я когдато на заре писал? удобно, чем, что:
- легко расширяется
- не требует подробных указаний, что именно сохранять.      

Код:
 
unit VIniValue;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
 
type
  TIniOption = (ioFormCoordinate, ioGridWidth, ioEditValue);
  TSetIniOptions = set of TIniOption;
 
  TVIniValue = class(TComponent)
  private
    FormOnCreate : TNotifyEvent;
    FormOnDestroy: TNotifyEvent;
    FIniFileName: String;
    FAutomatic: Boolean;
    FIniOptions: TSetIniOptions;
    procedure NewFormOnCreate(Sender : TObject);
    procedure NewFormOnDestroy(Sender : TObject);
    procedure SetIniFileName(const Value: String);
  protected
    procedure Loaded; override;
  public
    constructor Create(AOwner: TComponent); override;
    procedure Load;
    procedure Save;
  published
    property Automatic: Boolean read FAutomatic write FAutomatic default True;
    property IniFileName: String read FIniFileName write SetIniFileName;
    property IniOptions: TSetIniOptions read FIniOptions write FIniOptions;
  end;
 
 
procedure Register;
 
implementation
 
uses
  TypInfo, IniFiles, VVCLUtl, VStrUtl;
 
procedure Register;
begin
  RegisterComponents('Victory Common', [TVIniValue]);
end;
 
{ TVIniValue }
 
constructor TVIniValue.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FAutomatic := True;
end;
 
procedure TVIniValue.Loaded;
  function EqualAddr(Addr1, Addr2: TNotifyEvent): Boolean;
  begin
    Result := CompareMem(@TMethod(Addr1), @TMethod(Addr2), 8);
  end;
begin
  inherited Loaded;
  if not (csDesigning in ComponentState) then begin
    if FIniFileName = '' then FIniFileName := Name;
    FIniFileName := ExtractFilePath(ParamStr(0)) + FIniFileName;
    if FAutomatic and (Owner is TForm) and not EqualAddr((Owner as TForm).OnCreate, NewFormOnCreate) then begin
      FormOnCreate := (Owner as TForm).OnCreate;
      (Owner as TForm).OnCreate := NewFormOnCreate;
      FormOnDestroy := (Owner as TForm).OnDestroy;
      (Owner as TForm).OnDestroy := NewFormOnDestroy;
    end;
  end;
end;
 
procedure TVIniValue.NewFormOnCreate(Sender: TObject);
begin
  if Assigned(FormOnCreate) then FormOnCreate(Self);
  if FAutomatic then Load;
end;
 
procedure TVIniValue.NewFormOnDestroy(Sender: TObject);
begin
  if FAutomatic then Save;
  if Assigned(FormOnDestroy) then FormOnDestroy(Self);
end;
 
procedure TVIniValue.Load;
var
  IniFile: TIniFile;
  Prop : PPropInfo;
  i,j,V: Integer;
  s: String;
begin
  IniFile := TIniFile.Create(IniFileName);
  try
    if ioFormCoordinate in IniOptions then begin
      V := IniFile.ReadInteger(Owner.Name, 'FormTop', -1);
      if V <> -1 then TForm(Owner).Top := V;
      V := IniFile.ReadInteger(Owner.Name, 'FormLeft', -1);
      if V <> -1 then TForm(Owner).Left := V;
      V := IniFile.ReadInteger(Owner.Name, 'FormHeight', -1);
      if V <> -1 then TForm(Owner).Height := V;
      V := IniFile.ReadInteger(Owner.Name, 'FormWidth', -1);
      if V <> -1 then TForm(Owner).Width := V;
      V := IniFile.ReadInteger(Owner.Name, 'WindowState', -1);
      if (TForm(Owner).FormStyle <> fsMDIChild) and (V <> -1) and TWinControl(Owner).Showing then TForm(Owner).WindowState := TWindowState(V);
    end;
    for i := 0 to Owner.ComponentCount -1 do begin
      if ioEditValue in IniOptions then begin
        Prop := GetPropInfo(Owner.Components[i].ClassInfo, 'Text');
        if (Prop <> nil) and (Prop^.PropType^.Kind in [tkString,tkLString,tkWString]) then begin
          s := GetStrProp(Owner.Components[i], Prop);
          SetStrProp(Owner.Components[i], Prop, IniFile.ReadString(Owner.Name,Owner.Components[i].Name,s));
        end;
        Prop := GetPropInfo(Owner.Components[i].ClassInfo, 'Value');
        if (Prop <> nil) and (Prop^.PropType^.Kind in [tkString,tkLString,tkWString]) then begin
          s := GetStrProp(Owner.Components[i], Prop);
          SetStrProp(Owner.Components[i], Prop, IniFile.ReadString(Owner.Name,Owner.Components[i].Name,s));
        end;
        if (Prop <> nil) and (Prop^.PropType^.Kind = tkInteger) then begin
          j := GetOrdProp(Owner.Components[i], Prop);
          SetOrdProp(Owner.Components[i], Prop, IniFile.ReadInteger(Owner.Name,Owner.Components[i].Name,j));
        end;
        Prop := GetPropInfo(Owner.Components[i].ClassInfo, 'Checked');
        if (Prop <> nil) then begin
          j := GetOrdProp(Owner.Components[i], Prop);
          SetOrdProp(Owner.Components[i], Prop, Ord(IniFile.ReadBool(Owner.Name,Owner.Components[i].Name,Boolean(j))));
        end;
      end;
    end;
  finally
    IniFile.Free;
  end;
end;
 
procedure TVIniValue.Save;
var
  IniFile: TIniFile;
  Prop : PPropInfo;
  i: Integer;
  WS: TWindowState;
begin
  IniFile := TIniFile.Create(IniFileName);
  try
    if ioFormCoordinate in IniOptions then begin
      WS := TForm(Owner).WindowState;
      if TForm(Owner).WindowState <> wsNormal then TForm(Owner).WindowState := wsNormal;
      IniFile.WriteInteger(Owner.Name, 'FormTop', TForm(Owner).Top);
      IniFile.WriteInteger(Owner.Name, 'FormLeft', TForm(Owner).Left);
      IniFile.WriteInteger(Owner.Name, 'FormHeight', TForm(Owner).Height);
      IniFile.WriteInteger(Owner.Name, 'FormWidth', TForm(Owner).Width);
      IniFile.WriteInteger(Owner.Name, 'WindowState', Integer(WS));
      TForm(Owner).WindowState := WS;
    end;
    for i := 0 to Owner.ComponentCount -1 do begin
      if ioEditValue in IniOptions then begin
        Prop := GetPropInfo(Owner.Components[i].ClassInfo, 'Text');
        if (Prop <> nil) and (Prop^.PropType^.Kind in [tkString,tkLString,tkWString]) then
          IniFile.WriteString(Owner.Name,Owner.Components[i].Name,GetStrProp(Owner.Components[i], Prop));
 
        Prop := GetPropInfo(Owner.Components[i].ClassInfo, 'Value');
        if (Prop <> nil) and (Prop^.PropType^.Kind in [tkString,tkLString,tkWString]) then
          IniFile.WriteString(Owner.Name,Owner.Components[i].Name,GetStrProp(Owner.Components[i], Prop));
        if (Prop <> nil) and (Prop^.PropType^.Kind = tkInteger) then
          IniFile.WriteInteger(Owner.Name,Owner.Components[i].Name,GetOrdProp(Owner.Components[i], Prop));
 
        Prop := GetPropInfo(Owner.Components[i].ClassInfo, 'Checked');
        if (Prop <> nil) then
          IniFile.WriteBool(Owner.Name,Owner.Components[i].Name,Boolean(GetOrdProp(Owner.Components[i], Prop)));
      end;
    end;
  finally
    IniFile.Free;
  end;
end;
 
procedure TVIniValue.SetIniFileName(const Value: String);
var
  S: String;
begin
  FIniFileName := Value;
  S := Copy(FIniFileName, Length(FIniFileName)-4, 4);
  S := AnsiLowerCase(S);
  if S <> '.ini' then FIniFileName := FIniFileName+'.ini';
end;
 
end.
 

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 23:18 09-03-2009
ShIvADeSt



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

Цитата:
Делать два файла настроек, соответствующих каждой форме уже как-то нехочется, да и как хранить результаты выбора пользователем в Фонтдиалоге.

А что вызывают какие то трудности сохранить имя шрифта и данные шрифта в инишку? Насчет много опций - посмотрите как хранит Тотал Коммандер свои настройки, там и прокся и прочее и ничего, все нормально хранится

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:03 10-03-2009
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Ну наверно да, просто программа развивается, какие-то опции будут добавляться или удаляться, значит, надо править код, с риском что что-то пропустится и т.п.
V1s1ter
Очень интересно! Вообще, у меня мелькала мысль написать свой класс для сохранения и загрузки настроек. Хочется избавиться как можно от большего количества телодвижений в будущем, при развитии программы. В-общем, спасибо за пример и идею
 
Добавлено:

Цитата:
посмотрите как хранит Тотал Коммандер

Посмотрел... У меня сразу после установки там всего лишь 26 строк - это ведь немного...

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 02:42 10-03-2009
Tantos



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

Цитата:
Посмотрел... У меня сразу после установки там всего лишь 26 строк - это ведь немного...

Могу скинуть мой конфиг - удивитесь. Есть такое понятие - "по умолчанию". Кто мешает использовать имя формы в качестве имени секции, к примеру?

----------
Чем больше узнаю людей, тем больше люблю компьютеры.

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 03:23 10-03-2009 | Исправлено: Tantos, 08:23 10-03-2009
   

Страницы: 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 (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru