TStringGrid mit Editor

Rund um die LCL und andere Komponenten
Antworten
EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

TStringGrid mit Editor

Beitrag von EugenE »

Ich habe ein Problem ^^ , habe mir vom beispiel gridcelleditor angeguckt wie man mit der TStringGrid auch Editoren benutzen kann, so genauso gemacht - funktioniert

so nach paar Tagen - ich habe nix an der TStringGrid oder beim Editor aufrufen geändert - wird kein Editor angezeigt also nur der Standard-Text Editor aber die Checkboxen oder Combobox wird nicht mehr angezeigt

macht der TStringGrid einfach so mal was der will oder wie? :-D

dann hab ich einfach mal vom beispiel alles kopiert und in mein projekt reingepackt, dann kamen wieder die Checkboxen etc, jetzt wieder paar Tage später - nix geändert - geht es wieder nicht

ich verstehe das nicht :'(

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 »

Ohne Beispiel ist das für uns wohl auch schlecht nachvollziehbar.
Ein programm macht aber normalerweise nicht was es will sondern das was man reinprogrammiert hat. Und 90% solcher Meldungen stellen sich ja mittlerweile als programmierfehler heraus. Wenn du da Hilfe willst solltest du schon mal ein testprojekt veröffentlichen mit dem man das nachvollziehen kann...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

