Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TMemo исчезает после запуска проекта, исчезновение TМемо с формы после запуска 
:(
    Опции темы
Kusik
Дата 9.10.2014, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.12.2005
Где: Харьков

Репутация: нет
Всего: нет



Здравствуйте! Столкнулся с проблемой при внедрении проекта, проявляется на единичных/некоторых компьютерах пользователей (на которых делфи не установлено) под управлением как Windows XP так и Windows 7. На главной форме проекта лежит дерево (TTreeView), список (TListView) и TMemo. При чем, каждый контрол лежит на своей панели, между которыми находится сплиттер. При запуске проекта Мемо-поле исчезает с панели, и, при попытке перечитать содержимое к примеру листвью или дерева, получаем ексепшин об ошибке доступа (которая кагбэ намекает нам, что мемо-поля не существует, что оно при запуске не создалось). Но ведь мемо-поле не динамически создается, а лежит прямь в дезайн-тайме на панели. На других компах все прекрасно отображается и глубоко фиолетово, установлен Делфи или нет, ос ХР или 7. Может кто сталкивался с подобной проблемой, как ее решить? 
З.Ы. Проект написан на Delphi 7. Мемо-поле занимает всю клиентскую область панели-родителя. Панель же при запуске нормально отображается, никуда не едет, не плывет. При разворачивании/изменении размеров формы принимает правильные положения. При юзе сплиттера тоже, но мемо поле не появляется.
PM MAIL ICQ   Вверх
drkot
Дата 9.10.2014, 22:56 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Ошибка в 17-й строке


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Kusik
Дата 9.10.2014, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.12.2005
Где: Харьков

Репутация: нет
Всего: нет



Цитата(drkot @ 9.10.2014,  22:56)
Ошибка в 17-й строке

Это ответ мега-гуру? Может есть адекватные, знающие люди, которые могут дать ответ?
PM MAIL ICQ   Вверх
Keeper89
Дата 10.10.2014, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Kusik, все могут, код в студию.


--------------------
PM MAIL WWW   Вверх
Kusik
Дата 10.10.2014, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.12.2005
Где: Харьков

Репутация: нет
Всего: нет



Цитата(Keeper89 @ 10.10.2014,  01:33)
Kusik, все могут, код в студию.

Код, весь проект, что-ли? ну ладно, приду на работу, попробую
PM MAIL ICQ   Вверх
Poseidon
Дата 10.10.2014, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Kusik @  10.10.2014,  06:54 Найти цитируемый пост)
Код, весь проект, что-ли?

Для начала хватит кода OnCreate и OnShow формы, а так же само описание класса формы.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Kusik
Дата 10.10.2014, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.12.2005
Где: Харьков

Репутация: нет
Всего: нет



Описание класса формы и всего остального:
Код

unit fmMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  RXSplit, ComCtrls, DB, Menus, StdCtrls, ImgList,Ora, RXShell,
  ActnList, DateUtils, StrUtils, Math, OraAlerter, ToolWin, ExtCtrls,
  RXCtrls, Buttons ;

 type
  TFolderRec = class
    Id: Integer;      // use_id
    PrevId: Integer;  // use_previd
    EmpId: Integer;   // emp_id
    Name: String;     // use_name
    Level: Integer;   // Folder Level
    Insert: Integer;  // Operation  -  Insert near=0, Insert into = 1
   end;

  type
   TMessageRec = class
     MlsID : Integer;     // mls_id 
     UseID : Integer;     // use_id
     EvlID : Integer;     // evl_id
     DateMsg : TDateTime; // evl_datetime
     TypeMsg : String;    // tym_type
     TextMsg : String;    // evl_text
   end;

type
  TFormMain = class(TForm)
    StatusBar: TStatusBar;
    MainMenu1: TMainMenu;
    miMessage: TMenuItem;
    miMsgSearch: TMenuItem;
    miMsgMove: TMenuItem;
    miMsgReadAll: TMenuItem;
    miClose: TMenuItem;
    N6: TMenuItem;
    miFolder: TMenuItem;
    miAddFolder: TMenuItem;
    miEditFolder: TMenuItem;
    N10: TMenuItem;
    miDeleteFolder: TMenuItem;
    miReport: TMenuItem;
    miView: TMenuItem;
    miService: TMenuItem;
    miHelp: TMenuItem;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    RxSplitter1: TRxSplitter;
    tvFolders: TTreeView;
    RxSplitter2: TRxSplitter;
    lvMessages: TListView;
    mText: TMemo;
    ilIcons: TImageList;
    miRefresh: TMenuItem;
    miRefreshFolder: TMenuItem;
    N18: TMenuItem;
    miFontSettings: TMenuItem;
    N20: TMenuItem;
    miSaveToClipboard: TMenuItem;
    N22: TMenuItem;
    miRefreshConnection: TMenuItem;
    miNewConnection: TMenuItem;
    miToolBar: TMenuItem;
    miStatusBar: TMenuItem;
    N27: TMenuItem;
    ActionList: TActionList;
    ActionMsgSearch: TAction;
    ActionMsgMove: TAction;
    ActionMsgReadAll: TAction;
    ActionExit: TAction;
    ActionAddFolder: TAction;
    ActionEditFolder: TAction;
    ActionDeleteFolder: TAction;
    ActionRefresh: TAction;
    ActionRefreshFolder: TAction;
    ActionFontSettings: TAction;
    ActionRefreshConnection: TAction;
    ActionNewConnection: TAction;
    ActionSaveToClipboard: TAction;
    miContents: TMenuItem;
    miAbout: TMenuItem;
    RxTrayIcon: TRxTrayIcon;
    pmTrayMenu: TPopupMenu;
    ActionMinimizeToTray: TAction;
    ActionRestoreFromTray: TAction;
    miSound: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    pmMsg: TPopupMenu;
    pmiMsgSearch: TMenuItem;
    N14: TMenuItem;
    pmiMsgMove: TMenuItem;
    N16: TMenuItem;
    pmiMsgReadAll: TMenuItem;
    N17: TMenuItem;
    pmiRefreshFolder: TMenuItem;
    N23: TMenuItem;
    pmiAddFolder: TMenuItem;
    pmiEditFolder: TMenuItem;
    N26: TMenuItem;
    pmiDeleteFolder: TMenuItem;
    N13: TMenuItem;
    pmiRefresh: TMenuItem;
    N19: TMenuItem;
    pmiSaveToClipboard: TMenuItem;
    oaNewMsg: TOraAlerter;
    N1: TMenuItem;
    ActionCollapse: TAction;
    PageScroller1: TPageScroller;
    tb: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton9: TToolButton;
    ToolButton10: TToolButton;
    ToolButton11: TToolButton;
    ToolButton13: TToolButton;
    ToolButton14: TToolButton;
    ToolButton15: TToolButton;
    ToolButton3: TToolButton;
    ToolButton12: TToolButton;
    ToolButton16: TToolButton;
    procedure miToolBarClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ActionAddFolderExecute(Sender: TObject);
    procedure miAboutClick(Sender: TObject);
    procedure miContentsClick(Sender: TObject);
    procedure ActionUpdate(Sender: TObject);
    procedure tvFoldersDeletion(Sender: TObject; Node: TTreeNode);
    procedure tvFoldersMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure tvFoldersChange(Sender: TObject; Node: TTreeNode);
    procedure ActionEditFolderExecute(Sender: TObject);
    procedure ActionDeleteFolderExecute(Sender: TObject);
    procedure ActionRefreshExecute(Sender: TObject);
    procedure ActionFontSettingsExecute(Sender: TObject);
    procedure ActionRefreshConnectionExecute(Sender: TObject);
    procedure ActionNewConnectionExecute(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure RxTrayIconClick(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ActionMinimizeToTrayExecute(Sender: TObject);
    procedure ActionRestoreFromTrayExecute(Sender: TObject);
    procedure miSoundClick(Sender: TObject);
    procedure ActionRefreshFolderExecute(Sender: TObject);
    procedure lvMessagesStartDrag(Sender: TObject;
      var DragObject: TDragObject);
    procedure lvMessagesDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure lvMessagesMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure tvFoldersDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure lvMessagesDeletion(Sender: TObject; Item: TListItem);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure lvMessagesChange(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    procedure ActionExitExecute(Sender: TObject);
    procedure lvMessagesColumnClick(Sender: TObject; Column: TListColumn);
    procedure ListViewCompare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    procedure ActionMsgReadAllExecute(Sender: TObject);
    procedure ActionMsgSearchExecute(Sender: TObject);
    procedure ActionMsgMoveExecute(Sender: TObject);
    procedure tbContentsClick(Sender: TObject);
    procedure pmMsgPopup(Sender: TObject);
    procedure tvFoldersKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure lvMessagesKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ActionSaveToClipboardClick(Sender: TObject);
    procedure miCloseClick(Sender: TObject);
    procedure oaNewMsgEvent(Sender: TObject; Event, Message: String);
    procedure FormActivate(Sender: TObject);
    procedure ActionCollapseExecute(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure lvMessagesCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    procedure lvMessagesMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ToolButton16Click(Sender: TObject);
  private
    fDragItem: TListItem ; // Перетаскиваемое уведомление
    fStartFolder: TTreeNode ; // Стартовая папка для перетаскивания
    fSortType: Integer ;   //  Порядок сортировки
    fStart: Boolean ;      //  Флаг запуска для минимизации формы при запуске
    fFullName : string;    //  Полное ФИО пользователя
    fUserName : string;    //  Имя пользователя оракла
    procedure ShowHint( Sender : TObject );
    procedure MinimizeForm(Sender: TObject) ;
    procedure SetSortType( Sender: TObject; NewSortType: Integer );
    procedure AlertReg; // Регистрация для получения сигнала
    { Private declarations }
  public
    fEmpID: Integer; // EMP_ID пользователя
    fSoundOn : Boolean; // Признак использования звукового оповещения
    fSoundFile : String; //  Звуковой файл
    FCnt : Integer; // Колво новых уведомлений
    CClose : Boolean; // Признак, разрешающий выход из приложения
    ShowingForm : Boolean; // Признак отображения главной формы
    IsMovedMessages : Boolean; //  Признак перемещения уведомлений после поиска
    procedure SetAllGridsFont(SetFont: TFont) ; // Установка шрифтов
    function GetMessageCount:Integer; //Функция, возвращающая колво новых уведомлений
    procedure ShowMessageCount(Snd: Boolean); // Процедура для обработки вывода новых уведомлений
    procedure LoadFolderTree; // Загрузка дерева папок
    procedure GetUserInfo; // Получение информации о пользователе
    procedure MessagesRefresh; // Обновление списка уведомлений
    { Public declarations }
  end;

const
     //  константы для пунктов меню "ВИД"
    tgInstrument = 0;
    tgStatusBar = 1;

    // иконки
    icFolderClosed = 0 ;
    icFolderOpened = 1 ;
    icMessage = 6 ;
    icMessageReaded = 7 ;
    icArrowUp = 21 ;
    icArrowDown = 20;

    SndFile = 'sound.mp3';
var
  FormMain: TFormMain;

  DesignGridsFont: TFont ;
  LoadGridsFont: TFont ;

  NewServerName: string ;
  NewUserName: string ;
  NewPassword: string ;

implementation

uses fmSetup,
     dmMain,
     fmWait,
     fmAbout,
     MessageOwn,
     fmFolderProcess,
     ConnectOra,
     fmNewMessage,
     fmFind,
     Clipbrd,
     fmSelectFolder ;


FormCreate:
Код

// Создание видеоформы
procedure TFormMain.FormCreate(Sender: TObject);
begin
   CClose := False ;
   ShowingForm := True ;
   IsMovedMessages := False ;
   miSound.Checked := SetupForm.ReadBoolFromIni( 'Screen', 'Beep' ) ;
   fSoundOn := miSound.Checked ;
   Application.OnHint := ShowHint ;
   Application.HelpFile := ExtractFileDir(Application.ExeName) + '\'+
   Copy(ExtractFileName(Application.ExeName),1,Pos('.',ExtractFileName(Application.ExeName))-1)+'.HLP' ;
   fSoundFile := ExtractFilePath(Application.ExeName) + SndFile ;
   RxTrayIcon.Show;
   FormNewMessage := TFormNewMessage.Create(nil) ;
   SetupForm.ReadPosition(FormNewMessage);
   FormNewMessage.Hide ;
   Application.OnMinimize := MinimizeForm ;
   DesignGridsFont := TFont.Create ;
   LoadGridsFont := TFont.Create ;
   DesignGridsFont.Assign(tvFolders.Font ) ;
   DesignGridsFont.Assign(lvMessages.Font ) ;
   DesignGridsFont.Assign(mText.Font ) ;
   SetupForm.GetFontGrids(LoadGridsFont) ;
   LoadFolderTree ;
   AlertReg;
   ShowMessageCount(True) ;
   fStart := True ;
end;


FormShow:
Код

// Показ видеоформы
procedure TFormMain.FormShow(Sender: TObject);
begin
  SetAllGridsFont(LoadGridsFont) ;
  fSortType := 0;
end;

PM MAIL ICQ   Вверх
drkot
Дата 10.10.2014, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Судя по Вашему описанию либо компонент уничтожается (free) либо значение переменной становится nil.
Опять же из чистой логики и прагматизма вероятность второго значительно выше.
Учитывая, что ошибка возникает на конкретных системах, то можно предположить, что чего то на этих системах не хватает. Возможно тех же шрифтов.
Физически перезапись происходит в результате ошибок стека. 
Для начала стоит включить "Overflow checking" и по запустить на компьютере на котором наблюдается баг.
Если нет возможность работать дебагером на этой машине, то после каждой строки кода делаем логирующее сообщение и проверяем значение переменной указывающей на мемо.

Добавлено через 1 минуту и 12 секунд
ИМХО .Assign приводит к этому.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Kusik
Дата 10.10.2014, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.12.2005
Где: Харьков

Репутация: нет
Всего: нет



спасибо, попробую так и сделать. а может эта проблема возникать в следствии использования PE запаковщика? может он какимто образом вырезает именно мемо из проекта (только на некоторых компах. из 10 компьютеров только у 2х такая проблема)
PM MAIL ICQ   Вверх
drkot
Дата 10.10.2014, 21:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(Kusik @  10.10.2014,  22:10 Найти цитируемый пост)
использования PE запаковщика?

скорее не вырезает, а не правильно разворачивает приложение.

PS: зачем пользоваться "запаковщиками"? Они, что чем то помогают? Столько написано про вред использования подобных вещей, но с завидным упорством часть индивидов ... не может расстаться с любимой погремушкой. 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Kusik
Дата 13.10.2014, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.12.2005
Где: Харьков

Репутация: нет
Всего: нет



Проблема повторилась, но уже с тулбаром( эта проблема имела место быть еще раньше,) пока накручивал функционал, не обращали на это внимание, но сейчас, как начало пропадать мемо поле, то и тулбар стал исчезать. С туллбаром что только не пробовал и pagescroller и coolbar и controlbar. Решил(но доконца не уверен, что вновь не исчезнет) контейнер куллбар положил не на форму, а на панель, которую привязал к топу формы. Вроде бы не пропадает больше. Но проблема с мемо полем так же имеет место быть, при чем, после каждой новой компилляции может то пропадать, то нет. Не могу найти никакой закономерности, почему это происходит.
Повесил в ФормАктивейт следующий код:
Код

If Assigned(mText) then
  Showmessage('not null')
Else
  Showmessage('null');


Происходит следующее: когда впервые, после формшоу заходит в эктивейт показывает что все ок, как тока нажимаю на кнопку ок, тут же появляется 'null'. Т.е. форма стартует нормально, но в какойто момент времени при активизации компоненты убиваются.
P.S. раньше писал, что исчезает только Мемо, теперь же, исчезает еще и панель, на которой висит мемо. Даже не только они исчезают, а скорее дестроятся. Только не понятно как и почему?!!
Были ли у кого подобные глюки с самоуничтожением статических(design-time) компонентов?
PM MAIL ICQ   Вверх
Kusik
Дата 14.10.2014, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.12.2005
Где: Харьков

Репутация: нет
Всего: нет



Все. Решено. В двух разных местах проекта производилось освобождение формы .Free и поэтому рандомным способом под управлением разных ос пропадало то мемо то панель инструментов
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1542 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.