- Код: Выделить всё
Function TForm1.InputStr(Q,D:String;W:Integer):String;
Var
L,l1,l2:TLabel;
E:TEdit;
B:TButton;
EK:TkeyEvent;
rF:TForm;
begin
rF:=TForm.Create(Application);
rF.Top:=top+20;
rf.Left:=Left+10;
rF.Width:=W;
rF.Height :=100;
// ....
if rF.ShowModal=mrOk then
inputStr:=e.text else inputStr:=D;
rF.Free;
end ;
procedure TForm1.VST3ColumnClick(Sender: TBaseVirtualTree;
Column: TColumnIndex; Shift: TShiftState);
var
Data: PLCLTextData;
S,S1,s2:String;
PS:PString;
begin
if VST3.FocusedNode = nil then exit;
Data := VST3. GetNodeData(VST3.FocusedNode);
if ssCtrl in Shift then begin
PS:= Data^.T2 ; if PS<>Nil then S1:=PS^ else S1:='' ;
// DisposeStr(PS) ;// ТАК НЕ РАБОТАЕТ !
S2:=InputStr(Data^.T1^,s1,220);
Data^.T2 := NewStr(S2);
DisposeStr(PS) ;// ТАК РАБОТАЕТ ...
end else
VST3.EditNode(vst3.FocusedNode,1);
end;
Суть вот в чем
if rF.ShowModal=mrOk then в InputStr...
Выдает исключение при вызове очистки строки (DisposeStr(PS) ; ) перед вызовом S2:=InputStr(Data^.T1^,s1,220);
Честно говоря я в полном замешательстве, как вообще может влиять процедура DisposeStr на код в другом методе ...никак не связный с ней даже данными ( тем более что если поставить DisposeStr после вызова InputStr все работает ... )