AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal Problem mit Code, seit Komponente zur Laufzeit erstellt werd
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Code, seit Komponente zur Laufzeit erstellt werd

Ein Thema von luckybug83 · begonnen am 4. Feb 2009 · letzter Beitrag vom 11. Feb 2009
Antwort Antwort
Seite 1 von 3  1 23      
luckybug83

Registriert seit: 19. Jan 2009
18 Beiträge
 
#1

Problem mit Code, seit Komponente zur Laufzeit erstellt werd

  Alt 4. Feb 2009, 23:41
Hallo,

vielleicht wisst ihr ja wo der Fehler ist

Seit dem ich mein Checkboxarray zur Laufzeit erstellen lasse, funktioniert folgender Code nur noch halb!Also wenn ich die Checkbox anhake wird meine Caption nach wie vor rot aber nicht mehr fett geschrieben!! Vor der dynamischen Erstellung hat beides funktioniert!?!

Danke schonmal im Voraus!



Delphi-Quellcode:
[b]//[/b]Checkbox BracketOpen
  Setlength(BracketOpen, zaehler+1);
  BracketOpen[zaehler]:= TCheckBox.Create(self);
  BracketOpen[zaehler].Name:= 'CBBracketOpen'+InttoStr(zaehler+1);
  BracketOpen[zaehler].Parent:= GroupBoxesItem[zaehler];
  BracketOpen[zaehler].Left:= 0;
  BracketOpen[zaehler].Top:= -4;
  BracketOpen[zaehler].Width:=30;
  BracketOpen[zaehler].Height:=22;
  BracketOpen[zaehler].Caption:='(';
  BracketOpen[zaehler].Font.Bold:=false;
  BracketOpen[zaehler].OnChange:=@CheckboxSettingsChange;
Delphi-Quellcode:
procedure TForm1.CheckBoxSettingsChange(Sender: TObject);
  var i:Integer;
begin
   i:=0;
    while i < High(BracketOpen) do begin
    if BracketOpen[i] = Sender then
      Break;
      inc(i);
    end;
    if BracketOpen[i] = Sender then
    begin
      if (BracketOpen[i].Checked=true) then
      begin
      BracketOpen[i].Font.Color:=clRed;
      BracketOpen[i].Font.Bold:=true;
      end
      else if (BracketOpen[i].Checked=false)then
      begin
      BracketOpen[i].Font.Color:=clBlack;
      BracketOpen[i].Font.Bold:=false;
      end;
   end;
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Problem mit Code, seit Komponente zur Laufzeit erstellt

  Alt 4. Feb 2009, 23:51
Hi,

umschließ deinen Code mal mit den [.delphi] [./delphi] Tags (ohne die Punkte). Das macht das ganze lesbarer.

Was mir im ersten Moment mal aufgefallen ist, ist folgendes:

BracketOpen[zaehler].OnChange:=@CheckboxSettingsChange; Es müsste

BracketOpen[zaehler].OnChange:=CheckboxSettingsChange; heißen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
luckybug83

Registriert seit: 19. Jan 2009
18 Beiträge
 
#3

Re: Problem mit Code, seit Komponente zur Laufzeit erstellt

  Alt 5. Feb 2009, 02:01
Hi,

sorry mir is gar nicht aufgefallen, dass beim Einfügen meines Codes, meine gesamte Einrückung weg gefallen ist....

Ich schreibe in Lazarus und da funktioniert der Funktionsaufruf leider nur, wenn ich das @ voran stelle.Somit ist dies leider nicht der Fehler.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit Code, seit Komponente zur Laufzeit erstellt

  Alt 5. Feb 2009, 05:37
Nicht das Problem, aber du solltest
if BracketOpen[i].Checked then statt
if (BracketOpen[i].Checked=true) then schreiben, den diese Eigenschaft ist ja schon ein Boolean.
Zudem ist die 2. if-Anweisung überflüssig ( die im else-Zweig), denn wenn eine Booleaneigenschaft nicht true ist ist sie false
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Problem mit Code, seit Komponente zur Laufzeit erstellt

  Alt 5. Feb 2009, 06:53
Mal abgesehen von den Schönheitsfehlern des Codes die dir bereits beschrieben wurden -
was passiert, wenn du die Zeilen vertauschst, in denen du Farbe und Fett setzt - also erst Bold auf den gewünschten Wert setzt und dann die Farbe.

Verändert sich das verhalten Deines Programms in Richtung nur noch Fett / nicht Fett oder bleibt es wie es ist -> rot / nicht rot

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Problem mit Code, seit Komponente zur Laufzeit erstellt

  Alt 5. Feb 2009, 07:12
if BracketOpen[i] = (Sender as TCheckBox) then
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Problem mit Code, seit Komponente zur Laufzeit erstellt

  Alt 5. Feb 2009, 07:44
Zitat von nuclearping:
if BracketOpen[i] = (Sender as TCheckBox) then
Das ist ein reiner Adressenvergleich - wozu also der Cast? Völlig überflüssig.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#8

Re: Problem mit Code, seit Komponente zur Laufzeit erstellt

  Alt 5. Feb 2009, 07:58
Delphi-Quellcode:
  //Checkbox BracketOpen
  Setlength(BracketOpen, zaehler + 1);
  BracketOpen[zaehler] := TCheckBox.Create(self);
  BracketOpen[zaehler].Parent := GroupBoxesItem[zaehler];
  BracketOpen[zaehler].Left := 0;
  BracketOpen[zaehler].Top := -4;
  BracketOpen[zaehler].Width := 30;
  BracketOpen[zaehler].Height := 22;
  BracketOpen[zaehler].Caption := '(';
  BracketOpen[zaehler].Font.Bold := false;
  BracketOpen[zaehler].OnChange := CheckboxSettingsChange;


Procedure TForm1.CheckBoxSettingsChange(Sender: TObject);
  Var i: Integer;

  Begin
    If Sender is TCheckBox Then
      If TCheckBox(Sender).Checked Then Begin
        TCheckBox(Sender).Font.Color := clRed;
        TCheckBox(Sender).Font.Bold := True;
      End Else Begin
        TCheckBox(Sender).Font.Color := clBlack;
        TCheckBox(Sender).Font.Bold := False;
      End;
   End;
wenn du .Name sonst nirgend's verwendet, kanst du auch Voreingestellten verwenden (hast dann kein Problem mit eventuellen doppelten Namen)

Das mit GroupBoxesItem[zaehler] ist richtig so?
(jedem GroupBoxesItem ein BracketOpen?)

Delphi-Quellcode:
if x=true then begin ... end else if x=false then begin ... end; // falsch
if x then begin ... end else if not x then begin ... end; // richtig
if x then begin ... end else begin ... end; // besser
wenn du schon auf True prüfst, brauchst'e nicht nochmal auf False prüfen (wenn es nicht True war, "kann" es nu noch False sein ... zumindestens wenn du richtig prüfst, was heißt, prüfe NIEMALS auf True ... da gibt's hier genug Threads, wo die Erkläung drinsteht, warum nicht.)


verwendest du die Variable BracketOpen noch sonst irgendwo?
(wenn nicht, dann könnte man diese auch weglassen)

[edit]
TCheckBox und nicht TCheckCox
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Problem mit Code, seit Komponente zur Laufzeit erstellt

  Alt 5. Feb 2009, 08:04
Zitat von Muetze1:
Zitat von nuclearping:
if BracketOpen[i] = (Sender as TCheckBox) then
Das ist ein reiner Adressenvergleich - wozu also der Cast? Völlig überflüssig.
Ansichtssache. Sicher ist sicher. BracketOpen ist in ihrer letzten Instanz kein TObject sondern eine TCheckBox, auch wenn sie in der untersten Schicht darauf zurückgeführt werden kann.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Problem mit Code, seit Komponente zur Laufzeit erstellt

  Alt 5. Feb 2009, 08:19
Zitat:
BracketOpen ist in ihrer letzten Instanz kein TObject sondern eine TCheckBox
Was ein TObject ist.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 18:31 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