Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StringGrid mit internen Button (https://www.delphipraxis.net/62059-stringgrid-mit-internen-button.html)

WoTo 30. Jan 2006 14:43


StringGrid mit internen Button
 
Hallo zusammen,
ich habe mir eine neue Klasse geschrieben, die von TStringGrid abgeleitet ist. Die neue Klasse (TStringGridEx) besitzt die Möglichkeit in einer bestimmten Zelle einen Button zu plazieren.
Über eine weitere Methode kann man sich den Button dann als Objekt übergeben lassen.

Setzt man dann das Enable-Property auf false, so wird der Button im StringGrid auch disabled angezeigt. Wenn ich allerdings das Visible-Property auf false setze, passiert nichts. Der Button wird weiterhin dargestellt und genau das ist mein Problem.

Warum wird der Button trotzdem dargestellt, obwohl Visible:=false ist ?

Luckie 30. Jan 2006 14:45

Re: StringGrid mit internen Button
 
Ohne Code gesehen zu haben lässt sich nur ins Blaue raten: Weil der Button nach dem setzen der Property erstellt wird?

WoTo 30. Jan 2006 16:46

Re: StringGrid mit internen Button
 
Hallo Michael,
das StringGrid führt intern eine ObjektListe mit allen Objekten, die im StringGrid verwendet werden.
Nun kann ich mir den Button einer Zelle geben lassen, in etwa so:

Delphi-Quellcode:
procedure SetButton(ARow,ACol : integer);
var
 AButton : TButton;
begin
 if StringGridEx1.GetObject(ARow,ACol) is TButton
 then begin
  AButton := StringGridEx1.GetObject(ARow,ACol) as TButton;
  AButton.Visible := false;
 end;
end;
Jetzt müßte der Button im Grid unsichtbar sein !

Der Button hat als Parent den gleichen, wie das StringGrid.
Vielleicht liegt beim Parent der Hund begraben ?

Gruß
Wolfgang

Christian Seehase 30. Jan 2006 17:05

Re: StringGrid mit internen Button
 
Moin Wolfgang,

probier doch mal aus, ob es nicht mit einem anschliessenden Invalidate, Repaint, Refresh (jeweils oder) mit dem Button funktioniert.

WoTo 30. Jan 2006 19:20

Re: StringGrid mit internen Button
 
Hallo Christian,
mit Repaint oder Refresh hatte ich es schon versucht. Mit Invalidate jedoch noch nicht, werde dies noch machen und berichten. Wird aber wahrscheinlich erst am Freitag etwas werden.

Bis dahin, viele gute Ideen !
Wolfgang

WoTo 7. Feb 2006 13:31

Re: StringGrid mit internen Button
 
Liste der Anhänge anzeigen (Anzahl: 2)
Leider hat es mit Invalidate auch nicht geklappt. :wall:

Ich habe nun das gesamte Projekt mal als Anhang zum Download bereitgestellt. Das Projekt benötigt eine selbstgeschriebene Komponente TStringGridEx, die auch im Anhang enthalten ist.

In der folgenden Procedure setzte ich zur Probe das Visible-Property des Buttons auf false. Nun dürfte der Button nicht mehr dargestellt werden:

Delphi-Quellcode:
procedure TForm1.sgZipProjectCBClick(ACheckBox: TGridCheckBoxExt; ACol,
  ARow: Integer);
var
  ABT : TGridButton;
begin
  ABT := sgZipProject.Button[4,ARow];
  if ABT <> Nil
  then if ACheckBox.Checked
          then ABT.Enabled := true
          else begin
            ABT.Enabled := false;
            ABT.Visible := false;
          end;
end;
Das gleiche Problem habe ich, wenn ich alle Zip-Projekte im StringGrid lösche.

Das Programm soll später einmal in der Lage sein, verschiedene Zip-Projekte manuell oder nach Zeit auszuführen. Die Zip-Projekte beinhalten Zip-Jobs, die wiederum alle Dateien enthalten, die gepackt werden sollen. Dadurch ist es möglich, einfach und schnell alle Dateien eines Projektes zum Feierabend zu packen ohne sich jedesmal zu fragen, ob jetzt wirklich alle benötigten Dateien im Ziparchive enthalten sind.

Gruß,
Woto

WoTo 17. Feb 2006 12:12

Re: StringGrid mit internen Button
 
Hat denn keiner irgendeine Idee ? :gruebel:

Gruß
Woto


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz