AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

StringGrid-Komponente mit Checkbox

Ein Thema von BillieJoe90 · begonnen am 2. Apr 2007 · letzter Beitrag vom 12. Apr 2017
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: StringGrid-Komponente mit Checkbox

  Alt 12. Apr 2017, 10:14
Hallo,
ja, TAdvStringGrid kann Zellen mergen.
Das Beispiel zeigt das horizontale Mergen

AdvStringGrid1.MergeCells(1,6,10,1);
ab Cells[1,6] 10 Spalten mergen, 1 Zeile (also gar keine Zeilen mergen)

AdvStringGrid1.MergeCells(1,6,1,2);
Das würde Cells[1,6] und Cells[1,7] vertikal mergen.

https://www.tmssoftware.com/site/asg39.asp
Heiko

Geändert von hoika (12. Apr 2017 um 10:42 Uhr)
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
456 Beiträge
 
#2

AW: StringGrid-Komponente mit Checkbox

  Alt 12. Apr 2017, 10:17
danke wäre eine überlegung wert.Super Sache, was das kann.

Auch das hab ich gefunden: http://www.delphipages.com/forum/sho...d.php?t=211832

Geändert von wschrabi (12. Apr 2017 um 10:47 Uhr)
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
446 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: StringGrid-Komponente mit Checkbox

  Alt 12. Apr 2017, 10:19
Wenn es nur um ganze Zeilen geht, kannst du auch ein Zeile nehmen und sie doppelt so hoch machen...
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
456 Beiträge
 
#4

AW: StringGrid-Komponente mit Checkbox

  Alt 12. Apr 2017, 10:59
dankdir, ja aber ich hab trotzdem das tool gekauft. Kann mir viel Arbeit damit sparen.
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
456 Beiträge
 
#5

AW: StringGrid-Komponente mit Checkbox

  Alt 12. Apr 2017, 11:00
Hallo,


AdvStringGrid1.MergeCells(1,6,1,2);
Das würde Cells[1,6] und Cells[1,7] vertikal mergen.

https://www.tmssoftware.com/site/asg39.asp
Dank Dir genau das brauche ich, habe es mir gekauft. danke für den Tipp.
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
456 Beiträge
 
#6

AW: StringGrid-Komponente mit Checkbox

  Alt 12. Apr 2017, 15:27
Lieber Hoika,
also da Mergen klappt damit super. Siehe bild.

Delphi-Quellcode:
         for k := 0 to TTTOUtputlistmNEG.count-2 do
         begin
          Split(';', TTTOUtputlistmNEG[k] , TTTOutPutList) ;
          Memo2.Lines.Add(TTTOutPutList[0]);
          Memo2.Lines.Add(TTTOutPutList[1]);
          AdvStringGrid1.MergeCells(0,1+(k*2),1,2);
          AdvStringGrid1.MergeCells(1,1+(k*2),1,2);
          AdvStringgrid1.Cells[0,1+(k*2)]:=TTTOutPutList[0]+#10+TTTOutPutList[1];
         // AdvStringgrid1.Cells[0,1+(k*2+1)]:=TTTOutPutList[1];
          if checkbox3.Checked then
            AdvStringgrid1.Cells[1,1+(k*2+1)]:='true'
          else
            AdvStringgrid1.Cells[1,1+(k*2+1)]:='false'    ; // Checkbox state in col 1
          Advstringgrid1.RowCount:=2+(k*2+1);
         
         end;
Doch wie mache ich jetzt eine Checkbox in Spalte 1?
Kannst mir einen Tip geben?

Solution: https://www.tmssoftware.com/site/asg62.asp
DANKE
Angehängte Grafiken
Dateityp: jpg mergingcells.jpg (29,8 KB, 20x aufgerufen)

Geändert von wschrabi (12. Apr 2017 um 15:39 Uhr)
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
456 Beiträge
 
#7

