VST zu laufzeit erstellen und mit Einträgen füllen

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

VST zu laufzeit erstellen und mit Einträgen füllen

Beitrag von pluto »

Hallo,
ich habe einen nervigen bug in der VST Enteckt und zwar:
erstelle ich zur lauf zeit mit diesem code eine VST Komponente:

Code: Alles auswählen

procedure TForm1.AddPanel(PCaption:String);
var
  pl,pl1,pl2:TPanel;
  i,px,py:Integer;
  sp,sp1,sp2,sp3:TSpeedButton;
  lb,lb1:TLabel;
  cb:TComboBox;
  vst:TVirtualStringTree;
begin
  inc(Index); px:=0; py:=0;
  PCaption:=PCaption+IntTostr(index);
//  if GetFreePos
 
  pl:=TPanel.Create(ScrollBox1); pl.Parent:=ScrollBox1;
  pl.Width:=308; pl.Height:=406;
 
  if nx+1  < mx then
    inc(nx)
  else begin
    nx:=0;
    inc(ny);
  end;
 
  px:=px+((pl.Width+5)*nx);
//  if ny > -1 then
    py:=py+((pl.Height+5)*ny);
  //else
    //py:=0;
 
  Caption:=IntTostr(nx) + '\' + IntTostr(ny);
  pl.Left:=px; pl.Top:=py; pl.Tag:=index;
 
  // Das Erste Panel wird erstellt
  pl1:=TPanel.Create(pl); pl1.Parent:=pl; pl1.Visible:=True;
  pl1.left:=0; pl1.top:=0; pl1.Width:=306; pl1.Height:=24;
  pl1.Align:=alTop;
 
// Komponenten zum Erste Panel hinzufügen
 
  // Die Speed Buttons werden erstellt
  sp:=TSpeedButton.Create(pl1); sp.Parent:=pl1; sp.Caption:='&X';
  sp.Left:=280; sp.Top:=0; sp.Width:=23; sp.Height:=22; sp.tag:=1;
  sp.OnClick:=@SPClick;
 
  sp1:=TSpeedButton.Create(pl1); sp1.Parent:=pl1; sp1.Caption:='&M';
  sp1.Left:=253; sp1.Top:=0; sp1.Width:=23; sp1.Height:=22; sp1.tag:=2;
  sp1.OnClick:=@SPClick;
 
  sp2:=TSpeedButton.Create(pl1); sp2.Parent:=pl1; sp2.Caption:='&V';
  sp2.Left:=225; sp2.Top:=0; sp2.Width:=23; sp2.Height:=22; sp2.Tag:=3;
  sp2.OnClick:=@SPClick;
  // Label wird erstellt
  lb:=TLabel.Create(pl1); lb.Parent:=pl1; lb.Caption:=PCaption;
  lb.Left:=0; lb.Top:=0; lb.Width:=225; lb.Height:=17;
 
// Komponenten zum zweiten Panel hinzufügen
  pl2:=TPanel.Create(pl); pl2.Parent:=pl; pl2.Visible:=True;
  pl2.left:=0; pl2.top:=25; pl2.Width:=306; pl2.Height:=60;
  pl2.Align:=alTop;
 
  lb1:=TLabel.Create(pl2); lb1.Parent:=pl2; lb1.Caption:='Verzeichnis';
  lb1.Left:=6; lb1.Top:=4; lb1.Width:=83; lb1.Height:=17;
 
  cb:=TComboBox.Create(pl2); cb.Parent:=pl2;
  cb.Left:=6; cb.Top:=23; cb.Width:=265; cb.Height:=25;
  cb.Text:='/media/hda7/';
 
  sp3:=TSpeedButton.Create(pl2); sp3.Parent:=pl2; sp3.Caption:='...';
  sp3.Left:=277; sp3.Top:=23; sp3.Width:=23; sp3.Height:=22; sp3.tag:=4;
  sp3.OnClick:=@SPClick;
// VST zum hintergrund Panel hinzufügen
  vst:=TVirtualStringTree.Create(pl); vst.Parent:=pl;
  vst.left:=6; vst.top:=90; vst.Width:=290; vst.Height:=300;
  vst.ScrollBarOptions.AlwaysVisible:=True;
  vst.NodeDataSize:=SizeOF(TDir);
  vst.OnGetText:=@listeGetText;
 
  with ListView1.Items.add do begin
    Caption:=PCaption;
    SubItems.Add('1');
  end;
end;
Einträge füge ich so hinzu:

Code: Alles auswählen

procedure TForm1.AddVST(Vst:TVirtualStringTree;pCaption,FileName:String);
var
  node:PVirtualNode;
  dir:pDir;
