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 Combobox in der Zelle eines Stringgrids (https://www.delphipraxis.net/41143-combobox-der-zelle-eines-stringgrids.html)

Flogo 26. Feb 2005 18:20


Combobox in der Zelle eines Stringgrids
 
Hi :hi:

Mich würde mal interessieren, ob und wenn ja wie man eine Combobox in einer Zelle eines Stringgrids/Drawgrids reinbekommt, so dass man in einer Zelle eben nicht nur Text eingeben kann, sondern zwischen verschiedenen Vorgabewerten wählen kann.

Muss man das Zeichnen selber übernehmen und die Klicks auf das Grid abfangen und auswerten? oder kann man die Delphi-Komponete (TCombobox) benutzen?

Die Muhkuh 26. Feb 2005 19:40

Re: Combobox in der Zelle eines Stringgrids
 
Hi Flo,

einfach mal suchen, das wurde schon durchgekaut.

sniper_w 26. Feb 2005 19:47

Re: Combobox in der Zelle eines Stringgrids
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das sollte dir weiter helfen...:)

Flogo 26. Feb 2005 20:10

Re: Combobox in der Zelle eines Stringgrids
 
Wow! Vielen Dank! :party:

Flogo 27. Feb 2005 10:59

Re: Combobox in der Zelle eines Stringgrids
 
Ich hab mir jetzt aus den verschiedenen Threads folgendes zusammengebaut (Die meisten wahren ja zum DBGrid + Checkbox). Weil es bei mir viel kürzer geworden ist, als bei den meisten Beispielen wüsste ich gerne ob ich nicht irgendwas wichtiges vergessen hab.

Delphi-Quellcode:
function TStringGridEx.AddComboBox(aCol, aRow: Integer): TComboBox;
var Rect: TRect;
begin
  Result := TComboBox.Create(Owner);
  Objects[aCol, aRow] := Result;
  Result.Parent := Parent;
  Result.Color := clWindow;
  Rect := CellRect(aCol, aRow);
  Result.Left := Left + Rect.Left +2;
  Result.Top := Top + Rect.Top +2;
  Result.Width := Rect.Right - Rect.Left;
  Result.Height := Rect.Bottom - Rect.Top;
end;

Mamphil 20. Mär 2005 15:35

Re: Combobox in der Zelle eines Stringgrids
 
Hi!

Irgendwie stehe ich ein bisschen auf dem Schlauch... Wie bekommt man die Funktion TStringGridEx.AddComboBox(aCol, aRow: Integer): TComboBox; zum Laufen?

Ich erhalte immer einen ganzen Schwanz von Fehlermeldungen beim Compilieren:
Code:
  [Fehler] Unit1.pas(27): Funktion benötigt Ergebnistyp
[Fehler] Unit1.pas(30): Undefinierter Bezeichner: 'Owner'
[Fehler] Unit1.pas(31): Undefinierter Bezeichner: 'Objects'
[Fehler] Unit1.pas(31): Undefinierter Bezeichner: 'aRow'
[Fehler] Unit1.pas(32): Operator oder Semikolon fehlt
[Fehler] Unit1.pas(33): Operator oder Semikolon fehlt
[Fehler] Unit1.pas(34): Undefinierter Bezeichner: 'CellRect'
[Fehler] Unit1.pas(35): Operator oder Semikolon fehlt
[Fehler] Unit1.pas(36): Operator oder Semikolon fehlt
[Fehler] Unit1.pas(37): Operator oder Semikolon fehlt
[Fehler] Unit1.pas(38): Operator oder Semikolon fehlt
Kann mir jemand zumindest den ersten Fehler "Funktion benötigt Ergebnistyp" erklären? Ich habe die Funktion einfach einmal in meien Unit kopiert, die Units Grids und StdCtrls sind auch in der Uses-Clause drin...

Vielen Dank im Voraus!
Mamphil

Christian Seehase 20. Mär 2005 16:22

Re: Combobox in der Zelle eines Stringgrids
 
Moin Mamphil,

ich denke mal, dass Du Dir keine Klasse TStringGridEx erstellt hast.
Bei AddComboBox handelt es sich nicht um einen einzeln nutzbare Funktion, sondern eine Methode der oben genannten Klasse.

Mamphil 20. Mär 2005 17:24

Re: Combobox in der Zelle eines Stringgrids
 
Hi!

:wall: Danke für den dezenten Hinweis. Es muss also das folgende im interface-Abschnitt stehen:
Delphi-Quellcode:
type
  TStringGridEx = class(TStringGrid)
    function AddComboBox(aCol, aRow: Integer): TComboBox;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
Auf die leeren private- und public-Abschnitte kann aber doch verzichtet werden?

[EDIT]
Gibt es eigentlich eine Möglichkeit ein TStringGrid in ein TStringGridEx umzuwandeln oder muss man das TStringGridEx immer zur Laufzeit erstellen?
[/EDIT]

Vielen Dank für die Hilfe!
Mamphil

Christian Seehase 20. Mär 2005 18:12

Re: Combobox in der Zelle eines Stringgrids
 
Moin Mamphil,

klar kannst Du die nicht benötigten Abschnitte weglassen.

Zitat:

Zitat von Mamphil
Gibt es eigentlich eine Möglichkeit ein TStringGrid in ein TStringGridEx umzuwandeln oder muss man das TStringGridEx immer zur Laufzeit erstellen?

Du kannst Dir eine Unit mit der Deklaration erstellen, ergänzt, um

Delphi-Quellcode:
procedure Register;
im interface-Abschnitt

die dann, z.B. so aussehen kann.

Delphi-Quellcode:
procedure Register;
begin
 RegisterComponents('Meine Kompos', [TStringGridEx]);
end;
Die Unit kommt dann, z.B., in das Delphi\Lib-Verzeichnis, und kann dann einem Package zugefügt werden, dass Du installierst.
Wenn Du es noch besonders "nett" machen willst machst Du Dir eine DCR-Datei (Delphi-Bildeditor), um ein eigenes Icon für die Kompo zu haben.

Mamphil 20. Mär 2005 18:57

Re: Combobox in der Zelle eines Stringgrids
 
Hi!

Vielen Dank für die sehr ausführliche Antwort! Ich werd mal sehen, was ich damit machen kann...

Mamphil


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 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