AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Combobox-abhängig - Checkbox auf true setzen

Ein Thema von Susanne · begonnen am 12. Dez 2006 · letzter Beitrag vom 14. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
Susanne

Registriert seit: 21. Mai 2004
Ort: Lage
232 Beiträge
 
Delphi 2005 Professional
 
#1

Combobox-abhängig - Checkbox auf true setzen

  Alt 12. Dez 2006, 09:39
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;
Susanne
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#2

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

  Alt 12. Dez 2006, 10:04
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.
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

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

  Alt 12. Dez 2006, 10:20
Hi,

da hilft nur debuggen. Setz einen Breakpoint auf die Zeile
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 12. Dez 2006, 10:22
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
Klaus
  Mit Zitat antworten Zitat
Susanne

Registriert seit: 21. Mai 2004
Ort: Lage
232 Beiträge
 
Delphi 2005 Professional
 
#5

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

  Alt 12. Dez 2006, 10:54
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
Susanne
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

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

  Alt 12. Dez 2006, 11:13
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
  Mit Zitat antworten Zitat
Susanne

Registriert seit: 21. Mai 2004
Ort: Lage
232 Beiträge
 
Delphi 2005 Professional
 
#7

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

  Alt 12. Dez 2006, 11:27
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 = 'BELARTthen
      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;
Susanne
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8

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

  Alt 12. Dez 2006, 17:19
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

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

  Alt 12. Dez 2006, 17:29
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
  Mit Zitat antworten Zitat
Susanne

Registriert seit: 21. Mai 2004
Ort: Lage
232 Beiträge
 
Delphi 2005 Professional
 
#10

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

  Alt 14. Dez 2006, 08:08
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.
Susanne
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 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