Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Сократить код   Найти похожие ветки 

 
Bojo ©   (2012-05-24 12:25) [0]

Подскажите пожалуйста как сократить вот такой код

Var
Des:HWND;
a,b:PChar;
begin
if (checkBox1.Checked = true) and (checkBox2.Checked = true) then begin
  a:= 0 ;
  b:= 0;
  Edit1.Text:=("Nil");
  Edit2.Text:=("Nil");
  Des:=FindWindow(a,b);
end;
if (checkBox1.Checked = False) and (checkBox2.Checked = False) then begin
  Des:=FindWindow(Pchar(Edit1.Text),Pchar(Edit2.Text));
end;
 if (checkBox1.Checked = true) and (checkBox2.Checked = False) then begin
  a:= 0 ;
  Edit1.Text:=("Nil");
  Des:=FindWindow(a,Pchar(Edit2.Text));
end;
if (checkBox1.Checked = False) and (checkBox2.Checked = true) then begin
  b:= 0 ;
  Edit2.Text:=("Nil");
  Des:=FindWindow(Pchar(Edit1.Text),b);
end;
Label1.Caption :=IntToStr(Des);
end;

или другие варианты


 
ProgRAMmer Dimonych ©   (2012-05-24 12:39) [1]

Так лучше?

Var
  Des  : HWND;
  a, b : PChar;
begin
  if checkBox1.Checked then
  begin
    a := nil;
    Edit1.Text := "Nil";
  end
  else
    a := PChar(Edit1.Text);

  if checkBox2.Checked then
  begin
    b := nil;
    Edit2.Text := "Nil";
  end
  else
    b := PChar(Edit2.Text);

  Des := FindWindow(a, b);
  Label1.Caption := IntToStr(Des);
end;


 
oldman ©   (2012-05-24 12:40) [2]

if checkBox1.Checked then begin
 a:= 0 ;
 Edit1.Text:=("Nil");
 if checkBox2.Checked then begin
   b:= 0;
   Edit2.Text:=("Nil");
   Des:=FindWindow(a,b);  end;
 else Des:=FindWindow(a,Pchar(Edit2.Text));
 end
else
 if checkBox2.Checked then begin
   b:= 0 ;
   Edit2.Text:=("Nil");
   Des:=FindWindow(Pchar(Edit1.Text),b);
 end;
 else   Des:=FindWindow(Pchar(Edit1.Text),Pchar(Edit2.Text));
end;


 
Leonid Troyanovsky ©   (2012-05-24 13:29) [3]


> Bojo ©   (24.05.12 12:25)  


 Des:=FindWindow(Pointer(Edit1.Text),Pointer(Edit2.Text));

--
Regards, LVT.


 
Bojo ©   (2012-05-24 14:19) [4]

Требуется задание параметров FindWindow c помощью edit.
Des:=FindWindow(Pchar(Edit1.Text),Pchar(Edit2.Text));
Если 1-й параметр Pchar(Edit1.Text) вводить через edit ;
а 2-й требуется задать nil , то запись Pchar(Edit2.Text) не подойдет.По этому поставил CheckBox если Checked то Pchar(Edit1.Text) = 0


 
Bojo ©   (2012-05-24 14:27) [5]

А если расписывать FinwindowEx ... то код будет порядком больше ...


 
ProgRAMmer Dimonych ©   (2012-05-24 14:35) [6]

> [4] Bojo ©   (24.05.12 14:19)
> Требуется задание параметров FindWindow c помощью edit.
> Des:=FindWindow(Pchar(Edit1.Text),Pchar(Edit2.Text));
> Если 1-й параметр Pchar(Edit1.Text) вводить через edit ;
>
> а 2-й требуется задать nil , то запись Pchar(Edit2.Text)
> не подойдет.По этому поставил CheckBox если Checked то
> Pchar(Edit1.Text) = 0

Все три варианта попробовал?


 
Bojo ©   (2012-05-24 14:39) [7]

да, все равно много получается.


 
Bojo ©   (2012-05-24 14:42) [8]

может есть варианты задания Edit.Text = 0 без CheckBox?


 
robt   (2012-05-24 14:43) [9]


> а 2-й требуется задать nil , то запись Pchar(Edit2.Text)
> не подойдет

все подойдет, просто нефиг в эдиты писать нил


 
ProgRAMmer Dimonych ©   (2012-05-24 14:43) [10]

Давай тогда целиком задачу обрисуй. Явно ведь на FindWindow() всё не заканчивается.


 
ProgRAMmer Dimonych ©   (2012-05-24 14:44) [11]

> [7] Bojo ©   (24.05.12 14:39)
> да, все равно много получается.

Если получение значения по тексту edit"а и состоянию checkbox"а вынести в отдельную функцию - всего ничего, кстати, кода будет.


 
robt   (2012-05-24 14:48) [12]


