Delphi-PRAXiS
Seite 1 von 2  1 2      

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-abhängig - Checkbox auf true setzen (https://www.delphipraxis.net/82382-combobox-abhaengig-checkbox-auf-true-setzen.html)

Susanne 12. Dez 2006 09:39


Combobox-abhängig - Checkbox auf true setzen
 
in Form.create habe ich Groupboxen erstellt und darauf labels, edits, comboboxen und Checkboxen platziert.

Mein Problem besteht nun darin, dass wenn ich in Combobox3 z.B. Rechnung auswähle, dann sollen die beiden Checkboxen auf true gesetzt werden. Er ruft auch die richtige Funktion auf, in der die Checkboxen auf true gesetzt werden, es kommt keine Fehlermeldung, aber die Häckchen werden dort nicht angezeigt. warum?

Das ist der Quellcode an der stelle:

Delphi-Quellcode:
 if pos('Rechnung', TComboBox(Sender).Text) > 0 then begin
   for i := low(a_chk) to high(a_chk) do begin
     a_chk[i].Checked:= true;
     Form2.Update;
   end;

Touchdown 12. Dez 2006 10:04

Re: Combobox-abhängig - Checkbox auf true setzen
 
Dann sind es vermutlich nicht die Checkboxen die du erwartest sondern ganz andere. Das Füllen dieser Liste vielleicht überprüfen oder Debuggen um welche Checkboxen es sich handelt.

oki 12. Dez 2006 10:20

Re: Combobox-abhängig - Checkbox auf true setzen
 
Hi,

da hilft nur debuggen. Setz einen Breakpoint auf die Zeile
Delphi-Quellcode:
a_chk[i].Checked:= true;
und prüfe ob der Debugger da stoppt und ob und welche Checkbox in dem array aufgerufen wird.

Dann stellt ich die Frage, ob dein dyn. Array auch gesetz ist (SetLength).
Wenn nicht, dann wird zwar die Funktion angesprungen aber high liefert -1 und die schleife wird nicht ausgeführt.

Gruß oki

Klaus01 12. Dez 2006 10:22

Re: Combobox-abhängig - Checkbox auf true setzen
 
Hast Du die Checkboxen in einem Array angelegt, dann sollte Dein Ansatz eigentlich funktionieren

Ansonsten solltest Du mit FindComponent arbeiten.
Dazu findest Du genügend Beispiele im Forum.

Grüße
Klaus

Susanne 12. Dez 2006 10:54

Re: Combobox-abhängig - Checkbox auf true setzen
 
Ja, ich habe die beiden (es sind nur zwei) in einem Array angelegt und er springt in die Funktion und geht bei durch und setzt beide auf true.

Set Length ist auch gesetzt


wenn ich ganz am Anfang, wo ich die Checkboxen der Groupbox zuordne, sie auf true setze, dann werden die Hacken auch angezeigt, aber wenn ich das jetzt erst mache, wenn ich aus der Combox einen Eintrag ausgewählt habe, dann funktioniert es nicht

marabu 12. Dez 2006 11:13

Re: Combobox-abhängig - Checkbox auf true setzen
 
Hallo Susanne,

spielt sich alles auf Form2 ab?
Warum hast du den Kopf des event handlers in deinem Code-Beispiel weggelassen?
Hast du Code für das OnClick-Event der CheckBoxen?
Was passiert dort?

Grüße vom marabu

Susanne 12. Dez 2006 11:27

Re: Combobox-abhängig - Checkbox auf true setzen
 
auf form2 ist eine Groupbox und auf der befinden sich die beiden Checkboxen

ich habe kein Onclick-Event für die Checkboxen



in FormCreate mache ich das: ich prüfe von den Koordinaten her in welche Groupbox die Checkbox gehört und setze dann entsprechend diejenige Groupbox als parent
Delphi-Quellcode:
SetLength(a_chk,i_chkCnt);
  for i := low(a_chk) to high(a_chk) do
    begin
      for iii := low(a_Gbx) to high(a_Gbx) do begin
        i_GbX := a_Gbx[iii].Left;
        i_GbY := a_Gbx[iii].Top;
        i_GbH := a_Gbx[iii].height + i_GbY;
        i_GbB := a_Gbx[iii].width + i_GbY;

        left:= IniFile.ReadInteger(sl_chk[i],'x',8);
        top:= IniFile.ReadInteger(sl_chk[i],'y',8);

        if (Left >= i_GbX) and (Left<= i_GbB) and (Top >= i_GbY) and (Top<= i_GbH) then begin
          a_chk[i]       := TCheckBox.Create(a_gbx[iii]);
          a_chk[i].Name  := IniFile.ReadString(sl_chk[i],'field id','');
          a_chk[i].Parent := a_gbx[iii];
          a_chk[i].Caption:= IniFile.ReadString(sl_chk[i],'name','');
          a_chk[i].Left  := Left -  a_Gbx[iii].Left;
          a_chk[i].Top   := Top -  a_Gbx[iii].Top;
          a_chk[i].Width   := IniFile.ReadInteger(sl_chk[i],'cx',8);
          a_chk[i].Height  := IniFile.ReadInteger(sl_chk[i],'cy',8);
          a_chk[i].BringToFront;
          break;
        end else begin
          a_chk[i] := TCheckBox.Create(Form2);
          a_chk[i].parent:= self;
          a_chk[i].Left  := Left;
          a_chk[i].Top   := Top ;
          a_chk[i].Caption:= IniFile.ReadString(sl_chk[i],'name','');
          a_chk[i].Width   := IniFile.ReadInteger(sl_chk[i],'cx',8);
          a_chk[i].Height  := IniFile.ReadInteger(sl_chk[i],'cy',8);
        end;
      end;

in FormCreate weise ich dann noch der Combobox diese Funktion zu:
Delphi-Quellcode:
for i := low(a_Cmb) to high(a_Cmb) do begin
    if a_Cmb[i].Name = 'BELART' then
      a_Cmb[i].onselect := ComboExit;
  end;
das funktioniert auch soweit. Dann habe ich das ganze über Sendmessage jetzt versucht. In der Messagebox sagt er: checked!, aber ich sehe nichts davon. wo ist noch der Fehler - was habe ich vergessen.
Delphi-Quellcode:
procedure TForm2.ComboExit(Sender: TObject);
var
  i         : Integer;
begin
  if pos('Rechnung', TComboBox(Sender).Text) > 0 then begin
    for i := low(a_chk) to high(a_chk) do begin
     
      SendMessage(a_chk[i].Handle, BM_SETCHECK, Integer(cbChecked), 0);
      case SendMessage(a_chk[i].Handle, BM_GETCHECK, 0, 0) of
        BST_CHECKED: ShowMessage('Checked!');
        BST_INDETERMINATE: ShowMessage('Indeterminate!');
        BST_UNCHECKED: ShowMessage('Unchecked!');
      end;

    end;
  end;
end;

oki 12. Dez 2006 17:19

Re: Combobox-abhängig - Checkbox auf true setzen
 
Hi,

kann es sein, dass du die Checkbox checkst, wobei dein Ereignis mit Aufruf ComboExit diesen Vorgang über SendMessage wieder rückgängig macht?

Für mich sieht das jedenfalls so aus, dass du zweimal checkst und sich somit in der Ansicht nichts ändert.

Gruß oki

marabu 12. Dez 2006 17:29

Re: Combobox-abhängig - Checkbox auf true setzen
 
Auch hi,

kann es sein, dass die CheckBoxen genau wie die Label aus dem anderen thread, erst zur Laufzeit erzeugt werden?
Der Fehler wird dann eher im erzeugenden Code zu suchen sein.

Freundliche Grüße

Susanne 14. Dez 2006 08:08

Re: Combobox-abhängig - Checkbox auf true setzen
 
Die Checkboxen werden auch zur Laufzeit erzeugt - das ist richtig.
Aber die Meldung bringt doch, dass die Checkboxen gecheckt sind, warum zeigt er es dann nicht an?

mit den Checkboxen arbeite ich auch nur an den beiden Stellen, die ich schon gepostet habe, sonst nirgends. Und auf true setze ich sie auch nur an dieser einen stelle.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 Uhr.
Seite 1 von 2  1 2      

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