Avatar billede steffennielsen Nybegynder
24. marts 2006 - 00:43 Der er 11 kommentarer og
2 løsninger

Simpel if, then, else - Evt. et link til en side med basal delphi

Hej,

Jeg er så småt startet med delphi, og det er et genialt program.

Hvad er der galt i denne if, then, else, sætning:

        if btn1.Flat=True then
        ShellExecute(Handle, 'open', 'C:\Programmer\Gembird\Power Manager\pm2.exe', '-on -device3 -socket1', nil, SW_SHOWNORMAL);
        btn1.Flat:=False
        else
        if btn1.Flat=False then
        ShellExecute(Handle, 'open', 'C:\Programmer\Gembird\Power Manager\pm2.exe', '-off -device3 -socket1', nil, SW_SHOWNORMAL)
        btn1.Flat:=True

Og kan den ikke konstrueres smartere?
Avatar billede arne_v Ekspert
24. marts 2006 - 00:45 #1
if btn1.Flat=True then begin
        ShellExecute(Handle, 'open', 'C:\Programmer\Gembird\Power Manager\pm2.exe', '-on -device3 -socket1', nil, SW_SHOWNORMAL);
        btn1.Flat:=False
end else if btn1.Flat=False then begin
        ShellExecute(Handle, 'open', 'C:\Programmer\Gembird\Power Manager\pm2.exe', '-off -device3 -socket1', nil, SW_SHOWNORMAL)
        btn1.Flat:=True
end;
Avatar billede arne_v Ekspert
24. marts 2006 - 00:46 #2
begin end for at samle mere end 2 linier i en blok
Avatar billede arne_v Ekspert
24. marts 2006 - 00:47 #3
de er 20 år siden jeg lærte Pascal

:-)

men der er en link samling her http://www.eksperten.dk/artikler/912
Avatar billede steffennielsen Nybegynder
24. marts 2006 - 01:05 #4
Nu ser det efterhånden således ud:

        if btn1.Font.Color=clGray then begin
        ShellExecute(Handle, 'open', 'C:\Programmer\Gembird\Power Manager\pm2.exe', '-on -device1 -socket2', nil, SW_SHOWNORMAL);
        btn1.Font.Color:=clBlack;
        btn1.Enabled:=False;
        Timer1.Enabled:=True;
        end
        else
        if btn1.Font.Color=clBlack then begin
        ShellExecute(Handle, 'open', 'C:\Programmer\Gembird\Power Manager\pm2.exe', '-off -device1 -socket2', nil, SW_SHOWNORMAL);
        btn1.Font.Color:=clGray;
        btn1.Enabled:=False;
        Timer1.Enabled:=True;
        end

Kan man ikke referere til btn1 relativt, således at samme sætninger kan bruges til btn2, osv... noget lignende PHP_SELF...
Avatar billede arne_v Ekspert
24. marts 2006 - 01:15 #5
så er vi ud over mine Delphi kundskaber
Avatar billede pidgeot Nybegynder
24. marts 2006 - 01:23 #6
Hvor ligger den kode - i en event på din btn1? I så fald skulle jeg mene du kan udnytte at der følger en parameter ved navn Sender med. Denne er et Object som du kan typecaste til en TButton for direkte at henvise til den knap der blev aktivere.

Dvs. du i stedet for

if btn1.Font.Color=clGray then begin

skriver

if TButton(Sender).Font.Color=clGray then begin

Efter dette, kan du i Property Inspector sætte de andre knapper til at bruge prøcist samme event som btn1. Resten klarer sig selv, så længe du husker at erstatte alle referencer.
Avatar billede steffennielsen Nybegynder
28. marts 2006 - 19:50 #7
Kan jeg så også gøre Timer dynamisk, så btn2 bruger Timer2?

Og hvad hedder en Timer, hvis jeg skal gøre samme trick med selv-reference?
Avatar billede pidgeot Nybegynder
28. marts 2006 - 20:03 #8
Sender vil altid referere til den komponent der har modtaget event-kaldet - derfor vil den i en OnTimer altid referere til den Timer der går i gang.

Hvis du vil have en Timer per Button, bør du placere dine Buttons i et array, og sætte Tag-property'en for dine Timers til det index der indeholder den knap du skal bruge.
Avatar billede steffennielsen Nybegynder
06. april 2006 - 20:46 #9
Point?
Avatar billede arne_v Ekspert
06. april 2006 - 21:06 #10
mig eller pidgeot eller deler ?
Avatar billede steffennielsen Nybegynder
06. april 2006 - 21:49 #11
I er vist lige gode om det!
Avatar billede arne_v Ekspert
06. april 2006 - 21:54 #12
saa regner jeg med at vi begge skal ligge svar

her er fra mig
Avatar billede pidgeot Nybegynder
06. april 2006 - 22:06 #13
Og her er der fra mig :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester