![]() |
Re: Comboboxen in einem StringGrid
:oops: Richtig, also wenn das OnSelectCell Ereigniss auf eine Zelle der entsprechenden Spalte weist?!
|
Re: Comboboxen in einem StringGrid
dann kannst du das so machen, wie in deinem ersten verweislink im post ganz oben! da habe ich den code gepostet, musst ihn nur im bereich col und row dementsprechend anpassen.
|
Re: Comboboxen in einem StringGrid
Liste der Anhänge anzeigen (Anzahl: 1)
So, hab deinen Code jetzt soweit umgeschrieben, dass er auf meine Bedürfnisse passt, allerdings wird bei mir die ComboBox, die in der Spalte erscheinen soll nicht angezeigt :?
Wenn ich
Delphi-Quellcode:
Setze, wobei Box die ComboBox und Grid der Stringgrid ist, dann erscheint zwar die ComboBox, aber nur in der obersten linken Zelle des Grids. Und da geht sie auch nicht weg. Hab meinen Code mal angehängt. Wäre nett wenn einer von euch sich den mal reinziehen könnte und mir sagen könnte, was falsch ist.
Box.Parent := Grid;
tia, gordon freeman |
Re: Comboboxen in einem StringGrid
du musst das ganze im ondrawcell-ereignis steuern, da sonst die zelle nicht mit der box überzeichnet wird!!!
so sollte es funktionieren!!! und eine bitte: keine doc datei!!!! den code hättest du auch hier posten können!
Delphi-Quellcode:
unit USpielbearbeitung;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, Grids, USpieleigenschaften, IniFiles; type TSpielBearbeitung = class //Objekte BearbeitungsForm : TForm; Grid : TStringgrid; Box : TComboBox; (...) //Variablen zPfad : String; aktCellX : Integer; aktCellY : Integer; //(...) procedure SetRect(rec:Trect); // <-------------------------------------- hier rein private {private-Deklarationen} procedure AktuelleZelleSpeichern(Sender: TObject; ACol,ARow: Integer; var CanSelect: Boolean); //(...) public {public-Deklarationen} //(...) end; implementation uses UMain; //----------------------------------------------------------------------------// //constructor // - Form erzeugen, konfigurieren, anzeigem // - Menu erzeugen, konfigurieren // - Grid erzeugen, konfigurieren //----------------------------------------------------------------------------// constructor TSpielBearbeitung.create(pPfad : String; Eigenschaften : Boolean); begin //Form -erzeugen, -konfigurieren, -anzeigen BearbeitungsForm := TForm.create(nil); with BearbeitungsForm do begin BorderIcons := BorderIcons - [biMaximize] - [biSystemMenu] - [biMaximize]; width := 500; height := 300; position := poScreencenter; end; //(...) //Grid erzeugen, konfigurieren Grid := TStringgrid.Create(nil); with Grid do begin parent := Bearbeitungsform; fixedcols := 0; fixedrows := 2; Options := Options + [goAlwaysShowEditor] + [goEditing]; OnSelectCell := AktuelleZelleSpeichern; end; //ComboBox erzeugen Box := TComboBox.Create(nil); //Form anzeigen BearbeitungsForm.Show; end; //----------------------------------------------------------------------------// //schliessen // - Spielbearbeitung schließen //----------------------------------------------------------------------------// procedure TSpielBearbeitung.schliessen(Sender:TObject); begin Bearbeitungsform.Close; end; //----------------------------------------------------------------------------// //destructor // - Objekte zerstören //----------------------------------------------------------------------------// destructor TSpielBearbeitung.free(); begin //ComboBox freigeben Box.Free; //Gridfreigeben Grid.Free; //Form freigeben BearbeitungsForm.Free; end; //----------------------------------------------------------------------------// //Aktuelle Zelle Speichern // - Die aktuell gewählte Zelle wird gespeichert // - Wenn es die letzte ist, wird die ComboBox angezeigt //----------------------------------------------------------------------------// {procedure TSpielbearbeitung.AktuelleZelleSpeichern(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);} procedure TfoDBEdit.StringGridOnDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); // <--- anderes ereignis!!!! begin self.aktCellX := Acol; self.aktCellY := Arow; if ACol = Grid.ColCount then begin self.SetRect(Grid.CellRect(ACol,ARow)); Box.visible:=true; // sichtbar end else box.visible:=false; // unsichtbar end; //----------------------------------------------------------------------------// //Der ComboBox die aktuelle Zelle zuweisen //----------------------------------------------------------------------------// procedure TSpielBearbeitung.SetRect(rec:TRect); var r : TRect; begin CopyRect(r,rec); r.BottomRight := Box.Parent.ClientToScreen(Grid.ClienttoScreen(r.BottomRight)); r.TopLeft := Box.Parent.ClienttoScreen(Grid.ClienttoScreen(r.TopLeft)); Box.SetBounds(r.left,r.top,r.right-r.left,r.bottom-r.top); Box.BringToFront; end; end |
Re: Comboboxen in einem StringGrid
Liste der Anhänge anzeigen (Anzahl: 1)
So, hab jetzt alles so geändert, wie beschrieben, allerdings wird bei mir immer noch keine ComboBox angezeigt. Ich lade mal die Unit hoch.
Ein Objekt der Unit wird mit dem Aufruf
Delphi-Quellcode:
erstellt und mit dem Aufruf
(...) := Spielbearbeitung.Create(False);
Delphi-Quellcode:
vernichtet.
(...).Free;
Würde mich freuen, wenn ihr euch das ganze mal anschaut. (Ich weiß, dass es sehr nach Spaghetti-Code aussieht, allerdings ist es mein erstes Programm mit dynamisch erstellten Objekten!!!) tia, gordon |
Re: Comboboxen in einem StringGrid
Hey Leute,
kann sich denn nicht mal einer von euch die Unit anschauen? tia, gordon |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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