AW: StringGrid-Komponente mit Checkbox

  Alt 12. Apr 2017, 15:33
Und WIE bitte installiert man die HILFE Dateinen unter WIN 10 ?
Schade dass man das alles manuell machen muss. Nicht sehr konfortabel.
ws
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
456 Beiträge
 
#8

AW: StringGrid-Komponente mit Checkbox

  Alt 12. Apr 2017, 15:57
Gelöst: Besten DANK für diesen Tipp:

Jetzt ist es fertig so wie es sein soll.
Delphi-Quellcode:
unit QMC_neu;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids,
  FMX.TextLayout, System.UIConsts, AdvUtil, AdvObj, BaseGrid, AdvGrid ;

type
  Tinputvec = array of integer;
  Tarrayofchar = array[1..1] of char;

  TForm2 = class(TForm)
    ButtonQMCcalc: TButton;
    Memo1: TMemo;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Label1: TLabel;
    Edit1: TEdit;
    Memo2: TMemo;
    ButtonTTCreate: TButton;
    //StringGrid1: TStringGrid;
    Label2: TLabel;
    CheckBox3: TCheckBox;
    AdvStringGrid1: TAdvStringGrid;
    procedure ButtonQMCcalcClick(Sender: TObject);
    procedure ButtonTTCreateClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure AdvStringGrid1CheckBoxClick(Sender: TObject; ACol, ARow: Integer;
      State: Boolean);
  private
    { Private declarations }
   procedure Split(Delimiter: Char; Str: string; ListOfStrings: TStrings) ;
   function readTTSetting(): Tinputvec ;
   procedure LadeDLL(Sender: TObject);
   (* procedure Stringgrid1DrawCellOverstrike(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState); *)

  
    
  public
    { Public declarations }
  end; 

const
   MAX = 2047;
  
var
  Form2: TForm2;

implementation

{$R *.dfm}


(*
//int __declspec(dllexport) __stdcall calcsum(double a, double b, double c){
function calcsum(a: double; b: double):integer ; stdcall; external 'qmc_dll_Project1.dll';

//char* __declspec(dllexport)__stdcall calcmain(int m_MTCOunt, const char* strInputvec) {
function calcmain( MTCount: integer; INputvec: string): string ;  stdcall; external 'qmc_dll_Project1.dll';

//char* __declspec(dllexport)__stdcall  getttterms(int m_MTCOunt) {
function getttterms( MTCount: integer): string ;  stdcall; external 'qmc_dll_Project1.dll';

//char * __declspec(dllexport)__stdcall calcmaindummy()
function calcmaindummy( ): string ; stdcall; external 'qmc_dll_Project1.dll';

//int __declspec(dllexport) __stdcall calcsum(double a, double b, double c){

*)


var
  Editing: Boolean;
  hmod : THandle;
  calcmain: function ( MTCount: integer; INputvec: PAnsichar): PAnsiChar ; stdcall;
  calcsum: function ( a: integer; b: integer; c: integer): integer ; stdcall;
  getttterms: function ( MTCount: integer): PAnsiChar ; stdcall;
  dummystdcall: procedure (inp: PAnsiChar) ; stdcall;
  displaytt: procedure (a: integer) ; stdcall;
  
  

Const CheckBoxCols = [1,2]; // Spalte 2 ohne Einträge

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    FreeLibrary(hmod);

end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  Editing:=true;
  AdvStringgrid1.Cells[0,0]:='Term';
  AdvStringgrid1.ColWidths[0]:=440;
  AdvStringgrid1.Cells[1,0]:='Checked=1 Unchecked=0';
  AdvStringgrid1.ColWidths[1]:=240;
  LadeDLL( Sender);
   
end;

