Mam formularz w bibliotece DLL. Cały formularz ma za zadanie jedynie wyświetlanie tekstu przez
jedną procedurę.
Kiedy wyświetlał do komponentu TMemo wszystko ładnie działało, jednak kiedy zamieniłem TMemo
na TRichEdit, przy zamykaniu wyrzuca błąd o nieprawidłowym dojściu okna, oraz o błędzie w RichEd.DLL
(Jak dobrze zapamiętałem)
Sprawdziłem cały kod kilka razy i nie ma żadnych kodów (pisanych przeze mnie), które by sprawiły,
że może być tylko komponent TMemo.
Dodam, że błąd wywala tylko jeśli zostanie wcześniej wywołane
LogForm.show;
Kod formularza:
unit ServerLogForm;
{Zamiast TMemo zamieniam na TRichEdit (oczywiście na formularzu robię przez "klikanie",
a potem resztę procedur w kodzie manualnie)}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ComCtrls;
type
TLogForm = class(TForm)
SaveDialog1: TSaveDialog;
PopupMenu1: TPopupMenu;
Zapisz1: TMenuItem;
Wyczy1: TMenuItem;
Kopiuj1: TMenuItem;
Memo1: TMemo;
procedure Zapisz1Click(Sender: TObject);
procedure Wyczy1Click(Sender: TObject);
procedure Kopiuj1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure AddLog(s : string; color : integer = clBlue);
var
LogForm: TLogForm;
implementation
{$R *.dfm}
procedure AddLog(s : string; color : integer = clBlue);
begin
//LogForm.memo1.SelAttributes.Color := color; //tu w przypadku TRichEdit nie było komentarza
LogForm.memo1.Lines.Add(s);
end;
procedure TLogForm.Zapisz1Click(Sender: TObject);
begin
If savedialog1.Execute then
memo1.Lines.SaveToFile(Savedialog1.FileName);
end;
procedure TLogForm.Wyczy1Click(Sender: TObject);
begin
memo1.Lines.Clear;
end;
procedure TLogForm.Kopiuj1Click(Sender: TObject);
begin
memo1.CopyToClipboard;
end;
end.
Obsługa:
//Tworzenie: (w sekcji begin biblioteki)
LogForm := TLogForm.Create(Application);
//pokazywanie: (w buttonie drugiego formularza)
LogForm.Show;
//niszczenie: (w DLLProc)
if Reason = DLL_PROCESS_DETACH then
begin
LogForm.Free;
end;
Proszę też o uwagi na temat kodu.