> ProgRAMmer Dimonych ©   (24.05.12 14:44) [11]

"гениально"


 
Bojo ©   (2012-05-24 14:49) [13]

отправление окнам и эл-там на  них различные сообщения;
предусмотреть задание имён ., классов и т.д в ручную


 
ProgRAMmer Dimonych ©   (2012-05-24 14:50) [14]

> [12] robt   (24.05.12 14:48)
>
> > ProgRAMmer Dimonych ©   (24.05.12 14:44) [11]
>
> "гениально"

Что-то не так?


 
Bojo ©   (2012-05-24 14:54) [15]


> Если получение значения по тексту edit"а и состоянию checkbox"а
> вынести в отдельную функцию

может примерчик для размышления...


 
ProgRAMmer Dimonych ©   (2012-05-24 14:56) [16]

> [15] Bojo ©   (24.05.12 14:54)
> > Если получение значения по тексту edit"а и состоянию checkbox"а
> > вынести в отдельную функцию
> может примерчик для размышления...

В моей версии сокращённого кода есть повторяющийся if. Его - туда.

Но если послушать [9], то даже и этого на самом деле не требуется.


 
Bojo ©   (2012-05-24 15:00) [17]


> > а 2-й требуется задать nil , то запись Pchar(Edit2.Text)
>
> > не подойдет
>
> все подойдет, просто нефиг в эдиты писать нил

Если написать 0 тоже не подойдет


 
Bojo ©   (2012-05-24 15:01) [18]


> Bojo ©   (24.05.12 14:42) [8]
> может есть варианты задания Edit.Text = 0 без CheckBox?
>
>

????????????


 
ProgRAMmer Dimonych ©   (2012-05-24 15:12) [19]

> [18] Bojo ©   (24.05.12 15:01)
>
> > Bojo ©   (24.05.12 14:42) [8]
> > может есть варианты задания Edit.Text = 0 без CheckBox?
>
> >
> >
>
> ????????????

Например? Как это должно выглядеть, если Edit.Text - строка, а PChar - указатель?

Если нужна визуализация, придётся обрабатывать. От одного if"а ещё никто не умирал. Если необязательно, - можно сказать пользователю, что пустое поле - это nil.


 
sniknik ©   (2012-05-24 15:18) [20]

var
 Des: HWND;

 function StrToPChar(const value: string): PChar;
 begin
   if value = "" then result:= nil
                 else result:= PChar(value);
 end;

begin
 Des:= FindWindow(StrToPChar(Trim(Edit1.Text)),StrToPChar(Trim(Edit2.Text)));
end;


 
Bojo ©   (2012-05-24 15:22) [21]

а если требуется задать параметры FinWindowEx то одним if-ом не отделаешься , а если FinWindowEx несколько???


 
ProgRAMmer Dimonych ©   (2012-05-24 15:26) [22]

> [21] Bojo ©   (24.05.12 15:22)
> а если требуется задать параметры FinWindowEx то одним if-
> ом не отделаешься , а если FinWindowEx несколько???

Так всё-таки обязательно, чтобы отображался "Nil"?

И до какой степени нужно уменьшить код?


 
Bojo ©   (2012-05-24 15:29) [23]


>
> Так всё-таки обязательно, чтобы отображался "Nil"?
>


что бы отображался nil - без разницы ,вопрос в том как присвоить параметру FindWindow ( 0,0) через edit


 
ProgRAMmer Dimonych ©   (2012-05-24 15:35) [24]

> [23] Bojo ©   (24.05.12 15:29)
> что бы отображался nil - без разницы ,вопрос в том как присвоить
> параметру FindWindow ( 0,0) через edit

Тогда выше есть по крайней мере 2 решения, предполагающие, что пустая строка в edit"е - это 0 параметром FindWindow().


 
Bojo ©   (2012-05-24 15:45) [25]

Отлично Все ОК такая дискуссия,из-за того что нужно было просто очистить Edit, ни CheckBox`ов ни чего, одна строчка и всё !!!.
3-и часа доходил :(((((, даже Google вспотел).
Спасибо!!!


 
robt   (2012-05-24 18:53) [26]

пажалста



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.063 c
4-1258554833
Егорка
2009-11-18 17:33
2013.03.22
Интерфейсы


15-1353797738
DevilDevil
2012-11-25 02:55
2013.03.22
Перехватить любой Exception и подменить текст


10-1183115528
vir
2007-06-29 15:12
2013.03.22
TWebBrowser и TThread


15-1342444836
картман
2012-07-16 17:20
2013.03.22
точка пересечения двух графиков


15-1339739244
Demo
2012-06-15 09:47
2013.03.22
Купить интернет магазин