ich glaube wenn ich ein testprojekt machen würde , würde es wieder funktionieren^^ und ich will nicht immer wieder die form neumachen bei jedem male wenn es nich geht :(

Edit:

habe jetzt die Form die ich im Projekt auch habe extrahiert und in ein eigenes projekt gesteckt , siehe Anhang

als beispiel habe ich das gridcelleditor projekt genommen welches unter /lazarus/examples zufinden ist
Dateianhänge
grideditor.zip
(118.44 KiB) 59-mal heruntergeladen

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 »

Also zum nachvollziehen: Du hast ein Projekt erstellt, wo du eine TStringGrid und das hast du Konfiguriert. Und nach einigen tagen wird die TStringGrid nicht mehr angezeigt in deinem Projekt.

Spielst du evlt. Backups wieder zurück ? Ich sehe du verwendest auch Linux, wird da ab und zu die Platten nicht richtig erkannt ?
(evlt. wegen Fehler auf den Platten), aber so ein Verhalten kann eigentlich recht viele Ursachen haben. Du solltest und schon etwas mehr geben mit dem wir was anfangen können.

So könnten wir nur "Gut Raten" was aber eigentlich zu nix führen kann.
MFG
Michael Springwald

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

Ne die StringGrid wird angezeigt, nur werden die genutzen Editoren nicht automatisch auf Visible gesetzt, was aber vorher immer geschah :(

hab ja jez nen Beispiel hinzugefügt wo es eigentlich gehen sollte aber nicht geht^^

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 »

OK, kannich jetzt nur bestätigen.
Ich kenn mich damit auch nicht tief aus aber schaut gut aus.
Vieleicht findet sich jemand der schonmal mit den Inplace Editoren des grids gearbeitet hat, wenn nicht mach mal n Bugreport und häng das als example Projekt an. Damit ists für die Entwickler auf jeden fall sofort nachvollziehbar.
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 »

Ach so darum geht es, kann es sein das es dort eine ReadOnly Eigenschaft gibt ?
Wenn ja schau mal nach wie die gestellt ist. Wenn du den Fehler zurück verfolgen willst, solltest du in den entscheidenen stellen einfach ein Writeln setzten, wenn der Debugger bei dir nicht läuft.
Weil irgendwo muss ja ein Fehler sein.
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 »

Ach Pluto, wenn du kein Bock hast dich mit dem problem zu ebschäftigen und keine Ahnung hast dann halt doch einfach ma n rand. Das kotzt mich so an Sorry.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

Hier das Example Projekt

habe bei beiden Projekten Eigenschaft für Eigenschaft durchgeguckt, aber keine größere Änderung feststellen können :(
Dateianhänge
gridcelleditor_example.zip
(80.48 KiB) 54-mal heruntergeladen

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

Beitrag von theo »

Mach mal die "With" weg in StringGrid1SelectEditor.
Bei mir funktioniert dein Code auf Anhieb gar nicht, erst wenn ich die withs da rausmache.
Das with Statement führt meiner Erfahrung nach häufig zu seltsamen Fehlern.
Man sollte es meiden (Habe ich schon oft in diesem Forum gesagt).

Code: Alles auswählen

procedure TTableAddForm.StringGrid1SelectEditor(Sender: TObject; aCol, aRow: Integer;
  var Editor: TWinControl);
begin
  if aRow=0 then Exit;
  case aCol of
       0: begin
          CheckListBox1.Checked[0] := false;
 
          CheckListBox1.BoundsRect := TStringGrid(Sender).CellRect(aCol,aRow);
          if TStringGrid(Sender).Cells[aCol,aRow] = 'True' then
             CheckListBox1.Checked[0] := true;
 
          Editor := CheckListBox1;
          end;
       2: begin
               ComboBox1.BoundsRect := TStringGrid(Sender).CellRect(aCol,aRow);
               ComboBox1.Text := TStringGrid(Sender).Cells[TStringGrid(Sender).Col,TStringGrid(Sender).Row];
               Editor:=ComboBox1;
          end;
        5: begin
                CheckListBox2.BoundsRect :=TStringGrid(Sender).CellRect(aCol,aRow);
                CheckListBox2.Checked[0]:=true;
                CheckListBox2.Checked[1]:=false;
 
                if Pos('NOT NULL',TStringGrid(Sender).Cells[aCol,aRow]) <> 0 then
                   CheckListBox2.Checked[0] := false;
 
                if Pos('AUTO INCREMENT',TStringGrid(Sender).Cells[aCol,aRow]) <> 0 then
                   CheckListBox2.Checked[1] := true;
 
                CheckListBox2.Height:=40;
           Editor := CheckListBox2;
           end;
  end;
end;

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 »

Code: Alles auswählen

if aRow=0 then Exit;
  case aCol of
       0: begin
            CheckListBox1.Checked[0] := false;
            CheckListBox1.BoundsRect := TStringGrid(Sender).CellRect(aCol,aRow);
            if TStringGrid(Sender).Cells[aCol,aRow] = 'True' then
               CheckListBox1.Checked[0] := true;
            Editor := CheckListBox1;
          end;
       2: begin
            with ComboBox1 do
              begin
                BoundsRect := TStringGrid(Sender).CellRect(aCol,aRow);
                Text := TStringGrid(Sender).Cells[TStringGrid(Sender).Col,TStringGrid(Sender).Row];
              end;
            Editor:=ComboBox1;
          end;
        5: begin
             with CheckListBox2 do
               begin
                 BoundsRect := TStringGrid(Sender).CellRect(aCol,aRow);
                 Checked[0]:=true;
                 Checked[1]:=false;
                 if Pos('NOT NULL',TStringGrid(Sender).Cells[aCol,aRow]) <> 0 then
                   Checked[0] := false;
                 if Pos('AUTO INCREMENT',TStringGrid(Sender).Cells[aCol,aRow]) <> 0 then
                   Checked[1] := true;
                 Height:=40;
               end;
             Editor := CheckListBox2;
           end;
  end;
probiers mal so
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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 »

LoL, war ich wohl 4 min zu spät
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

tatsächlich dann geht es :), ich dachte das with ist extra dazu da um weniger code zu schreiben ^^ aber bringt echt wohl nur fehler ^^ , naja jetzt ist man wieder schlauer ^^ , vielen Dank :)

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

Beitrag von theo »

EugenE hat geschrieben:tatsächlich dann geht es :), ich dachte das with ist extra dazu da um weniger code zu schreiben ^^ aber bringt echt wohl nur fehler
Wenn es nicht den Compiler verwirrt, dann mindestens den Programmierer.
Ich stehe zu meiner Aussage:
http://www.lazarusforum.de/viewtopic.php?p=18074#18074" onclick="window.open(this.href);return false;

;-)

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 »

Naja in Delphi ging das mit wiht aber in Lazarus nutzt ich das eigentlich auch recht wenig, warum weiß ich gar nicht. Weil es würde eigentlich den Code auch übersichtlicher gestalten, wenn man es mit bedacht einsetzt. Und auch auf Verschachtelungen versichtet.
MFG
Michael Springwald

Antworten