>>Но ты по моему просто не "вник" ...
Я вникать не собираюсь. И другим не советую - нечего поощрять чужую лень.
Минимальный пример - почти всегда это уже решение проблемы, как минимум она перестанет быть загадочной и станет элементарной
Модератор: Модераторы
сделали, мордой ткнули, убедили. А так: есть бубен... он помогает ВСЕМ.я реально несколько раз пытался готовить минимальный пример
и до сих пор удивляюсь как это работало.
unit CT_u1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
public
end;
TLCLTextData = record
T1: PString;
T2: PString;
DT : Integer;
end;
PLCLTextData = ^TLCLTextData;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
Function inputStr(Q,D:String;W:Integer):String;
Var
L,l1,l2:TLabel;
E:TEdit;
B:TButton;
rF:Tform;
begin
rF:=Tform.Create( Application);
begin
L:=TLabel.Create(rf);
l.Caption:=Q; L.Align:=alTop;
L1:=TLabel.Create(rf);
l1.Caption:='Название'; L1.Align:=alTop;
L2:=TLabel.Create(rf);
l2.Caption:='Значение'; L2.Align:=alTop;
E:=TEdit.Create(rf);
E.Text:=D;
E.Align:=alTop;
B:=TButton.Create(rf);
b.Align:=alTop;
B.Caption:='Ok';
B.ModalResult:=mrOk;
rf.InsertControl(b);
rf.InsertControl(e);
rf.InsertControl(l2);
rf.InsertControl(l);
rf.InsertControl(l1);
end;
rF.Top:=top+20;
rf.Left:=Left+10;
rF.Width:=W;
rF.Height :=100;
l.Caption:=Q;
if rF.ShowModal=mrOk then
inputStr:=e.text else inputStr:=D;
rF.Free;
end ;
var
Data: PLCLTextData;
S,S1,s2:String;
PS:PString;
begin
Data:=GetMem(SizeOf(TLCLTextData));
Data^.T1:=NewStr('Вес в МТ'); Data^.T2:=NewStr('00000');
PS:= Data^.T2 ;S:=Data^.T1^;
if PS<>Nil then S1:=PS^ else S1:='' ;// Тут ясное дело проверка не нужна но для чистоты эксперимента пусть будет ...
DisposeStr(PS);PS:=Nil;
S2:=InputStr(S,s1,220);
Data^.T2 := NewStr(S2); //DisposeStr(PS);
Label1.Caption:=Data^.T2^;
FreeMem(Data);
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var
Node: PVirtualNode;
Data: PLCLTextData;
begin
With VST3 do
begin
NodeDataSize := SizeOf(TLCLTextData);
Node := AddChild(nil );
Data := GetNodeData(Node);
Data^.T1:=NewStr('Вес в МТ'); Data^.T2:=NewStr('00000');
//ValidateNode(Node, False); // понятия не имею нужна ли это строка но что с ней что без нее.. результат тот-же . :idea:
end;
end;
Alex2013 писал(а):Или я что-то не понял ....Или вы хотите сказать что S1:=PS^ передает не данные, а УКАЗАТЕЛЬ ? Но это же бред какой-то ...
Alex2013 писал(а):... В примерах на wiki.lazarus.freepascal.org вроде делают что-то похожее на мои каракули...
procedure TForm1.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
Data: PTreeData;
begin
Data := VST.GetNodeData(Node);
if Assigned(Data) then begin
Data^.Column0 := '';
Data^.Column1 := '';
Data^.Column2 := '';
end;
end;
procedure TForm1.VST3FreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
Data: PLCLTextData;
begin
Data := Sender.GetNodeData(Node);
Data^.T1 := '';
Data^.T2 := '';
end;
procedure TForm1.VST3FreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
Data: PLCLTextData;
begin
Data := Sender.GetNodeData(Node);
DisposeStr(Data^.T1);
DisposeStr(Data^.T2);
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19