procedure TForm2.LadeDLL(Sender: TObject);
begin
  hmod := LoadLibrary('QMC2.dll');
  //hmod := LoadLibrary('QMC_DLL_Project1v2.dll');
  if (hmod <> 0) then begin
    calcmain := GetProcAddress(hmod, 'calcmain');
    if (@calcmain <> nil) then begin
      //ShowMessage('calmain geladen');
    end
    else
      ShowMessage('GetProcAddress failed');
    getttterms := GetProcAddress(hmod, 'getttterms');
    if (@getttterms <> nil) then begin
      //ShowMessage('getttterms geladen');
    end
    else
      ShowMessage('GetProcAddress failed');
    displaytt := GetProcAddress(hmod, 'displaytt');
    if (@displaytt <> nil) then begin
      //ShowMessage('displaytt geladen');
    end
    else
      ShowMessage('GetProcAddress failed');
      
    calcsum := GetProcAddress(hmod, 'calcsum');
    if (@calcsum <> nil) then begin
      //ShowMessage(Format('Calcsum geladen: UND TEST: SUM(1,2,3) = %d',[calcsum(1,2,3)]));
    end
    else
      ShowMessage('GetProcAddress failed');
    (* 
    dummystdcall := GetProcAddress(hmod, 'dummystdcall');
    if (@dummystdcall <> nil) then begin
      //ShowMessage(Format('dummystdcall geladen: UND Return; = %s',[dummystdcall(PChar('www'))]));
      ShowMessage('dummystdcall geladen');
      dummystdcall(PAnsiChar('www'));
    end
    else
      ShowMessage('GetProcAddress failed');
    *)
  
      
  end
  else
   begin
   ShowMessage('LoadLibrary Failed!' + sLineBreak + SysErrorMessage(GetLastError));
   end;
end;


    procedure TForm2.ButtonTTCreateClick(Sender: TObject);
var
  TTTOutPutList: TStringList;
  TTTOutPutListmNEG: TStringList;
  QMC_TTT: ansistring;
  k: Integer;
  
begin
     try
       // if I make the CPPCLass locally then the prg crashes
       // at the second click on Create-True-Table
       // whithout the routine in CPPClass.cpp
       // char* outputTerm(char* pcTTT, int bitfield, int mask, int num)
       // it works fine.
       // Workarount, make CPPCLass global and call Create of this Class
       // at the beginning only once.
       //CPPClass := CreateCppDescendant;
    
       Memo2.Clear;
       memo2.Lines.Add('Input TrueTable:');
       AdvStringgrid1.Cells[0,0]:='Term';
       AdvStringgrid1.Cells[1,0]:='Checked=1 Unchecked=0';
       //stringgrid1.FixedRows:=1;
       Advstringgrid1.RowCount:=2;
       
       TTTOutPutListmNeg := TStringList.Create;
       TTTOutPutList := TStringList.Create;
       
       //displaytt( strtoint(trim(edit1.Text)));
       QMC_TTT:=getttterms( strtoint(trim(edit1.Text)));
       //ShowMessage(Format(' Return String is: %s',[QMC_TTT]));
       
       Split('#', QMC_TTT , TTTOutPutListmNEG) ;
       
       advstringgrid1.FixedCols := 0;
       //advstringgrid1.ColWidths[1] := 20;
       advstringgrid1.Options := advstringgrid1.Options + [goRowSelect, goEditing];
       Advstringgrid1.RowCount:=2+((TTTOUtputlistmNEG.count-2)*2+1);
       //advstringgrid1.RowCount := 20;
       advstringgrid1.ShowSelection := false;
       
       for k := 1 to advstringgrid1.RowCount -1 do
           advstringgrid1.AddCheckBox(1,k,false,false);
           
       //advstringgrid1.RandomFill(false,100);

         
         for k := 0 to TTTOUtputlistmNEG.count-2 do
         
         begin
          Split(';', TTTOUtputlistmNEG[k] , TTTOutPutList) ;
          Memo2.Lines.Add(TTTOutPutList[0]);
          Memo2.Lines.Add(TTTOutPutList[1]);
          AdvStringGrid1.MergeCells(0,1+(k*2),1,2);
          AdvStringGrid1.MergeCells(1,1+(k*2),1,2);
          AdvStringgrid1.Cells[0,1+(k*2)]:=TTTOutPutList[0]+#10+TTTOutPutList[1];
         // AdvStringgrid1.Cells[0,1+(k*2+1)]:=TTTOutPutList[1];
          AdvStringGrid1.SetCheckBoxState(1,1+(k*2),checkbox3.Checked);
          Advstringgrid1.RowCount:=2+(k*2+1);
         
         end;
     finally
       //CPPClass.Free;
       TTTOutPutList.Free;
       TTTOutPutListmNeg.Free;
  end;

