Autor Beitrag
Nitr0
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Sa 07.06.08 16:05 
Hi,
habe mal wieder ein Problem.
Ich wette, die Lösung ist mal wieder total einfach nur komme ich einfach nicht drauf.
Ich habe eine zur Laufzeit erstellte ComboBox, die als Parent ein StringGrid hat und sich immer auf der gerade ausgewählten Zelle befindet. Das funktioniert alles soweit. Der Style ist csDropDownList, d.h. man kann nur Einträge aus der Liste auswählen, nichts selbst tippen. Wenn ich mit den Pfeiltasten navigiere während ich die Box ausgwählt habe kann ich auch ganz normal zwischen den Einträgen wechseln, nur wenn ich die Liste ausklappen will sieht man sie nicht. Auch wenn der Style anders ist tritt das gleiche Problem auf.
Ich vermute, dass die Liste einfach von dem StringGrid verdeckt wird.
Wie kann ich das beheben, ohne Parent zu ändern?
Hier noch das Stück Code, auch wenn es wahrscheinlich irrelevant ist. ;)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm2.StuplaMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
   xz,yz,i: Integer;
begin
  if button=mbLeft then begin
   Stupla.MouseToCell(X,Y,xz,yz);
   ComboBoxCell.Free;
   ComboBoxCell := TComboBox.Create(Stupla);
   ComboBoxCell.Parent := Stupla;
   ComboBoxCell.Width := Stupla.ColWidths[xz]-1;
   ComboBoxCell.Height := Stupla.RowHeights[yz];
   ComboBoxCell.Left := (xz*(Stupla.DefaultColWidth+1)+1);
   ComboBoxCell.Top := (yz*(Stupla.DefaultRowHeight+1));
   ComboBoxCell.Show;
   ComboBoxCell.Setfocus;

   ComboBoxCell.Style := csDropDownList;
   for i:=0 to Kurswahl.Count-1 do begin
    ComboBoxCell.Items.Add(Kurswahl[i]);
   end;

  end;
end;


Die Variablen sollten alle richtig definiert sein (ComboBoxCell, Stupla etc.).

Danke schonmal. ;)
Gruß, Nitr0
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 07.06.08 16:27 
Nitr0 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Sa 07.06.08 16:35 
Der Titel klingt schonmal vielversprechend. Danke sehr, ich habe wohl mal wieder die falschen Google-Suchbegriffe verwendet. -.-

Falls das Problem dadurch nicht gelöst wird melde ich mich nochmal. :)

Nitr0

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Das ist ja nur die bekannte Methode. Natürlich kann ich es jetzt auch einfach so lösen wie er, doch ich finde das ehrlich gesagt viel komplizierter als meine eigene Prozedur. Mich würde interessieren ob ich mein Ziel auf meinem Weg nicht erreichen kann. Ist doch immer schöner selbstgeschriebenen code zu verwenden als ihn irgendwo zu kopieren, nicht wahr. ;)

Ich bastle mir den Code vom DelphiCenter schonmal so hin dass es bei mir passt aber suche trotzdem noch weiter nach der Lösung mit meinem Code. :)
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 07.06.08 20:00 
Hallo,

warum willst Du Parent nicht ändern?

Kannst doch die Koordinaten umrechnen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
var c,r,i: Integer;
    aRect : TRect;
    aPoint : TPoint;
begin
  if button=mbLeft then
    begin
    Stupla.MouseToCell(X,Y,c,r);
    aRect := Stupla.CellRect(c,r);
    aPoint := ScreenToClient(Stupla.ClientToScreen(Point(aRect.Left,aRect.Top)));
    ComboBoxCell.Free;
    ComboBoxCell := TComboBox.Create(Self);
    ComboBoxCell.Parent := Self;
    ComboBoxCell.Width := Stupla.ColWidths[c];
    ComboBoxCell.Height := Stupla.RowHeights[r]+30;
    ComboBoxCell.Left := aPoint.x;
    ComboBoxCell.Top := aPoint.y;
    ComboBoxCell.Show;
    ComboBoxCell.Setfocus;
    ComboBoxCell.Style := csDropDownList;
    for i:=0 to Kurswahl.Count-1 do    
      ComboBoxCell.Items.Add(Kurswahl[i]);
  end;

Aber warum zerstörst Du die ComboBox jedesmal :nixweiss:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )