![]() |
Fokusieren des Buttons vermeiden
Hallo,
ich finde den Titel schon ziemlich vielsagend. :zwinker: Ich möchte halt, dass keiner meiner Buttons auf der gesamten Form fokusiert werden kann, und damit meine ich halt nicht nur mit der Tabulator-Taste. Ausserdem werden die meisten Buttons auch fokusiert, wenn man sie einmal anklickt, die Maustaste gedrückt hält und die Maustaste erst woanders wieder loslässt. Weiss jemand, wie man das umgehen kann? Ich habe schon überlegt, für jeden Button das Ereignis OnMouseUp zu nehmen, aber das wäre mir zu umständlich und ausserdem würde der Code dann ziemlich unübersichtlich werden (was er aber eigentlich sowieso schon ist :zwinker: ). Hier mein Quellcode:
Delphi-Quellcode:
Hoffe ihr könnt mir helfen und danke schonmal im Voraus.
unit Taschenrechner;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ActnList, Menus, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; Button11: TButton; Button12: TButton; Button13: TButton; Button14: TButton; Button15: TButton; Button16: TButton; Button17: TButton; Button18: TButton; Button19: TButton; MainMenu1: TMainMenu; Datei1: TMenuItem; Beenden1: TMenuItem; N1: TMenuItem; Hilfe1: TMenuItem; Info1: TMenuItem; Panel1: TPanel; Button20: TButton; Button21: TButton; Button22: TButton; Button23: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button18Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure Button19Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure Button15Click(Sender: TObject); procedure Button14Click(Sender: TObject); procedure Button17Click(Sender: TObject); procedure Button16Click(Sender: TObject); procedure Button13Click(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: char); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Beenden1Click(Sender: TObject); procedure Info1Click(Sender: TObject); procedure Panel1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button20Click(Sender: TObject); procedure Button21Click(Sender: TObject); procedure Button22Click(Sender: TObject); procedure Button23Click(Sender: TObject); private lism:integer; {letters in secret message} { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation var operation,strich,punkt,punktvorstrich,zahl:boolean; zahl1,zahl2,zahl3,result:real; gesucht:string; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if (panel1.caption='0') or (operation=true) then begin panel1.caption:='1'; operation:=false; end else panel1.caption:=panel1.caption+'1'; if strich=true then zahl:=true; panel1.setfocus; end; procedure TForm1.Button2Click(Sender: TObject); begin if (panel1.caption='0') or (operation=true) then begin panel1.caption:='2'; operation:=false; end else panel1.caption:=panel1.caption+'2'; if strich=true then zahl:=true; panel1.setfocus; end; procedure TForm1.Button3Click(Sender: TObject); begin if (panel1.caption='0') or (operation=true) then begin panel1.caption:='3'; operation:=false; end else panel1.caption:=panel1.caption+'3'; if strich=true then zahl:=true; panel1.setfocus; end; procedure TForm1.Button4Click(Sender: TObject); begin if (panel1.caption='0') or (operation=true) then begin panel1.caption:='4'; operation:=false; end else panel1.caption:=panel1.caption+'4'; if strich=true then zahl:=true; panel1.setfocus; end; procedure TForm1.Button5Click(Sender: TObject); begin if (panel1.caption='0') or (operation=true) then begin panel1.caption:='5'; operation:=false; end else panel1.caption:=panel1.caption+'5'; if strich=true then zahl:=true; panel1.setfocus; end; procedure TForm1.Button6Click(Sender: TObject); begin if (panel1.caption='0') or (operation=true) then begin panel1.caption:='6'; operation:=false; end else panel1.caption:=panel1.caption+'6'; if strich=true then zahl:=true; panel1.setfocus; end; procedure TForm1.Button7Click(Sender: TObject); begin if (panel1.caption='0') or (operation=true) then begin panel1.caption:='7'; operation:=false; end else panel1.caption:=panel1.caption+'7'; if strich=true then zahl:=true; panel1.setfocus; end; procedure TForm1.Button8Click(Sender: TObject); begin if (panel1.caption='0') or (operation=true) then begin panel1.caption:='8'; operation:=false; end else panel1.caption:=panel1.caption+'8'; if strich=true then zahl:=true; panel1.setfocus; end; procedure TForm1.Button9Click(Sender: TObject); begin if (panel1.caption='0') or (operation=true) then begin panel1.caption:='9'; operation:=false; end else panel1.caption:=panel1.caption+'9'; if strich=true then zahl:=true; panel1.setfocus; end; procedure TForm1.Button10Click(Sender: TObject); begin if (panel1.caption='0') or (operation=true) then begin panel1.caption:='0'; operation:=false; end else panel1.caption:=panel1.caption+'0'; if strich=true then zahl:=true; panel1.setfocus; end; procedure TForm1.Button18Click(Sender: TObject); begin panel1.caption:='0'; strich:=false; punkt:=false; punktvorstrich:=false; zahl1:=0; zahl2:=0; zahl3:=0; panel1.setfocus; end; procedure TForm1.Button12Click(Sender: TObject); var vorzeichenwechsel:real; begin vorzeichenwechsel:=strtofloat(panel1.caption); vorzeichenwechsel:=vorzeichenwechsel*(-1); panel1.caption:=floattostr(vorzeichenwechsel); panel1.setfocus; end; procedure TForm1.Panel1Click(Sender: TObject); begin if panel1.caption='' then panel1.caption:='0'; end; procedure TForm1.Button19Click(Sender: TObject); var i:integer; s:string; begin for i:=1 to (length(panel1.caption)-1) do begin s:=s+panel1.caption[i]; end; panel1.caption:=s; if panel1.caption='' then panel1.caption:='0'; panel1.setfocus; end; procedure TForm1.Button11Click(Sender: TObject); var j:integer; komma:boolean; begin komma:=false; for j:=1 to length(panel1.caption) do if panel1.caption[j]=',' then begin komma:=true; break; end else komma:=false; if komma=false then begin panel1.caption:=panel1.caption+','; end; panel1.setfocus; end; procedure TForm1.Button15Click(Sender: TObject); begin panel1.setfocus; result:=0; if (zahl=false) and (strich=true) then exit; zahl2:=strtofloat(panel1.caption); if result=0 then result:=zahl2; if panel1.caption='0' then result:=zahl2; if gesucht='summe' then result:=zahl1+zahl2; if gesucht='differenz' then result:=zahl1-zahl2; if (gesucht='quotient') and (zahl2<>0) then result:=zahl1/zahl2 else begin messagebox(0, 'Divison durch null nicht möglich!','Fehler',MB_OK); panel1.caption:='0'; end; if gesucht='produkt' then result:=zahl1*zahl2; panel1.caption:=floattostr(result); operation:=true; strich:=true; {+} zahl1:=strtofloat(panel1.caption); gesucht:='summe'; end; procedure TForm1.Button14Click(Sender: TObject); begin panel1.setfocus; result:=0; if (zahl=false) and (strich=true) then exit; zahl2:=strtofloat(panel1.caption); if result=0 then result:=zahl2; if gesucht='summe' then result:=zahl1+zahl2; if gesucht='differenz' then result:=zahl1-zahl2; if (gesucht='quotient') and (zahl2<>0) then result:=zahl1/zahl2 else begin messagebox(0, 'Divison durch null nicht möglich!','Fehler',MB_OK); panel1.caption:='0'; end; if gesucht='produkt' then result:=zahl1*zahl2; panel1.caption:=floattostr(result); operation:=true; strich:=true; {-} zahl1:=strtofloat(panel1.caption); gesucht:='differenz'; end; procedure TForm1.Button17Click(Sender: TObject); begin if (strich=false) and (punkt=true) then begin result:=0; zahl2:=strtofloat(panel1.caption); if gesucht='summe' then result:=zahl1+zahl2; if gesucht='differenz' then result:=zahl1-zahl2; if (gesucht='quotient') and (zahl2<>0) then result:=zahl1/zahl2 else begin messagebox(0, 'Divison durch null nicht möglich!','Fehler',MB_OK); panel1.caption:='0'; end; if gesucht='produkt' then result:=zahl1*zahl2; panel1.caption:=floattostr(result); operation:=true; end; if strich=true then begin zahl2:=strtofloat(panel1.caption); punktvorstrich:=true; end; operation:=true; punkt:=true; {/} if punktvorstrich=false then zahl1:=strtofloat(panel1.caption); gesucht:='quotient'; panel1.setfocus; end; procedure TForm1.Button16Click(Sender: TObject); begin if (strich=false) and (punkt=true) then begin result:=0; zahl2:=strtofloat(panel1.caption); if gesucht='summe' then result:=zahl1+zahl2; if gesucht='differenz' then result:=zahl1-zahl2; if (gesucht='quotient') and (zahl2<>0) then result:=zahl1/zahl2 else begin messagebox(0, 'Divison durch null nicht möglich!','Fehler',MB_OK); panel1.caption:='0'; end; if gesucht='produkt' then result:=zahl1*zahl2; panel1.caption:=floattostr(result); operation:=true; end; if strich=true then begin zahl2:=strtofloat(panel1.caption); punktvorstrich:=true; end; operation:=true; punkt:=true; {*} if punktvorstrich=false then zahl1:=strtofloat(panel1.caption); gesucht:='produkt'; panel1.setfocus; end; procedure TForm1.Button13Click(Sender: TObject); begin result:=0; if punktvorstrich=false then zahl2:=strtofloat(panel1.caption); if (zahl1=0) and (punkt=false) then panel1.caption:=floattostr(zahl2) else begin if punktvorstrich=true then begin zahl3:=strtofloat(panel1.caption); result:=(zahl2*zahl3)+zahl1; panel1.caption:=floattostr(result); end else begin if gesucht='summe' then result:=zahl1+zahl2; if gesucht='differenz' then result:=zahl1-zahl2; if (gesucht='quotient') and (zahl2<>0) then result:=zahl1/zahl2 else begin messagebox(0, 'Divison durch null nicht möglich!','Fehler',MB_OK); panel1.caption:='0'; end; if gesucht='produkt' then result:=zahl1*zahl2; panel1.caption:=floattostr(result); end; end; operation:=true; strich:=false; punkt:=false; punktvorstrich:=false; panel1.setfocus; end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: char); var easterstring:string; begin easterstring:=''; case key of '1' : button1.click; '2' : button2.click; '3' : button3.click; '4' : button4.click; '5' : button5.click; '6' : button6.click; '7' : button7.click; '8' : button8.click; '9' : button9.click; '0' : button10.click; ',' : button11.click; '.' : button11.click; 'n' : button12.click; chr(13) : button13.click; '-' : button14.click; '+' : button15.click; '*' : button16.click; '/' : button17.click; chr(8) : button19.click; 'p' : button20.click; 'w' : button21.click; 'q' : button22.click; 'r' : button23.click; else begin easterstring:=easterstring+key; if Copy('test', 1, Length(easterstring))<>easterstring then easterstring:=''; if easterstring='test' then showmessage('hui'); end; end; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); const hiddenmessage='SEBI'; messagelen=length(hiddenmessage); begin if key = vk_Delete then button18.click; if ssCtrl in Shift then begin if key=ord(hiddenmessage[lism]) then begin if lism=messagelen then begin messagebox(0,'Vielen Dank, für die Ermöglichung meines '+ 'allerersten Programmes!','Danke', MB_OK); lism:=1; end else begin inc(lism) end; end else if key=ord(hiddenmessage[1]) then lism:=2 else lism:=1; end; end; procedure TForm1.Beenden1Click(Sender: TObject); begin close; end; procedure TForm1.Info1Click(Sender: TObject); var s:pansichar; begin s:='Programmiert von: ...'+#13+'Designt von: ...'+ #13+'Inspiriert von: ...'+#13+'Version: 1.2'; messagebox(0, s, 'Info', MB_OK); end; procedure TForm1.FormCreate(Sender: TObject); begin keypreview:=true; lism:=1; end; procedure TForm1.Button20Click(Sender: TObject); begin panel1.caption:=floattostr(3.14159265358979); end; procedure TForm1.Button21Click(Sender: TObject); var wurzel:real; begin wurzel:=strtofloat(panel1.caption); wurzel:=sqrt(wurzel); panel1.caption:=floattostr(wurzel); end; procedure TForm1.Button22Click(Sender: TObject); var Quadrat:real; begin quadrat:=strtofloat(panel1.Caption); quadrat:=sqr(quadrat); panel1.caption:=floattostr(quadrat); end; procedure TForm1.Button23Click(Sender: TObject); var x:real; begin x:=strtofloat(panel1.Caption); if x<>0 then x:=1/x else begin messagebox(0, 'Divison durch null nicht möglich!','Fehler',MB_OK); panel1.caption:='0'; end; panel1.caption:=floattostr(x); end; end. Und wenn ihr Lust habt, könnt ihr meinen Code auch beurteilen bzw. kritisieren. Gruß Stefan [edit=r_kerber]code durch delphi-Tags ersetzt. Mfg, r_kerber[/edit] |
Re: Fokusieren des Buttons vermeiden
Nimm TSpeedButton von der Seite "Zusätzlich".
Du brauchst für jeden Speedbutton ein Bitmap, aber das sollte ja kein Problem sein. (Caption gibts nicht) |
Re: Fokusieren des Buttons vermeiden
Du könntst den Focus sofort wieder weiterreichen
|
Re: Fokusieren des Buttons vermeiden
Zitat:
|
Re: Fokusieren des Buttons vermeiden
Zitat:
Bei mir schon ... |
Re: Fokusieren des Buttons vermeiden
Bei mir gibt es auch eine Caption. :shock:
|
Re: Fokusieren des Buttons vermeiden
Bei mir gibt es auch eine. Vielleicht meinte shmia TabStop. Das hat der SpeedButton nicht.
|
Re: Fokusieren des Buttons vermeiden
|
Re: Fokusieren des Buttons vermeiden
Hm, ich habe nochmal eine Frage zu dem Speedbutton.
Wenn ich ihm mit der Eigenschaft Caption eine Aufschrift gebe, sieht die Schrift so komisch versetzt aus, anders als bei meinen normalen Buttons. Kann man die Schrift irgendwie zentrieren? Gruß Stefan Edit:Grammatik-Fehler beseitigt. |
Re: Fokusieren des Buttons vermeiden
Da ich immer noch auf Antwort warte, nehme ich mal an, dass ihr diesen Thread vergessen habt.
Ich verwende daher absichtlich nicht die Editfunktion, um den Thread in die aktuelle Themenliste zu bringen. Bitte um Verständnis und baldige Antwort. Gruß Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz