AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Warum funktioniert ein Code einmal und dann wieder nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

Warum funktioniert ein Code einmal und dann wieder nicht?

Ein Thema von Mr.XYZ · begonnen am 5. Nov 2009 · letzter Beitrag vom 6. Nov 2009
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#21

Re: Warum funktioniert ein Code einmal und dann wieder nicht

  Alt 5. Nov 2009, 19:37
Zitat von Mr.XYZ:
wolte nur noch mal sagen, wen ich dem Form mit Form.KeyPreview den Fokus zuweise(also beim Start) dann heißt es immer "einem Unsichtbaren oder inaktiven Fenster kann kein Fokus zugewiesen werden"
Ähhmm, "mit KeyPreview den Focus zuweisen"???? Wie soll das denn gehen?

"KeyPreview" ist eine Eigenschaft deines Formulars vom Typ "boolean". Dieser Eigenschaft musst du den Wert "true" zuweisen. Das geht auch im Objektinspector.

Also, angenommen dein Formular heisst "DasFormular", dann kannst du, z.B. in OnCreate, schreiben:

KeyPreview := true; // entspricht DasFormular.KeyPreview := true; Alternativ dazu kannst du die Eigenschft natürlich im OI zuweisen.

Wenn KeyPreview den Wert "true" hat wirkt sich da so aus, dass das Formular vor allen anderen Komponenten auf dem Formular die Tasten über die Events "OnKey..." zu sehen bekommt. Ist der Wert false so gehen die Tasten nur an die Komponente die gerade den Focus hat.

siehe auch: Delphi-Referenz durchsuchenKeyPreview
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#22

Re: Warum funktioniert ein Code einmal und dann wieder nicht

  Alt 5. Nov 2009, 19:38
Setze es doch einfach im OI (Objektinspektor), dann hast du deine Ruhe.

Edit: Da war wohl einer schneller.
  Mit Zitat antworten Zitat
Mr.XYZ
(Gast)

n/a Beiträge
 
#23

Re: Warum funktioniert ein Code einmal und dann wieder nicht

  Alt 5. Nov 2009, 19:52
Entschuldigung sollte heißen:
Zitat:
He!!
mein Programm analysiert jede taste die gedrückt wird, und bei Strg. hat es sich immer überarbeitet. Konten das Problem aber jetzt lösen! wolte nur noch mal sagen, wen ich dem Form mit
Form.KeyPreview den Fokus zuweise(also beim Start) dann heißt es immer "einem Unsichtbaren oder inaktiven Fenster kann kein Fokus zugewiesen werden", habe aber jetzt
Form.ActiveControl verwendet.
und nicht:

Zitat:
He!!
mein Programm analysiert jede taste die gedrückt wird, und bei Strg. hat es sich immer überarbeitet. Konten das Problem aber jetzt lösen! wolte nur noch mal sagen, wen ich dem Form mit Form.KeyPreview den Fokus zuweise(also beim Start) dann heißt es immer "einem Unsichtbaren oder inaktiven Fenster kann kein Fokus zugewiesen werden", habe aber jetzt Form.KeyPreview verwendet
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#24

Re: Warum funktioniert ein Code einmal und dann wieder nicht

  Alt 5. Nov 2009, 19:59
Zitat von Mr.XYZ:
mein Programm analysiert jede taste die gedrückt wird, und bei Strg. hat es sich immer überarbeitet.
Also, das will ich jet aber mal wissen:

Wie äussert es sich wenn ein Programm sich "überarbeitet"??
Ralf Kaiser
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Warum funktioniert ein Code einmal und dann wieder nicht

  Alt 5. Nov 2009, 20:07
Zitat:
Wie äussert es sich wenn ein Programm sich "überarbeitet"?? Grübelnd...
Es geht zum Arzt und lässt sich das Burnout-Syndrom attestieren
Markus Kinzler
  Mit Zitat antworten Zitat
Mr.XYZ
(Gast)

n/a Beiträge
 
#26

Re: Warum funktioniert ein Code einmal und dann wieder nicht

  Alt 5. Nov 2009, 20:14
Zitat von Alfi001:
Wie äussert es sich wenn ein Programm sich "überarbeitet"??
Weiß ich doch nicht, ich meinte halt das es so was wie eine Endlosschleife gab.(oder weiß ich was..)
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#27

Re: Warum funktioniert ein Code einmal und dann wieder nicht

  Alt 5. Nov 2009, 20:25
Hattest du "KeyPreview" auf true gesetzt?

Zeig doch nochmal den kompletten Code der ausgeführt wird wenn die Taste gedrückt wird. Ich vermute nämlich, dass dort die Löschung des Tastendruckes mit "Key := 0" bzw. "Key := #0" (je nachdem in welchem Eventhandler) fehlt!
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#28

Re: Warum funktioniert ein Code einmal und dann wieder nicht

  Alt 5. Nov 2009, 20:27
Zitat von mkinzler:
Zitat:
Wie äussert es sich wenn ein Programm sich "überarbeitet"?? Grübelnd...
Es geht zum Arzt und lässt sich das Burnout-Syndrom attestieren
Oder es äussert sich so:

Delphi-Quellcode:
ShowMessage('Ach lass mich in Ruhe. Ich hatte heute einen schweren Tag');
Application.Terminate;
SCNR...
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#29

Re: Warum funktioniert ein Code einmal und dann wieder nicht

  Alt 6. Nov 2009, 10:08
Zitat:
He!!
mein Programm analysiert jede taste die gedrückt wird, und bei Strg. hat es sich immer überarbeitet.....
Soll wohl eher heißen "... mein Programm soll jede Taste, die gedrückt wird, analysieren....."

Zeig doch mal den Quellcode!
Da stimmt doch hinten und vorne was nicht.

Zitat:
Weiß ich doch nicht, ich meinte halt das es so was wie eine Endlosschleife gab.(oder weiß ich was..)
Wir wissen nicht was Ihr Arzt empfielt, wir empfehlen die Benutzung des Debuggers.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Mr.XYZ
(Gast)

n/a Beiträge
 
#30

Re: Warum funktioniert ein Code einmal und dann wieder nicht

  Alt 6. Nov 2009, 12:17
okay hier ist der Quellcode kannst ihn ja gleich korrigieren wen du willst.[ist aber noch nicht vertig)
Delphi-Quellcode:
unit Unit2;

interface

uses
  mmsystem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons;

type

  Tnumer = record
           zahl : string;
           end;
  Toperation = record
               operant : string;
               end;
  Trechnung = record
              numer : array[0..100] of Tnumer;
              operation : array[0..100] of Toperation;
              end;

  TForm2 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    Bevel1: TBevel;
    Edit2: TEdit;
    Label3: TLabel;
    procedure Edit2Change(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Button1Click(Sender: TObject);
    procedure Edit2Enter(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  chint : string;
  vertig : string;
  taste : string;
  pres_un : integer;
  sactiv : string;
  klammer1 : Char;
  i : integer;
  y : integer;
  ch: integer;
  x : integer;

  baum : array[0..100] of integer;
  activ : integer;
  first : boolean;
  input : string;
  save : string;
  vare : Array [0..100] of string;

  Form2: TForm2;


implementation


{$R *.dfm}
procedure TForm2.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if (key = VK_DELETE) then
 begin
 Edit1.Text:='clear';
 end;
 if (key = VK_SHIFT) or(key = VK_CONTROL) or (key = VK_DELETE) or (pos('key','q,w,e,r,t,z,u,i,o,p,ü,a,s,d,f,g,h,j,k,l,ö,ä,y,x,c,v,b,n,m')>0) or (key = VK_TAB) or (key = VK_CLEAR) or (key = VK_MENU) then
 begin
 pres_un:=pres_un+1;
 Edit1.Text:=save;
 end else
 begin
 if (first = false) then
  begin
   save:= Edit1.Text;
    first:=true;
   ch:= length(save);

   if (save[ch] = chr(40) ) then
   begin
    baum[y]:=x;
    ch:= length(baum);
    Label2.Caption:= IntToStr(baum[0]);
    first:=true;
    vare[activ]:=vare[activ]+'V'+IntToStr(baum[y]);
    activ:=1;
    for i:= 1 to ch do
      begin
       Label2.Caption:= Label2.Caption+IntToStr(baum[i]);
      end;
   end;
  input:=edit1.Text;
  ch:=length(input);
  klammer1:= chr(41);
  Label2.Caption:=klammer1+' = '+input[ch];
  if ( input[ch] = klammer1 ) then
  begin
   baum[y]:=0;
   baum[0]:=0;
   y:=0;
   baum[y]:=0;
   first:= false;
   application.MessageBox('Felerhafte eingabe!!','Error!!',MB_OK);
   Edit1.text:='';
  end;
  ch:=length(input);
  taste:=IntToStr(key);
  if (taste<>'56') and (taste<>'57') then begin
    first:=true;
    chint:=input[ch];
    if (chint = '+') or (input[ch] = '-') or (input[ch] = '*') then
    begin
    application.MessageBox('Felerhafte eingabe!!','Error!!',MB_OK);
    Edit1.text:='';
    end;
    if(chint = 'k') then
    begin
    Edit1.Text:='';
    first:= false;
    end;
    ch:=length(input);
    input:=edit1.Text;
    vare[activ]:=vare[activ]+input[ch];
    end;

  end else
   begin
   input:=edit1.Text;
   ch:= length(input);

   if (input[ch] = chr(40) ) then
   begin
   //Label2.Caption:='+'+input[ch];
   x:=x+1;
   y:=y+1;
   baum[y]:=x;
   ch:= length(baum);
   vare[activ]:=vare[activ]+'V'+IntToStr(baum[y]);
   activ:= x;
   Label2.Caption:= IntToStr(baum[0]);
    for i:=1 to ch do
     begin
      Label2.Caption:= Label2.Caption+IntToStr(baum[i]);
     end;
   end;
   ch:= length(input);
   if(input[ch] = chr(41) ) then
   begin
   y:= y-1;
   activ:= baum[y];
   if ( y<=0) then
   begin
   application.MessageBox('Felerhafte eingabe!!','Error!!',MB_OK);
   y:= y+1;
    ch:= length(input);
    ch:= ch-1;
    Edit1.text:=copy(input,1,ch);
   end else
   begin
   baum[y]:=0;
   ch:= length(baum);
   Label2.Caption:= IntToStr(baum[0]);
     for i:=1 to ch do
      begin
       Label2.Caption:= Label2.Caption+IntToStr(baum[i]);
      end;
      end;
   end;
    ch:= length(input);
    taste:=IntToStr(key);
  if (taste<>'56') and (taste<>'57') then begin
    first:=true;
    chint:=input[ch];
   // if (chint = '+') or (input[ch] = '-') or (input[ch] = '*') then
// begin
// application.MessageBox('Felerhafte eingabe!!','Error!!',MB_OK);
// Edit1.text:='';
// end;
    if(chint = 'k') then
    begin
    Edit1.Text:='';
    first:= false;
    end;
    ch:=length(input);
    input:=edit1.Text;
    vare[activ]:=vare[activ]+input[ch];
    end;
   end;
end;
vertig:=vare[0]+' '+vare[1]+' '+vare[2]+' '+vare[3]+' '+vare[4];
//Label2.Caption:=vertig+'; Ac='+IntToStr(activ);
Label2.Caption:=taste+' : '+'56 or 57'+' = '+BoolToStr((taste<>'56') and (taste<>'57'));
save:=Edit1.Text;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
x:=0;
y:=1;
Form2.KeyPreview:=true;
end;

procedure TForm2.Edit2Enter(Sender: TObject);
var
prüf : string;
begin
prüf:=Edit2.Text;
if (prüf = 'control') then
begin
Label2.Visible:=true;
end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
ip : integer;
rechnung : array[0..100] of Trechnung;
num : integer;
y : integer;
i : integer;
j : integer;
t : integer;
eingelesen : string;
begin
  
for i:=0 to 100 do
 begin
 j:=0;
  num:= length(vare[0]);
  while j<num do
  begin
  j:=j+1;
 // eingelesen:=vare[0];
// Label3.Caption:=eingelesen+' : '+IntToStr(j);
  eingelesen:=copy(vare[0],1,j);
  //Label3.Caption:=eingelesen;
  ip:= length(eingelesen);
   if (eingelesen[ip] = '+') and (eingelesen[ip]='-') and (eingelesen[ip]='/') and (eingelesen[ip]='*') then
   begin
   eingelesen:=copy(vare[0],1,j-1);
   rechnung[0].numer[0].zahl:=eingelesen;
   j:=num+1;
   end;
   if (eingelesen[ip] = 'V') then
   begin
   j:=j+1;
   end;
  end;
 end;
Label3.Caption:=eingelesen+' : '+rechnung[0].numer[0].zahl;
end;

procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Ord(Key) = 17 then
  begin
    self.Height:=326;
    Bevel1.Visible:=true;
    Edit2.Visible:=true;
    Form2.ActiveControl:=Edit2;
  end;
end;

procedure TForm2.Edit2Change(Sender: TObject);
var
prüf : string;
begin
prüf:=Edit2.Text;
if (prüf = 'control') then
begin
Label2.Visible:=true;
Label3.Visible:=true;
end;
end;

end.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 23:03 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