![]() |
CreateWnd ComboboxItems hinzufügen
Guten Morgen an alle DPler,
Habe eine Frage zu der Combobox bei selbstgeschriebenen Komponenten. Mir ist definitiv klar, dass man die Items einer Combobox in der CreateWnd-Funktion hinzufügt. Der übersichtlichkeithalber wollte ich dies allerdings in einer gesonderten Funktion machen. Hier ergeben sich jetzt allerdings Probleme, die ich darauf erstmal zurückführe, dass in der gesonderten Funktion kein Wnd-Handle verfügbar ist. Jetzt zu meiner Frage: Gibt es eine Möglichkeit wie ich das befüllen der Combobox in einer gesonderten Funktion/ Prozedur schreiben kann? Hier meine Ansätze, die ich gemacht hab:
Delphi-Quellcode:
Vielen Dankfunction TContainer.SetItemsComboBox: TCombobox; var sErweiterung: string; Index: integer; begin //result.Clear; Index := GetIndex; if Index in [1,2] then sErweiterung := 'µm' else sErweiterung := 'nm'; // Der hierunter stehende auskommentierte Bereich führt zu einer Fehlermeldung! Es wird davon ausgegangen, dass das Wnd-Handle // bei dem Funktionsaufruf nicht mit übergeben werden kann in der CreateWnd-Procedure {result.Items.Add('5 '+ sErweiterung); // hier tritt ein unbekannter Fehler auf!! unklar, woher. result.Items.Add('20 ' + serweiterung); result.Items.Add('100 ' + sErweiterung); result.Items.Add('500 ' + sErweiterung); result.Items.Add('1000 ' + sErweiterung); result.Items.Add('5000 ' + sErweiterung); result.ItemIndex := ftTischInfo[GetIndex].iSchrittweitenIndex; } end; procedure TContainer.CreateWnd; begin inherited createWnd; FCombBoxTischauswahl := CreateComboBox(17,35, 200); // Die folgende Initialisierung von Items für eine andere Combobox funzt hier FCombBoxTischauswahl.Items.Add('Verschiebetisch Kamera/ Spleißgerät'); FCombBoxTischauswahl.Items.Add('Verschiebetisch Referenzfaser'); FCombBoxTischauswahl.Items.Add('Piezoverschiebetisch'); FCombBoxTischauswahl.ItemIndex := 0; FCombBoxTischauswahl.OnChange := Tischaenderung; FComboBoxStepWidth := CreateComboBox(130,375,70); FComboBoxStepWidth := SetItemsComboBox; end; BAMatze |
Re: CreateWnd ComboboxItems hinzufügen
Der beste Ort sollte eigentlich die Methode "Loaded" sein, die man überschreiben kann. An dieser Stelle ist das Control vollständig initialisiert (wenn ich mich nicht sehr stark täusche)
|
Re: CreateWnd ComboboxItems hinzufügen
Moin,
mit CreateWnd ist das Handle da. Dein Problem liegt an einer anderen Stelle, nämlich hier:
Delphi-Quellcode:
Deine Funktion gibt ein Ergebnis vom Typ TCombobox zurück. Die Annahme, dass Result = FComboBoxStepWidth erscheint mir doch etwas sonderbar.
{result.Items.Add('5 '+ sErweiterung); // hier tritt ein unbekannter Fehler auf!! unklar, woher.
Dann mach es lieber so:
Delphi-Quellcode:
Gruß oki
procedure TContainer.SetItemsComboBox(ABox : TCombobox);
var sErweiterung: string; Index: integer; begin //result.Clear; Index := GetIndex; if Index in [1,2] then sErweiterung := 'µm' else sErweiterung := 'nm'; ABox.Items.Add('5 '+ sErweiterung); // hier tritt ein unbekannter Fehler auf!! unklar, woher. ABox.Items.Add('20 ' + serweiterung); ABox.Items.Add('100 ' + sErweiterung); ABox.Items.Add('500 ' + sErweiterung); ABox.Items.Add('1000 ' + sErweiterung); ABox.Items.Add('5000 ' + sErweiterung); ABox.ItemIndex := ftTischInfo[GetIndex].iSchrittweitenIndex; end; procedure TContainer.CreateWnd; begin inherited createWnd; FCombBoxTischauswahl := CreateComboBox(17,35, 200); FCombBoxTischauswahl.Items.Add('Verschiebetisch Kamera/ Spleißgerät'); FCombBoxTischauswahl.Items.Add('Verschiebetisch Referenzfaser'); FCombBoxTischauswahl.Items.Add('Piezoverschiebetisch'); FCombBoxTischauswahl.ItemIndex := 0; FCombBoxTischauswahl.OnChange := Tischaenderung; FComboBoxStepWidth := CreateComboBox(130,375,70); SetItemsComboBox(FComboBoxStepWidth); end; |
Re: CreateWnd ComboboxItems hinzufügen
Danke an Alfi001 und oki. Habe es so gemacht, wie oki das vorgeschlagen hat und es funktioniert.
Das mit dem result = Komponente hatte ich bei Ray Konopka´s Tutorial für Composite Controls gesehen und bei der Initialisierung von Komponenten funktioniert es eigentlich sehr gut. Hier mal ein paar andere Beispiele aus meinem Quellcode, die funktionieren. Kannte eine derartige Initalisierungsweise auch nicht, aber funzt gut.
Delphi-Quellcode:
Dachte solche Funktionen sollten eigentlich auch für die Add-Methode der ComboBox funktionieren, aber dies ist anscheinend nicht der Fall.
function TContainer.CreateLabel(PosX, PosY, Textgroesse: integer; Text: string): TLabel;
begin result := TLabel.Create(Self); result.Parent := Self; result.Left := PosX; result.Top := PosY; result.Caption := Text; result.Font.Height := Textgroesse; end; function TContainer.CreateTrackBar(PosX,PosY, Width, Height:integer): TMouseTrackBar; begin result := TMouseTrackbar.Create(Self); result.Parent := Self; result.Left := PosX; result.Top := PosY; result.Height := Height; result.Width := Width; result.Max := 640000; result.Position := 320000; result.OnChange := TrackBarBewegung; end; procedure TContainer.CreateWnd; begin inherited createWnd; FLblContainerCaption := CreateLabel(18,10, 18,'Tischsteuerung'); FTrckBarTischposition := CreateTrackBar(50,420,230,20); end; |
Re: CreateWnd ComboboxItems hinzufügen
Der kleine Unterschied liegt genau hier:
Delphi-Quellcode:
in deinem Code aus Post 1 aber nicht. Das Create wird in deiner vererbten Methode CreateWnd vorgenommen. Wenn du das natürlich in deine ausgelagerte Methode verschiebst funzt der Code wie deine Beispiele.
function TContainer.CreateLabel(PosX, PosY, Textgroesse: integer; Text: string): TLabel;
begin result := TLabel.Create(Self); // <- da wird Result die neue Komponente zugewiesen .... Hier der Unterschied:
Delphi-Quellcode:
gruß oki
procedure TContainer.CreateWnd;
begin .... FComboBoxStepWidth := CreateComboBox(130,375,70); // ich denke mal, da creierst du deine Combobox in einer Funktion mit dem Ergebnis der Instanz FComboBoxStepWidth := SetItemsComboBox; end; function TContainer.SetItemsComboBox: TCombobox; var sErweiterung: string; Index: integer; begin ... // und hier versuchst du zu Result ein Item zu adden, ohne dass result eine Instanz enthält result.Items.Add('5 '+ sErweiterung); // hier tritt ein unbekannter Fehler auf!! unklar, woher. ... |
Re: CreateWnd ComboboxItems hinzufügen
Ah ok jetzt verstehe ich wo der Fehler liegt. Danke oki
|
Re: CreateWnd ComboboxItems hinzufügen
Freut mich, dass ich helfen konnte :lol:
Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 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