end;

procedure TForm2.AdvStringGrid1CheckBoxClick(Sender: TObject; ACol,
  ARow: Integer; State: Boolean);
begin
  advstringgrid1.RowSelect[Arow] := State;
end;


procedure Tform2.Split(Delimiter: Char; Str: string; ListOfStrings: TStrings) ;
begin
   ListOfStrings.Clear;
   ListOfStrings.Delimiter := Delimiter;
   ListOfStrings.StrictDelimiter := True; // Requires D2006 or newer.
   ListOfStrings.DelimitedText := Str;
end;


function TForm2.readTTSetting(): tinputvec ;
var
  I: Integer;
  num: integer;
  ptrinresult: ^tinputvec ;
  inresult: tinputvec ;
  state: boolean;
begin
   num:=2 shl (strtoint(trim(edit1.Text))-1); // 2^num
   SetLength(inresult,num);
   for I := 0 to num-1 do
      begin
      inresult[i]:=0;
      end;
   for I := Low(inresult) to num do
      begin
      Advstringgrid1.GetCheckBoxState(1,i,state);
      if state then
         inresult[i]:=1
      else
         inresult[i]:=0;
         
      end;
   Result:=inresult;

end;


procedure TForm2.ButtonQMCcalcClick(Sender: TObject);
var
  OutPutList: TStringList;
  QMC_RESULT: Ansistring;
  ptrInputVec: ^TInputvec ;
  InputVec: TInputvec ;
  strInputVec: ansistring ;
  maxrun,num: integer;
  I,k: Integer;

begin
  if checkbox2.Checked then maxrun:=300 else maxrun:=1;

  for I := 1 to maxrun do
     begin
      
     try
     
       num:=round(2 shl (strtoint(trim(edit1.Text))-1)); // 2^num

       GetMem(ptrINputVec, num*SizeOf(Integer));
       INputVec:= readTTSetting();
       // if I make the CPPCLass locally then the prg crashes
       // at the second click on Create-True-Table
       // whithout the routine in CPPClass.cpp
       // char* outputTerm(char* pcTTT, int bitfield, int mask, int num)
       // it works fine.
       // Workarount, make CPPCLass global and call Create of this Class
       // at the beginning only once.
       //CPPClass := CreateCppDescendant;
    

       OutPutList := TStringList.Create;
       //CPPCLass.MTCount:=strtoint(trim(Edit1.text));
       // As I have problems in doing it with an array of int I do it with str
       strINPUTVec := '';
       for k := 0 to num-1 do
         begin
         strINPUTVec:=strINPUTVec+Format('%d',[INputVec[k]]);
         end;
       
       QMC_Result:=calcmain( strtoint(trim(Edit1.text)), PAnsiChar(strINputvec));//(CPPCLass.text);
       Split(':', QMC_Result , OutPutList) ;
       Memo1.Lines.Add(Format(' %s',[OutPutList[0]]));
       Memo1.Lines.Add(Format('Result for RUN-Nummer: %3d %s',[i,OutPutList[1]]));
       
     finally
       //CPPClass.Free;
       OutPutList.Free;
       FreeMem(ptrINputVec);
       
    
     end;
  end;
end;

end.
Angehängte Grafiken
Dateityp: jpg ok.jpg (27,4 KB, 27x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz