Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2008, 10:58   #1
SanSanblch
Пользователь
 
Регистрация: 23.10.2008
Сообщений: 23
Вопрос Как сделать кросворд??

Леди и джентльмены,дамы и господа,пацаны и девушки, хлопцы и девахи !!!!
Помогите!!!
НА ЭВМ дали задания построить кроссворд в Delphi. Не могу придумать как и что сделать !!
Помогите с формой не с кодом, а с формой(как и что расположить)..
Просьба предложения с размещением 20 Label однгог Edita не катят!!
SanSanblch вне форума Ответить с цитированием
Старый 01.12.2008, 13:11   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

DrawGrid. Если в ячейке предполагается ввод буквы, то заливаем её белым цветом и разрешаем выделять ячейку. Иначе - заливаем черным и запрещаем её выделение. Вешаем обработчик на KeyPress и вводим в выделенную ячейку соответствующий символ, т.к. в ячейке может быть только один символ, то Edit тут ни к чему.
pu4koff вне форума Ответить с цитированием
Старый 01.12.2008, 15:00   #3
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

С левого бока ScroollBox в нем динамически создаються Label'ы c вопросами. В снизу же по ScrollBox типа кнопка проверить ^_^. А сам кроссворд я бы создал при помощи массива Edit'ов.
ЗЫ Возможно мой вариант не самый простой ^_^
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 01.12.2008, 15:08   #4
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

по моему DrawGrid очень удобная вещь... и вопросы можно размещать в ListView...
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Старый 01.12.2008, 15:16   #5
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Можно создавать все на канве.К примеру у Вас есть такой кроссворд :

Объявляете массив
Код:
mas: array[0..9,0..9] of byte =
          ((1,2,20,3,20,0,4,5,20,6),
           (0,20,0,20,0,7,0,20,0,20),
            //............  и т. д.
Здесь 0 - соответствует черной клетке, 20 - пустая (белая клетка), а остальные цифры соответствуют условиям кроссворда по гориз. и верт.
Далее в цикле по значениям массива строите кроссворд.А условия можно занести в Memo.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 01.12.2008, 15:25   #6
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию продолжение

Вот код (для простоты 5 х 5 клеток наобум)

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;
  x,y: integer;
  mas: array[0..4,0..4] of byte =
       ((1,2,20,3,0),
        (20,20,0,20,4),
        (20,5,6,20,20),
        (0,20,20,0,0),
        (7,20,0,0,20));


implementation

{$R *.dfm}



procedure TForm1.FormPaint(Sender: TObject);
VAR
  i,j: byte;
begin
  Form1.Canvas.Font.Size:= 12;
  Form1.Canvas.Font.Style:= [fsBold];
  Form1.Canvas.Brush.Color:= clWhite;
  for i:= 0 to 4 do
  begin
    for j:= 0 to 4 do
    begin
      if mas[i,j] = 20 then
         Form1.Canvas.Rectangle(100+40*j,100+40*i,(100+40*j)+40,(100+40*i)+40);
      if mas[i,j] = 0 then
      begin
        Form1.Canvas.Brush.Color:= clBlack;
        Form1.Canvas.Rectangle(100+40*j,100+40*i,(100+40*j)+40,(100+40*i)+40);
        Form1.Canvas.Brush.Color:= clWhite;
      end;
      if (mas[i,j] > 0) and (mas[i,j] < 17) then
      begin
        Form1.Canvas.Rectangle(100+40*j,100+40*i,(100+40*j)+40,(100+40*i)+40);
        Form1.Canvas.TextOut((100+40*j)+2,(100+40*i)+2,IntToStr(mas[i,j]));
      end;
    end;
  end;
end;

end.
По приведенному коду получится примерно следующее:
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 01.12.2008, 15:49   #7
SanSanblch
Пользователь
 
Регистрация: 23.10.2008
Сообщений: 23
Хорошо DeKot

DeKot да ты крут !!! Большое спасибо буду развивать твою тему!!!!!!!
SanSanblch вне форума Ответить с цитированием
Старый 01.12.2008, 15:57   #8
SanSanblch
Пользователь
 
Регистрация: 23.10.2008
Сообщений: 23
По умолчанию

Только один вопрос ??
1. А как ответ на кроссворд вводить ????
SanSanblch вне форума Ответить с цитированием
Старый 01.12.2008, 16:43   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от SanSanblch Посмотреть сообщение
Только один вопрос ??
1. А как ответ на кроссворд вводить ????
Дописывать код до своей реализации DrawGrid'а )
pu4koff вне форума Ответить с цитированием
Старый 01.12.2008, 16:56   #10
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Я бы приблизительно так делал - по мыши определял клетку,фиксировал там какай либо курсор( можно чтобы фон подмигивал), по KeyPress TextOut - ом вводил бы буквы.Добавить перемещение по клеткам клавишами управления курсором и т.д.Это как вариант.Конечно,кажется, что применение стандартных компонентов (Grid,Edit ...) ,более рационально.Но как по мне - уж слишком сухо.Работая на канве можно из кросворда сделать картинку,которая будет завлекать юзера.
Просто кроссворд можно и в газете почитать.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать условие ГОСЕАН БД в Delphi 5 14.11.2008 05:55
как сделать чтоб экселев. файл висел открытым на рабочем столе как афиша на заборе? Мара Помощь студентам 6 24.07.2008 13:29
Как сделать? killer12rus PHP 4 18.06.2008 16:03