begin
  writeln(Filename, '|',pCaption);
 
  node:=vst.AddChild(nil);
  node^.CheckState:=csCheckedNormal;
  node^.CheckType:=ctCheckBox;
 
  dir:=vst.GetNodeData(node);
  dir^.caption:=pCaption;
  dir^.FileName:=Filename;
  dir^.TempName:='';
  dir^.dir:=Filename
 
end;
und per button starte ich das einfügen:

Code: Alles auswählen

pl1:=TPanel(TPanel(TPanel(TSpeedButton(Sender)).Parent).Parent);
         vst:=TVirtualStringTree(pl1.Controls[2]);
 
 
         cb:=TCombobox(TPanel(TSpeedButton(Sender)).Parent.Controls[2]);
         caption:=cb.Text;
         LoadDir(cb.text,vst);
also das einfügen geht, das auswählen auch aber nur wenn ich das Item voher mit der Tastertur angewählt habe. Sonst lässt es sich nicht auswählen.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Hab dir schonmal für das selbe Problem gesagt, FullRowSelect auf True und alles ist schön. Der Thread dürfte sich ja noch finden lassen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

achja danke, da wahr was...
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich finde das sollte es auto. beim manuellen erstellen der Komponente passieren.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Naja es ist ja n Bug bloss stört der mich momentan nicht sonderlich :p
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ja ich weiß wie viele Dinge, Mal abwarten und Tee trinken wenn dich dieser Bug stört, ist das denn so aufwendig das um zu stellen ? ist doch nur eine Zeile *G*
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Damit ist doch der Bug nicht behoben !?
Bringt doch gar nichts FollRowSelect default auf True zu stellen. Das ist wieder am Problem vorbei gearbeitet.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

warum ?
sobald das auf True ist, kann ich prima die Einträge mit der Maus auswählen.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ja aber dafür ist immer die Ganze zeile markiert was ja im normalzustand nicht so sein sollte.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

und warum kann ich wenn ich das auf False schalte keine Einträge mit der Maus markieren ? hast du das gemeint ?
und darum ist das so aufwendig den "richtigen" Fehler zu finden ?
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10931
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:und warum kann ich wenn ich das auf False schalte keine Einträge mit der Maus markieren ? hast du das gemeint ?
und darum ist das so aufwendig den "richtigen" Fehler zu finden ?
Mach doch. Und wenn du grad dabei bist: ich möchte die Spalten im Reportmode in der Breite verändern können durch ziehen am "Header-Splitter". Diese Lösung könntest du auch gleich in den selben Patch packen ;-) Oder geht das irgendwie so?
Zuletzt geändert von theo am Do 19. Apr 2007, 12:05, insgesamt 1-mal geändert.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

lustig. Meine ändergunen werden so oder so nicht übernommen.
Warum sollte ich mich dann damit befassen ?
erst wenn ich ich sehe das meine änderungen in der IDE eingebaut sind, befass ich mich damit wieder. Schließlich ist das nicht mein Projekt sondern Christian's
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10931
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:lustig. Meine ändergunen werden so oder so nicht übernommen.
Wenn sie funzen bin ich mir sicher, dass sie übernommen werden.
pluto hat geschrieben:Warum sollte ich mich dann damit befassen ?
Weil DU's haben willst!
pluto hat geschrieben:erst wenn ich ich sehe das meine änderungen in der IDE eingebaut sind, befass ich mich damit wieder.
Was hat das mit der IDE zu tun?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Pluto wenn du Patches für Fehler lieferst werden die mit SICHERHEIT überall übernommen werden. Auch in der IDE z.b..
Wenn due aber Patches für Funktionen lieferst die niemand braucht ausser du und dazu noch schlechten Code ablieferst wird das eben NICHT übernommen.

Das sind 2 grundsätzlich verschiedene Dinge.
Und VST ist nicht mein Projekt ich hab den Port gemacht. Du kannst mir gern Einen Betrag > 100 Eur Spenden dann werde ich mich gern dransetzen und den Fehler suchen und beheben. Das wird mit sicherheit mehr als 2 h dauern und für 50 Eur pro Stunde bekommst sonst keinen freien Programmierer. So Ende der Diskussion. Ich bin mir übrigendes sicher das auch Monta deine Funktion implementiert wenn du ihm das ausreichend bezahlst. Ansonsten freu dich das es Open Source gibt und die ganze Arbeit für dich gemacht wurde und hör auf rumzu-mopen so macht man sich keine Freunde.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Christian hat geschrieben: Ich bin mir übrigendes sicher das auch Monta deine Funktion implementiert wenn du ihm das ausreichend bezahlst
Sehr schöne Idee, bin ich sofort einverstanden damit :D

Antworten